更新的问题:真正的问题似乎是我在文件名后附加了日期。我似乎无法重新设置日期格式,并且错误似乎是由日期中的/
触发的,那么如何重新设置此格式,以便excel理解文件名中包含日期?我现在了解到,SaveCopyAs不需要“虚拟”文件即可首先上传。
我目前对SaveCopyAs方法遇到运行时错误1004,说它找不到我要创建的新文件的位置。我的解释是,我需要创建一个“虚拟”文件来保存复制的信息,然后再用数据和新的文件名覆盖它。它是否正确?
创建虚拟文件并分别引用每个文件,然后按照上面的解释继续操作,解决方案将很简单。但是,我试图循环此过程,并且使用的是PERSONAL.XLSB中托管的模块,因此我无法使用ThisWorkbook
,而必须使用ActiveWorkbook
。现在的问题是,由于使用ActiveWorkbook
,我不知道如何创建将数据复制到新文件的自动化过程。
这是我当前的代码:
Sub cellvalue_filename()
Dim Path
Dim NewPath
Dim WBname
Dim Destination
Path = "C:\oldfilelocation\"
WBname = ActiveWorkbook.Name
NewPath = "C:\newfilelocation\"
Destination = NewPath & Range("B2") & WBname
ActiveWorkbook.SaveCopyAs filename:=Destination
ActiveWorkbook.Close
End Sub
答案 0 :(得分:2)
作为一般规则,在VBA中最好显式地引用所需的工作簿和工作表,而不是依赖于其处于活动状态。
您说您不能使用ThisWorkbook
,因为您引用的工作簿不是包含VBA代码的工作簿,但这并不意味着您必须使用ActiveWorkbook
。
相反,当您打开或创建工作簿时,您可以获得参考,例如
Dim objWorkbook As Workbook
Set objWorkbook = Application.Workbooks.Open(...)
...
objWorkbook.SaveCopyAs ...
类似地使用Range("B2")
而不指定工作表将假定活动工作簿中的活动工作表。而是明确指定工作表,例如:
Dim objWorksheet As Worksheet
Set objWorksheet = objWorkbook.Worksheets(1) ' or whatever worksheet you want
...
Destination = NewPath & objWorksheet.Range("B2") & WBname