2011-02-28 40 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