Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba VB宏-运行时错误';13';为每个循环启用_Vba_Excel - Fatal编程技术网

Vba VB宏-运行时错误';13';为每个循环启用

Vba VB宏-运行时错误';13';为每个循环启用,vba,excel,Vba,Excel,我知道可能会有这样的问题。但是我真的不熟悉VB,所以我需要帮助。以下是代码的一部分: 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

我知道可能会有这样的问题。但是我真的不熟悉VB,所以我需要帮助。以下是代码的一部分:

    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
对于xlsFiles行中的每个wkbname,我在上都会遇到此错误。wkbname为空,而xlsFiles包含要打开的文件名(但只有1个,而它应该只有少量…)


就在不久前,它还工作得很好!我尽我所能撤销了我所做的一切,但没有解决问题……

我建议您按以下步骤操作:

  • 试着编译你的代码。听起来很假,但可能会在其他地方指出一个可能会影响这段代码的问题
  • 更改变量名。如果Excel因任何原因出现问题(变体混淆),则可以解决该问题
  • 检查项目的参考资料。如果缺少引用,VBA将无法正常工作
只是在这里尝试了下面的代码,效果很好。。。它与您的基本相同(除了变量名)


开始使用版本控制系统(Git、Mercurial、Bazaar、SVN等),您将永远不会再遇到“而且就在不久前它还可以正常工作”这种形式的问题。运行时错误13是一种类型不匹配,我想您的其余代码在哪里?对于每个循环,它似乎在
结束之前被切断。我每年只写一次宏。。我没有机会在工作时在电脑上安装任何程序。。。感谢您的理解我运行了这个(根据需要更改路径),并且在Excel2007中运行良好[状态norepro]
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