我已经能够硬编码我的文件,然后保存在同一个文件夹中。但是,使用正确名称创建的新文件根本没有内容。我发现了如何在当前目录中保存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
创建一个新的工作簿,这是一个空文件。这就变成了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)
你应该尽量避免使用Select
或Active
语句(这可以完全避免你的问题)。如需进一步阅读,请查看:How to avoid using Select in Excel VBA
让我们看一下代码的最后一点:
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
?)