VBA 无法打开包含动态名称的备份文件
Posted
技术标签:
【中文标题】VBA 无法打开包含动态名称的备份文件【英文标题】:VBA Unable to open backup file containing dynamic name 【发布时间】:2020-06-08 18:58:27 【问题描述】:VBA 新手,之前没有编码经验。
由于新文件中运行的宏存在问题,我正在使用 SaveCopyAs 创建备份副本以将扩展名更改为 .xlsx。此代码可以正确创建备份文件,但是当我尝试打开这个新文件时,我收到运行时错误“1004”对象“工作簿”的“打开”方法失败。
我尝试了几种不同的方式来写这个,但没有运气。我认为这是导致问题的动态部分。请告知打开新文件需要做什么。
Sub Refresh()
Dim currwbk As Workbook
Dim FilePath As String
Dim newFileName As String
FilePath = ThisWorkbook.Path
T = Format(Now, "mmm dd yyyy hh mm ss")
Set currwbk = Workbooks("467_Report_Active.xlsm")
Application.ScreenUpdating = False
newFileName = FilePath & " " & T & ".xlsx"
Application.DisplayAlerts = False
currwbk.SaveCopyAs newFileName
Application.DisplayAlerts = True
Workbooks.Open (newFileName)
End Sub
【问题讨论】:
SaveCopyAs
无法更改扩展名。
啊,好吧,它现在可以工作了,但是有没有办法保存工作簿,这样宏就不会在备份副本中继续存在?
SaveAs
并更改文件类型?
代码似乎找不到原始工作簿。我已经用几种不同的方式重写了这个,但出现了不同的错误。
【参考方案1】:
使用 SaveAs 和扩展代码代替 SaveCopyAs。我试过了,它对我有用。
文件格式代码:
51 = xlOpenXMLWorkbook(2007-2016 年没有宏,xlsx)
52 = xlOpenXMLWorkbookMacroEnabled(2007-2016 年有或没有宏,xlsm)
50 = xlExcel12(2007-2016 年 Excel 二进制工作簿,有或没有宏,xlsb)
56 = xlExcel8(Excel 2007-2016 中的 97-2003 格式,xls)
Reference link:
代码:
Sub Refresh()
Dim currwbk As Workbook
Dim FilePath As String
Dim newFileName As String
FilePath = ThisWorkbook.Path
T = Format(Now, "mmm dd yyyy hh mm ss")
Set currwbk = Workbooks("467_Report_Active.xlsm")
Application.ScreenUpdating = False
newFileName = FilePath & " " & T & ".xlsx"
Application.DisplayAlerts = False
currwbk.SaveAs Filename:=newFileName, FileFormat:=51
Application.DisplayAlerts = True
Workbooks.Open (newFileName)
End Sub
此外,您可以简单地分配此工作簿对象Set currwbk = Thisworkbook
,而不是使用Set currwbk = Workbooks("467_Report_Active.xlsm")
中的实际文件名,这样如果将来有更改,您就不需要更新文件名。
编辑:如果您希望源工作簿即使在使用新文件名保存并打开后仍处于打开状态,请检查此*** discussion 以获取代码。
【讨论】:
意识到我的错误,最后一行应该是 Workbooks.Open (currwbk)。当我运行它时,我收到一个运行时错误“438”。对象不支持此属性或方法。关于使用 currwbk 的一些原因会导致这种情况。这些文件都保存到本地 OneDrive 文件夹中。会不会是这个问题? 当您使用上述方法时,在 .saveAs 之后,您当前的工作簿将另存为新名称。意味着,您不能从触发的位置运行/继续原始工作簿中的宏。如果您仍然希望打开您的宏工作簿,即使将其复制到 .xlsx 文件中,请查看我在 EDIT 部分下发布的链接。以上是关于VBA 无法打开包含动态名称的备份文件的主要内容,如果未能解决你的问题,请参考以下文章