【问题标题】:Why does my SaveAs file save a file with the correct name, but has no contents?为什么我的 SaveAs 文件以正确的名称保存文件,但没有内容?
【发布时间】:2019-02-28 00:41:34
【问题描述】:

我已经能够对我的文件进行硬编码,然后在同一个文件夹中另存为。但是,使用正确名称创建的新文件根本没有内容。我找到了如何在 SO 上的所有帮助下保存在当前目录中,但无法解决这个问题。 由于我对 VBA 很陌生,因此任何事情都会有所帮助!

     Sheets.Select
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Paste
    Application.CutCopyMode = False

    Dim thisWb As Workbook, d As Integer

    Set thisWb = ActiveWorkbook
    Workbooks.Add
    d = InStrRev(thisWb.FullName, ".")
    'ActiveWorkbook.SaveAs Filename:=Left(thisWb.FullName, d - 1) & "-Prelims" & Mid(thisWb.FullName, d)
    ActiveWorkbook.SaveCopyAs Filename:=Left(thisWb.FullName, d - 1) & "-Prelims" & Mid(thisWb.FullName, d)

    ActiveWorkbook.Close savechanges:=False

End Sub

【问题讨论】:

  • Workbooks.Add - 在这里您正在创建一个新的(空工作簿),然后用新名称保存它。摆脱这条线。
  • 您可能还想查看代码中的avoiding activate and select
  • 一些需要考虑的事情:尽量避免使用.SelectActivateActiveWorkbook 之类的东西。你不需要这些。始终限定您的工作簿或工作表:Set thisWb = ThisWorkbookSet thisWs = ThisWorkbook.Worksheets("Sheet1")。现在您可以使用thisWs 引用任何范围(其中thisWs 的类型为Worksheet)。你不需要SelectActivate
  • @cybernetic.nomad:伟大的思想和所有这些 :)
  • 感谢大家的帮助,我会仔细阅读您提到的信息!

标签: excel vba


【解决方案1】:

您的Workbooks.Add 行创建了一个新工作簿,该工作簿是一个空文件。然后它变成了ActiveWorkbook,因此你的下一行保存了新的Workbook,它是空的。

通过查看您的代码,我猜您正在尝试保存源文件的副本。如果是这样,您不需要 Workbooks.Add 行 - 删除它,它应该可以解决您的问题。如果您尝试添加工作簿并保存副本:- 使用正确的引用而不是 Active 的引用,即

ActiveWorkbook.SaveCopyAs Filename:=Left(thisWb.FullName, d - 1) & "-Prelims" & Mid(thisWb.FullName, d)

变成

thisWb.SaveCopyAs Filename:=Left(thisWb.FullName, d - 1) & "-Prelims" & Mid(thisWb.FullName, d)

您应该尽量避免使用SelectActive 语句(这样可以完全避免您的问题)。如需进一步阅读,请看这里:How to avoid using Select in Excel VBA

【讨论】:

    【解决方案2】:

    让我们看看你的代码的最后一点:

    Workbooks.Add 'Creates a new Blank Workbook, and makes it the ActiveWorkbook
    d = InStrRev(thisWb.FullName, ".")
    ActiveWorkbook.SaveCopyAs Filename:=Left(thisWb.FullName, d - 1) & "-Prelims" & Mid(thisWb.FullName, d)
    'Saves your new Blank ActiveWorkbook
    

    您需要在新工作簿中添加一些内容,或者在不同的工作簿上执行 SaveAs(例如 thisWb.SaveCopyAs?)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-25
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多