我尝试从新工作簿中的文件夹合并工作簿。 VBA代码从文件夹中读取excel文件,将每个文件名添加到列表框,然后在按下“开始”按钮后,将非常文件添加到工作簿。这就是主意。
代码如下: 打开文件时,将显示用户表单:
$(randomHrefs).attr("href", function(i, val) {
//put your logic here, as in your code
}
激活用户表单时,将填充列表框:
Private Sub Workbook_Open()
UserForm1.Show
End Sub
此时列表框和数组 Vars.xlsFiles 已填充;他们没事。
点击用户表单中的“开始”按钮:
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
在该文件夹中有3个文件。他们的名字在列表框中。但是当第一个要关闭时,我收到一条错误消息,在调试后它说fileName =“”(行 工作簿(fileName)。关闭 )。 无论我尝试什么,我都得到了同样的错误,即fileName =“”。 怎么办?
答案 0 :(得分: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
答案 1 :(得分:1)
您永远不会设置变量fileName
,因此它仍然是默认值""
。也许您对fileName:=Vars.xlsFiles(i)
方法的Workbooks.Open
感到困惑。这只是设置该方法的选项FileName
。使用一些唯一名称以避免混淆并将其设置为Vars.xlsFiles(i)
或使用
Workbooks(Vars.xlsFiles(i)).close