2011-02-28 68 views
0

我知道可能有過這樣的問題。但我真的不熟悉VB,所以我需要幫助。下面是部分代碼:VB宏 - 運行時錯誤「13」在每個循環

Sub Convert_to_Digi() 

    Dim SrcWkb As Workbook 
    Dim csvWkb As Workbook 
    Dim srcSheet As Worksheet 
    Dim StartRow As Long 
    Dim wkbname As Variant 
    Dim xlsFiles As Variant 
    Dim MyRange As Range 
    Dim NewName As Variant 
    Dim csvName As String 

    StartRow = 2 

    ' Get the workbooks to open 
    xlsFiles = Application.GetOpenFilename(FileFilter:="Excel files (*.xls), *.xls", MultiSelect:=True) 
    If VarType(xlsFiles) = vbBoolean Then Exit Sub 

    ' Loop through each workbook and copy the data to this CSV 
    For Each wkbname In xlsFiles 
     Set SrcWkb = Workbooks.Open(Filename:=wkbname, ReadOnly:=False) 
     Set srcSheet = SrcWkb.Worksheets("export_label_conf") 

     ' Get used range on sheet 
     Set MyRange = srcSheet.UsedRange 
     ' Adjust to exclude top row 
     Set MyRange = MyRange.Offset(1, 0).Resize(MyRange.Rows.Count - 1) 

     NewName = srcSheet.Cells(2, 10) & ".csv" 

     If MyRange.Row + MyRange.Rows.Count - 1 >= StartRow Then 
      Set csvWkb = Workbooks.Open(Filename:="C:\DIGITAL\template.csv", ReadOnly:=False) 

      ' copy column A 
      MyRange.Columns(1).Copy 
      ' paste into CSV template file, column I 
      csvWkb.ActiveSheet.Cells(2, 9).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ 
       SkipBlanks:=False, Transpose:=False 

      ' and save template as new CSV with barcode as name 
      csvName = "C:\DIGITAL\" & NewName 
      csvWkb.SaveAs Filename:=csvName, FileFormat:=xlCSV, CreateBackup:=False 
     End If 

     SrcWkb.Close 
    Next wkbname 

End Sub 

我得到這個錯誤對於每個wkbname在xlsFiles線。 wkbname是空的,而xlsFiles包含一個文件的名稱,打開(但只有1,而它應該有幾個...)

,只有一小會兒前,它工作正常!我解開所有我能記得我做了,但沒有解決問題....

+0

開始使用版本控制系統(GIT,水銀,集市,SVN,...),以及你將永遠不會得到形式「只有一小會兒前,它是工作的罰款」的問題。 – 2011-02-28 12:25:18

+0

運行時錯誤13類型不匹配,我認爲 – 2011-02-28 12:25:47

+0

哪裏是你的代碼的其餘部分?它看起來像在For Each循環結束之前被切斷了。 – 2011-02-28 12:28:27

回答

0

我建議你做如下:

  • 嘗試編譯代碼。聽起來是假的,但可能會在其他地方指出可能影響這段代碼的問題。
  • 更改變量名。如果因任何原因發生Excel問題(變體混淆),它可以解決問題。
  • 檢查項目的引用。如果缺少參考,則VBA無法正常工作。

這裏只是嘗試了下面的代碼,並能正常工作......這幾乎是一樣的你(除了變量名)。

Public Sub OpenExcelFiles() 

    Dim vFiles As Variant 
    Dim vFile As Variant 
    Dim oXLFile As Excel.Workbooks 

    vFiles = Application.GetOpenFilename(FileFilter:="Excel files (*.xls), *.xls", MultiSelect:=True) 

    If VarType(xlsFiles) = vbBoolean Then Exit Sub 

    For Each vFile In vFiles 

     Set oXLFile = Workbooks.Open(vFile) 

    Next vFile 

End Sub