我正在开发一个从 Macro Express 运行的 VBScript 项目。此宏的每个用户都将打开两个电子表格(如下图所示):
用户将从 ERA SURF 分配工作簿运行宏,该宏将从该电子表格中收集数据并将其输入到 UBH 网守统计工作簿中。
我遇到的问题是让宏按需识别任一工作簿。
如果我使用VBScript 中的此代码激活没有 URL 的打开 Excel 电子表格,我将能够收集/输入数据,但它仅适用于最后打开的工作簿。
如果我使用以下代码,一旦找到 ERA SURF 分配,它将停止,但是,再一次,只拉出最后一个打开的工作簿:
For Each i In Application.Workbooks
BookNames = i.Name
If InStr(BookNames, "ERA SURF Assignment") Then
AppActivate (BookNames)
End If
Next i
我觉得我需要将两者结合起来,但也需要一种专门挑选出我想要的工作簿的方法。有什么建议么?
更新:
好的,我做了更多的研究,它比我想象的要复杂一些。我想出了以下代码。如果没有打开 Excel 工作簿,则会抛出 429 错误代码。我发现,如果除了我想要的之外还有另一个 Excel 工作簿打开,我会得到一个 9 错误代码。问题是如果我以一种方式排列我的代码,它会在我想要的文件打开时识别 9 代码,或者它会在未打开时尝试激活所需的工作簿。我错过了什么吗?
Set xl = Nothing
On Error Resume Next
Set xl = GetObject(, "Excel.Application") ' Attempt to attach to running Excel instance
If Err Then
If Err.Number = 429 Then
MsgBox "Neither workbooks are open (Excel is not running)." & vbNewLine & "Macro will attempt to open workbooks."
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True 'Making an Excel Object visible
Set BookA = objExcel.Workbooks.Open(File1) 'Opening an Excel file1
Set BookB = objExcel.Workbooks.Open(File2) 'Opening an Excel file2
Set xl = GetObject(, "Excel.Application") 'attach to running Excel instance
Else
MsgBox Err.Description & " (0x" & Hex(Err.Number) & ")"
End If
End If
BookA.Activate
If Err.Number = 9 Then
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True 'Making an Excel Object visible
Set BookA = objExcel.Workbooks.Open(File1) 'Opening an Excel file1
Else
AppActivate "ERA SURF Assignment"
objExcel.Visible = True 'Making an Excel Object visible
End If
BookB.Activate
If Err.Number = 9 Then
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True 'Making an Excel Object visible
Set BookB = objExcel.Workbooks.Open(File2) 'Opening an Excel file2
Else
AppActivate "UBH Gatekeeper Statistics"
objExcel.Visible = True 'Making an Excel Object visible
End If
On Error GoTo 0
