2016-02-08 18 views
0
Private Sub Workbook_Open() 
    Dim SourceList(0) 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(n) = ActiveWorkbook 
     ActiveWindow.Visible = False 
    Next 

    Application.ScreenUpdating = True 
    Workbooks.Open Filename:=ThisWorkbook.Path & "\HeroForge Anew 3.5 v7.4.0.1.xlsm", UpdateLinks:=3 
    ActiveWindow.Visible = True 

    Application.DisplayAlerts = False 
    For n = 0 To UBound(SourceList) 
     SourceList(n).Close 
    Next 
    Application.DisplayAlerts = True 
End Sub 

线For n = 0 to PathList.GetUpperBound(0)抛出一个“编译错误(无效限定符)每当我尝试运行该宏。具体来说它突出PathList作为该问题。什锦VBA阵列迭代困境

另外,如果我切出的循环,只是有内容运行一次(更换PathList(n)"\data\WeaponInfo.csv"),它抛出一个“对象变量或带块变量未设置”错误的SourceList(0) = ActiveWorkbook行。我在做什么错?

我“ m知道循环目前没有意义;这是未来的防护,因为我打算使用这个宏来打开多个数据引用。

编辑:由@Jeremy建议的更改,现在在SourceList(n).Close行上得到“对象变量或块变量未设置”错误。

EDIT2:固定循环,再次@Jeremy的建议,通过改变Dim SourceList(1) As WorkbookDim SourceList(0) As Workbook

+0

首先需要声明什么类型的n是 –

+0

接着说:暗淡N作为Integer'的声明。没有效果。 –

+0

你为什么要拆分pahtlist? –

回答

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 
    
+0

分裂是未来打击。将有更多的资源被打开,这就是为什么我使用循环。显然字符串数组虽然是棘手的,但我很难正确初始化它。分裂的解决方案建议[这里](http://stackoverflow.com/questions/19369132/declare-and-initialize-string-array-in-vba)。 –

+0

@TamCoton在SourceList之后还有一个冒号应该消失。 – Jeremy

+0

谢谢,这工作!尽管如此,循环底部仍然给我带来麻烦。 –