Get.OpenFilename数组+' For Each'或者'做什么?

时间:2017-05-05 14:57:55

标签: excel vba excel-vba

早上好!

我现在只学习VBA一周了......就像从瀑布喝酒一样。尽管研究我似乎无法把它放在一起。此子程序用于打开多个选定的工作表,根据需要进行编辑,直到编辑完所有工作表。

我正在使用GetOpenFilename捕获多个文件,然后我想打开并运行我的StandaloneReportEdit宏 - 我不确定为什么我不能调用创建的数组,或者我应该研究什么来解决这个问题:

Dim my_FileName As Variant

my_FileName = Application.GetOpenFilename( _
    filefilter:="Excel Files,*.xl*;*.xm*", _
    Title:="Select Excel File to Open", _
    MultiSelect:=TRUE)

If my_FileName = False Then End

Set wb = Workbooks.Open(my_FileName, False, False)

Call StandaloneReportEdit 'Sub to very thoroughly edit reports

我会在哪里使用' For Each' (或者也许是Do While),我无法弄清楚要引用什么...会不会像这样有效?

For Each my_FileName 'Call StandaloneReportEdit here

或者我应该使用' Do While'如下所示:

Do While my_FileName = True

    If my_FileName = False Then End

Set wb = Workbooks.Open(my_FileName, False, False)

Call StandaloneReportEdit

Loop

这个问题可能不像你们所希望的那样彻底,我道歉,我想我错过了一些东西,只是指向正确的方向将非常感激。非常感谢您的时间!

1 个答案:

答案 0 :(得分:1)

For Each是最简单的,但您需要另一个变量来从数组中获取名称。另外,False的测试对Variant类型的变量也不适用(即使文档为suggests it)。最好使用IsArray()

Sub doIt()
    Dim myFileName As Variant
    Dim myFileNames As Variant
    Dim wb As Workbook

    myFileNames = Application.GetOpenFilename( _
        filefilter:="Excel Files,*.xl*;*.xm*", _
        Title:="Select Excel File to Open", _
        MultiSelect:=True)

    If Not IsArray(myFileNames) Then Exit Sub

    For Each myFileName In myFileNames
        Set wb = Workbooks.Open(myFileName, False, False)
        StandaloneReportEdit() 'Sub to very thoroughly edit reports
    Next

End Sub