各种VBA数组迭代问题

时间:2016-02-08 11:54:41

标签: excel vba

For n = 0 to PathList.GetUpperBound(0)

每当我尝试运行此宏时,行PathList都会抛出一个“编译错误(无效的限定符)。具体来说,它突出显示PathList(n)是问题。

此外,如果我切出循环并且只运行一次内容(用"\data\WeaponInfo.csv"替换SourceList(0) = ActiveWorkbook),它会抛出“对象变量或带有块”变量未在SourceList(n).Close行设置“错误。我做错了什么?

我知道循环目前毫无意义;因为我将使用这个宏来打开多个数据引用,所以它将来会有所改进。

编辑:下面是@Jeremy建议的更改,现在Dim SourceList(1) As Workbook行上的“对象变量或未设置块变量”错误。

EDIT2:再次根据@Jeremy的建议修改了循环,将Dim SourceList(0) As Workbook更改为{{1}}

1 个答案:

答案 0 :(得分:3)

有几个问题:

  1. 在VBA中,GetUpperBound方法不存在,仅适用于.NET。将其更改为Ubound功能。

  2. 您可能遇到Sourcelist(0)= ActiveWorkbook的问题。在分配对象引用时使用Set关键字。

  3. 您的循环中未定义来源。始终将Option Explicit放在代码模块的顶部以强制您声明变量。它将在未来挽救痛苦。

  4. 你想分割那个字符串是做什么的?你将得到一个值,这是你传入的字符串。

    Private Sub Workbook_Open()  
    
        Dim SourceList(1) As Workbook
        Dim PathList() As String
        Dim n as Integer
        PathList = Split("\data\WeaponInfo.csv", ",")
    
        ThisWorkbook.Activate
        Application.ActiveWindow.Visible = False
        Application.ScreenUpdating = False
    
        For n = 0 To Ubound(PathList)
            Workbooks.Open Filename:=ThisWorkbook.Path & PathList(n)
            Set SourceList(0) = ActiveWorkbook
        Next
    
        ActiveWindow.Visible = False
    
        Application.ScreenUpdating = True
        Workbooks.Open Filename:=ThisWorkbook.Path & "\HeroForge Anew 3.5 v7.4.0.1.xlsm", UpdateLinks:=3
        ActiveWindow.Visible = True
    
        For Each Source In SourceList
            Source.Close
        Next
    End Sub