尝试打开文件时,Filename为空

时间:2016-07-05 11:38:08

标签: excel vba excel-vba

我尝试从新工作簿中的文件夹合并工作簿。 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 =“”。 怎么办?

2 个答案:

答案 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