我正在尝试通过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
答案 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
(并修复您的其他一些声明)。