我通过打开文件并使用.xlsm文件运行一系列代码来运行vba代码。我正在使用以下代码打开一个excel文件:
Dim sPath As String, sName As String
sPath = ThisWorkbook.Path & "\"
sName = Dir(sPath & "*cash*.xls?")
If sName <> "" Then
With Workbooks.Open(sName)
.Worksheets("Sheet1").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
.Close SaveChanges:=False
ActiveSheet.Name = "Cash & CC Sales"
End With
End If
运行一系列代码后,我使用“另存为”(SaveAs)保存文件-以下代码:
Dim sPath4 As String, datePath4 As String
datePath4 = Replace(Worksheets("Dashboard").Range("N2").Value, "/", "-")
sPath4 = ThisWorkbook.Path & "\Dashboard " & datePath4 & ".xls"
ActiveWorkbook.SaveAs Filename:=sPath4, FileFormat:=xlNormal
End Sub
这是第一次工作。重新打开.xlsm文件后过一会儿再次运行代码时,抛出1004错误,提示它找不到文件“ Cash Listing.xls”,但是,我从未真正将其定义为该文件名在vba代码中,而是使用“ cash * .xls?”,这使我相信存在某种缓存问题?这使得它尝试打开一个较旧的文件。而且,奇怪的是,实际上确实存在“ Cash Listing.xls”。
有什么想法会导致此错误,以及如何发生以及如何避免此错误?该代码首次运行并运行,然后抛出错误,我可以解决的唯一方法是创建一个新的.xlsm文件,然后将代码复制到该文件中,然后再次运行。
答案 0 :(得分:1)
使用您提供的代码,我设法在本地重新创建错误。看来,尽管有sName = Dir(sPath & "*cash*.xls?")
行,但您的sName
字符串仍然只包含文件名(而不包含路径),在您的情况下为Cash Listing.xls
。如果我正确阅读了文档,则Dir
函数的行为如下:返回一个字符串,该字符串表示与指定模式或文件匹配的文件,目录或文件夹的名称属性 MSDN reference
如果您更改代码以在Workbooks.Open行中包含sPath,则应该可以解决此问题。 (至少在我的本地复制中如此):
Dim sPath As String, sName As String
sPath = ThisWorkbook.Path & "\"
sName = Dir(sPath & "*cash*.xls?")
If sName <> "" Then
With Workbooks.Open(sPath & sName)
.Worksheets("Sheet1").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
.Close SaveChanges:=False
ActiveSheet.Name = "Cash & CC Sales"
End With
End If
我尚不清楚为什么Workbooks.Open(sName)
在创建xlsm文件之后就可以正常工作,但是如果上述解决方案可以解决您的问题,那么就足够了:)