为什么我的SaveAs文件以正确的名称保存文件但没有内容?

时间:2019-02-27 16:28:07

标签: excel vba

我已经能够对文件进行硬编码,然后另存为相同的文件夹。但是,使用正确名称创建的新文件完全没有内容。我找到了如何在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

2 个答案:

答案 0 :(得分:4)

您的行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

答案 1 :(得分:1)

让我们看一下代码的最后一部分:

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?)