我已经能够对文件进行硬编码,然后另存为相同的文件夹。但是,使用正确名称创建的新文件完全没有内容。我找到了如何在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
答案 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)
您应该尽量避免使用Select
或Active
语句(这样可以完全避免您的问题)。要进一步阅读,请看这里: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
?)