我尝试合并新工作簿中的文件夹中的工作簿 . VBA代码从文件夹中读取excel文件,将每个文件名添加到 list box 然后,在按下按钮"Start"后,将非常文件添加到工作簿 . 这就是主意 .
代码如下:打开文件时,显示用户窗体:
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
此时 listbox 和数组 Vars.xlsFiles 已填充;他们都还好 .
单击userform中的“开始”按钮:
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 =“” . 该怎么办 ?
2 回答
你永远不会设置变量
fileName
,所以它仍然是默认值""
. 也许你对Workbooks.Open
方法的fileName:=Vars.xlsFiles(i)
感到困惑 . 这只是设置该方法的选项FileName
. 使用一些唯一的名称以避免混淆并将其设置为Vars.xlsFiles(i)
或使用FileName:=是Workbooks.Open方法的命名参数 . 它不设置cmdStart_Click的fileName变量的值 .