试图打开文件时,文件名是空的

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

代码如下:当打开文件时,用户窗体显示:

Private Sub Workbook_Open() UserForm1.Show End Sub 

当激活userform时,列表框被填充:

 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被填充; 他们都还好。

单击用户窗体中的“开始”button:

 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个文件。 他们的名字在列表框中。 但是,当第一个被closures,我收到了一个错误消息,debugging后说,fileName =“”(行Workbooks(fileName).Close )。 无论我尝试我得到了同样的错误,即文件名=“”。 该怎么办 ?

你从来没有设置variablesfileName ,所以它仍然是默认值"" 。 也许你被Workbooks.Open方法的fileName:=Vars.xlsFiles(i)弄糊涂了。 这只是设置该方法的选项FileName 。 使用一些独特的名称,以避免混淆,并将其设置为Vars.xlsFiles(i)或使用

 Workbooks(Vars.xlsFiles(i)).close 

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

 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