VBA找到工作簿,然后给出错误消息说它丢失了

时间:2018-06-24 23:36:27

标签: excel vba excel-vba

我正在VBA中使用一些代码从目录中打开工作簿:

Application.ScreenUpdating = False
Dim StrFile As String
Dim src As Workbook
Dim books As Object

Set today = CreateObject("scripting.dictionary")
Set books = CreateObject("scripting.dictionary")

StrFile = Dir("C:\Users\userA\Documents\XXX\scripts" & "\*" & ".xlsm")
Do While Len(StrFile) > 0
    MsgBox (StrFile)
    Set src = Workbooks.Open(StrFile, True, True)
    Call createInput
    src.Close SaveChanges:=False

    StrFile = Dir

Loop

现在,这将找到我的工作簿并在MsgBox中打印出名称,但是当调用下面的行时,我收到运行时1004错误(找不到,“它是否可能被移动,重命名或删除了?”

Set src = Workbooks.Open(StrFile, True, True)

我不知道这怎么可能,因为它清楚地表明该文件存在。谁能指导我哪里出问题了?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您错过了路。 Dir仅返回文件名,因此除非“ C:\ Users \ userA \ Documents \ XXX \ scripts \”刚好是默认路径,否则工作簿将丢失。

dim fp as string
fp = "C:\Users\userA\Documents\XXX\scripts\"

StrFile = Dir(fp & "*.xlsm")
Do While Len(StrFile) > 0
    MsgBox (StrFile)
    Set src = Workbooks.Open(fp & StrFile, True, True)
    Call createInput
    src.Close SaveChanges:=False

    StrFile = Dir

Loop

您可能想研究使用environ("USERPROFILE")来构造包含您的路径的字符串。例如:

fp = environ("USERPROFILE") & "\Documents\XXX\scripts\"