我正在从Macro Express运行VBScript的项目中。该宏的每个用户将打开两个电子表格(如下图所示):
用户将运行ERA SURF分配工作簿中的宏,该工作簿将从此电子表格中收集数据并将其输入到UBH Gatekeeper Statistics工作簿中。
我遇到的问题是让宏识别按需识别的两个工作簿。
如果我使用VBScript Activate open Excel spreadsheet without URL中的代码,则可以收集/输入数据,但仅在上次打开的工作簿中使用。
如果我使用以下代码,则在找到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