首页 文章

尝试打开文件时,Filename为空

提问于
浏览
0

我尝试合并新工作簿中的文件夹中的工作簿 . 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 回答

  • 1

    你永远不会设置变量 fileName ,所以它仍然是默认值 "" . 也许你对 Workbooks.Open 方法的 fileName:=Vars.xlsFiles(i) 感到困惑 . 这只是设置该方法的选项 FileName . 使用一些唯一的名称以避免混淆并将其设置为 Vars.xlsFiles(i) 或使用

    Workbooks(Vars.xlsFiles(i)).close
    
  • 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
    

相关问题