【问题标题】:Excel: Multiple File Run, Save Each File name as variableExcel:多个文件运行,将每个文件名保存为变量
【发布时间】: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 不知道如何在每次循环代码期间将每个单独的文件名保存为变量。

标签: excel vba


【解决方案1】:

除非您知道确切的错误,否则打印错误描述总是好的。 您可以通过将以下行放在错误处理程序下来找出错误。

MsgBox Err.Description

我在放置简单的 msgbox 后尝试了多选代码,它似乎对我有用。 检查是否缺少 i 来引用数组。

MsgBox (myvariable(i))

【讨论】:

  • 嗨,伊姆兰!感谢您的评论!我需要做的就是添加(i)并且它起作用了!这实际上是在告诉它从选定的文件名创建一个数组吗?
  • myvariable 已经被声明为变体,所以基本上你是它被创建的,你只是通过 i 访问它的成员。
  • 这是有道理的。再次感谢您!
【解决方案2】:

在循环声明中应该是:

For i = 0 To UBound(myvariable)

【讨论】:

  • 嗨 adarti,我试过了,但不幸的是仍然收到“运行时错误 13,类型不匹配”
猜你喜欢
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
  • 2019-06-18
  • 2017-11-29
  • 1970-01-01
  • 2022-12-15
  • 2019-02-13
  • 1970-01-01
相关资源
最近更新 更多