2016-07-05 86 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 
相關問題