我在OUTLOOK VBA中使用此代码打开Excel工作簿:
'~~> BEGINNING OF EXCEL CODE <~~
Dim xlApp As Excel.Application
Dim sourceWB As Excel.Workbook
Dim sourceWS As Excel.Worksheet
Set xlApp = New Excel.Application
With xlApp
.Visible = True
.EnableEvents = True
.UserControl = False
.DisplayAlerts = False
.AskToUpdateLinks = False
End With
strFile = scPATH & "Seattle ScoreCard " & Format(prevSCdate, "mm") & "." & Format(prevSCdate, "dd") & "." & Format(prevSCdate, "yy") & ".xlsm"
Set sourceWB = xlApp.Workbooks.Open(strFile, , False, , , , , , , True)
Set sourceWS = xlApp.sourceWB.Worksheets(Chr(34) & "Week " & Format(prevSCdate, "ww") & " " & Format(prevSCdate, "mm") & "." & Format(prevSCdate, "dd") & "." & Format(prevSCdate, "yy") & Chr(34))
'~~> CANT GET THIS TO RUN ONCE EXCEL OPENS <~~
sourceWS.Copy Before:=Sheets(2)
'~~>
...
它会打开正确的文件和所有内容,但一旦打开它就不会执行sourceWS.Copy行。我已经通过在Excel文件中直接从VBA执行该命令来验证该命令。我也激活了Excel库。
有任何帮助吗?结果就好像最后一行不存在一样。它打开文件然后没有任何反应。
答案 0 :(得分:1)
第一件事:
Set sourceWS = xlApp.sourceWB.Worksheets(...)
在这一行中,您尝试调用名称为xlApp
的{{1}}对象(类Excel.Application
的实例)的属性,但当然,{{ 1}}不支持名为sourceWB
的属性。
除非您使用xlApp
,否则会给您一个错误 - 如果是这样,请小心使用它,请参阅image to my another answer以获取解释原因: < / p>
因此,在打开工作簿并且Outlook知道sourceWB
属于On Error Resume Next
时,您已将sourceWB
分配给xlApp
。这意味着您不应该在此上下文sourceWB
中使用它。将上面的行更改为
xlApp
另一件事是使用xlApp.sourceWB
的完全限定名称(如果在执行代码时有多个打开的工作簿,则仅使用Set sourceWS = sourceWB.Worksheets(...)
可能会触发错误)。变化:
Sheets(2)
到
Sheets(2)