Excel VBA在Workbooks.Open中引发缓存问题错误1004?

时间:2018-07-20 02:47:56

标签: excel vba excel-vba

我通过打开文件并使用.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文件,然后将代码复制到该文件中,然后再次运行。

1 个答案:

答案 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文件之后就可以正常工作,但是如果上述解决方案可以解决您的问题,那么就足够了:)