【发布时间】:2017-10-03 20:34:28
【问题描述】:
我有一个适用于一个文件的代码。它读取 .xlsx 文件的名称并将 Application.GetOpenFilename 保存为变量。然后稍后在代码中使用它。
我希望能够在多个文件上运行此代码...例如:
用户选择文件名“x”、“y”和“z”
Sub Test()
Dim myvariable as variant, i As Integer
myvariable = Application.GetOpenFilename(FileFilter:="Excel files (*.xlsx), *.xlsx", MultiSelect:=True)
On Error GoTo ERRORHANDLER
For i = 1 To UBound(myvariable)
'''code to do stuff to my variable'''
Next i
Exit Sub
ERRORHANDLER:
MsgBox "No files were selected, action cancelled."
End Sub
这段代码应该每次都运行,对“x”、“y”、“z”进行处理,但我不断收到ERRORHANDLER 消息。
更新: 当我将 MsgBox ("Hello") 放入“执行代码”时,它会为我选择的尽可能多的文件打印它。当我编写 MsgBox (myvariable) 时,我得到了那个错误,所以我认为这是因为 Excel 不知道如何在代码的每个循环期间将每个单独的文件名保存为变量。 -
任何帮助将不胜感激!
【问题讨论】:
-
注释掉错误处理——它到底在哪里失败,错误是什么?您将所有类型的错误编码为“未选择文件”:这不一定准确。
-
嗨蒂姆,我将其注释掉,并得到“运行时错误 13,类型不匹配”(我还尝试将 i = 1 更改为 i = 0,正如下面有人评论的那样,但得到了相同的结果运行时错误。
-
当我将 MsgBox ("Hello") 放入“执行代码”时,它会为我选择的多个文件打印它。当我编写 MsgBox (myvariable) 时,我得到了那个错误,所以我认为这是因为 Excel 不知道如何在每次循环代码期间将每个单独的文件名保存为变量。