打开工作簿时如何解决“运行时错误” 13'类型不匹配

时间:2019-08-22 18:09:36

标签: excel vba

我正在尝试通过VBA在Excel中打开两个单独的工作簿,以某种方式,相同的代码行在一种情况下有效,而在第二种情况下则不行。

我的第一行代码正常工作:

  public class CsvHeaderMap : ClassMap<CsvModel>
{
    public CsvHeaderMap()
    {
        Map(m => m.EAN).Name("EAN");
        Map(m => m.EAN).Name("Store Id");
        Map(m => m.EAN).Name("Quantity");
        Map(m => m.EAN).Name("Amount");
        Map(m => m.EAN).Name("Date");
    }
}

但是,第二个没有,它会打开文件,但不会将其存储为wb2并返回Mistype错误。

Set WB1 = Workbooks.Open(path & fName & fExt, UpdateLinks:=xlUpdateLinksNever)

[EDIT]这是整个代码集:

Set WB2 = Workbooks.Open(path1 & fName1 & fExt1,UpdateLinks:=xlUpdateLinksNever)

在尝试打开第二个文件之前,我曾尝试激活父工作簿,但没有成功。

Option Explicit

Sub Update_Supply_Concerns()

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

    Dim wb, WB1, WB2 As Workbooks
    Dim ws, ws1, ws2 As Worksheets
    Dim path, path1, path2 As String
    Dim fName, fName1, fName2 As String
    Dim uName As String
    Dim rDate As String
    Dim fExt, fExt1 As String

    uName = Environ$("username")

    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Macro")

    With ws
        .Activate

        rDate = .Range("D6").Value

        path = "C:\Users\" & uName & "\Documents\Projects\" & rDate & "\"
        fName = "Hospital"
        fExt = ".xlsx"
        path1 = "C:\Users\" & uName & "\Box Sync\Supply Concerns 2.0\"
        fName1 = "Supply Concerns v2"
        fExt1 = ".xlsx"

        Set WB1 = Workbooks.Open(path & fName & fExt, UpdateLinks:=xlUpdateLinksNever)
        Set WB2 = Workbooks.Open(path1 & fName1 & fExt1, UpdateLinks:=xlUpdateLinksNever)
    End With
End Sub

1 个答案:

答案 0 :(得分:0)

一个问题是

Dim wb, WB1, WB2 As Workbooks

不执行您认为的操作。它将wb, WB1声明为简单的Variants,然后将WB2声明为Workbooks(请注意“ s”!)对象。它没有将这三个变量中的任何一个声明为 Workbook 对象。

由于WB1是变体(可以容纳工作簿对象),因此行

Set WB1 = Workbooks.Open(path & fName & fExt, UpdateLinks:=xlUpdateLinksNever)

没问题。但是由于WB2被声明为工作簿对象,因此行

Set WB2 = Workbooks.Open(path1 & fName1 & fExt1,UpdateLinks:=xlUpdateLinksNever)

是类型不匹配,因为您正尝试使用工作簿变量来保存工作簿对象。

要开始修改代码,请使用以下声明:

Dim wb As Workbook, WB1 As Workbook, WB2 As Workbook

(并修复您的其他一些声明)。