2016-07-05 85 views
0

我尝试合并新工作簿中文件夹的工作簿。 VBA代码从文件夹中读取excel文件,将每个文件名添加到列表框,然后在按下“开始”按钮之后,将非常文件添加到工作簿。这是主意。尝试打开文件时文件名为空

的代码是folows: 当打开用户窗体显示的文件:

Private Sub Workbook_Open() 
    UserForm1.Show 
End Sub 

当激活用户窗体,填充列表框:

Private Sub UserForm_Activate() 
    Const strFolder As String = "C:\Users\user\Desktop\tmp\" 
    Const strPattern As String = "*.xls" 
    Dim strFile As String 
    Dim collection As New collection 
    Dim i As Integer 
    Dim isMerger As Integer 
    Dim lngth As Integer 

    strFile = Dir(strFolder & strPattern, vbNormal) 
    If (StrComp(strFile, "FileMerger.xls") <> 0) Then 
     If (Len(strFile) <> 0) Then 
      col.Add (strFolder & strFile) 
      Do While Len(strFile) > 0 
       strFile = Dir 
       If (StrComp(strFile, "FileMerger.xls") <> 0) Then 
        If (Len(strFile) <> 0) Then 
         col.Add (strFolder & strFile) 
        End If 
       End If 
      Loop 
     End If 
    End If 
    Vars.xlsFiles = ColToArray(collection) 
    For i = 1 To UBound(Vars.xlsFiles) 
     lstFiles.AddItem (Vars.xlsFiles(i)) 
    Next i 
End Sub 

此时列表框并且数组Vars.xlsFiles被填充;他们都还好。

点击开始按钮,在用户窗体:

Private Sub cmdStart_Click() 
    Dim fileName As String 
    Dim sheet As Worksheet 
    Dim i As Integer 
    Dim ub As Integer 

    ub = UBound(Vars.xlsFiles) 
    For i = 1 To ub 
     Workbooks.Open fileName:=Vars.xlsFiles(i), ReadOnly:=True 
     For Each sheet In ActiveWorkbook.Sheets 
      sheet.Copy After:=ThisWorkbook.Sheets(1) 
     Next sheet 
     Workbooks(fileName).Close 
    Next i 
End Sub 

在文件夹的3个文件。他们的名字在列表框中。但是,当第一个要关闭时,我收到一条错误消息,并在调试后显示fileName =“”(行Workbooks(fileName).Close)。 无论我尝试我得到了同样的错误,即fileName =“”。 怎么办?

+0

我添加以下内容:错误消息说:“运行时错误(9)下标越界。” –

回答

1

FileName:=是Workbooks.Open方法的命名参数。它不会设置cmdStart_Click的fileName变量的值。

Private Sub cmdStart_Click() 
    Dim fileName As String 
    Dim sheet As Worksheet 
    Dim i As Integer 
    Dim ub As Integer 

    ub = UBound(Vars.xlsFiles) 
    For i = 1 To ub 
     fileName = Vars.xlsFiles(i) 
     Workbooks.Open FileName:=fileName, ReadOnly:=True 
     For Each sheet In ActiveWorkbook.Sheets 
      sheet.Copy After:=ThisWorkbook.Sheets(1) 
     Next sheet 
     Workbooks(fileName).Close 
    Next i 
End Sub 
+0

您尚未初始化fileName变量的值。 – user1590217

1

你从来没有设置变量fileName,所以它仍然是默认值""。也许你对Workbooks.Open方法的fileName:=Vars.xlsFiles(i)感到困惑。这只是设置该方法的选项FileName。使用一些独特的名称,以避免混乱,并把它设置为Vars.xlsFiles(i)或使用

Workbooks(Vars.xlsFiles(i)).close 
相关问题