如何引用一个打开的Excel表格,我不知道名字?

背景:我在Excel中录制了一个macros,在三个不同的工作簿之间传输数据,这三个工作簿都是同时打开的(我logging下来,然后进入代码并修复任何错误,因为我没有编码经验)。

问题:在第三次更改时,将始终使用两个工作簿(例如RFQ_1234,RFQ_1235)。 这个macros很好用,除了每次使用它,我都要debugging它,并重新input第三个工作簿的名称。 如何更改我的代码,以便在不使用特定名称的情况下引用第三个工作簿?

免责声明:我知道。select超级慢,我不在乎。 它只是需要工作。 另外,我对编码知之甚less,所以请详细解释一下。

代码示例:

Windows("RFQ_14446.xlsm").Activate Range("J51").Select Selection.Copy Windows("Transfer Template.xlsm").Activate Range("B1").Select ActiveSheet.Paste Windows("RFQ_14446.xlsm").Activate Range("D27").Select Application.CutCopyMode = False Selection.Copy Windows("Transfer Template.xlsm").Activate Range("B2").Select ActiveSheet.Paste Windows("RFQ_14446.xlsm").Activate Range("D5").Select Application.CutCopyMode = False Selection.Copy Windows("Transfer Template.xlsm").Activate Range("B3").Select ActiveSheet.Paste 

尽可能less地改变代码(按照要求)…

 Sub Tester() Dim wbName As String wbName = GetRfqWbName("RFQ_") If Len(wbName) = 0 Then MsgBox "Didn't find the RFQ workbook!" Exit Sub End If Windows(wbName).Activate Range("J51").Select Selection.Copy Windows("Transfer Template.xlsm").Activate Range("B1").Select ActiveSheet.Paste Windows(wbName).Activate Range("D27").Select Application.CutCopyMode = False Selection.Copy Windows("Transfer Template.xlsm").Activate Range("B2").Select ActiveSheet.Paste Windows(wbName).Activate Range("D5").Select Application.CutCopyMode = False Selection.Copy Windows("Transfer Template.xlsm").Activate Range("B3").Select ActiveSheet.Paste End Sub 'get the name of the first workbook which begins with sName... Function GetRfqWbName(sName As String) As String Dim wb As Workbook For Each wb In Workbooks If wb.Name Like sName & "*" Then GetRfqWbName = wb.Name Exit For Next wb End Function 

编辑:这是上面的Tester子的改进版本

 Sub Tester2() Dim wbName As String, shtSrc As Worksheet, shtDest As Worksheet wbName = GetRfqWbName("RFQ_") If Len(wbName) = 0 Then MsgBox "Didn't find the RFQ workbook!" Exit Sub Else 'for example: you can substitute the sheet names instead Set shtSrc = Workbooks(wbName).Sheets(1) Set shtDest = Workbooks("Transfer Template.xlsm").Sheets(1) End If shtSrc.Range("J51").Copy shtDest.Range("B1") shtSrc.Range("D27").Copy shtDest.Range("B2") shtSrc.Range("D5").Copy shtDest.Range("B3") End Sub 

你可以通过索引或activesheet来引用它。

 Dim ws as Excel.Worksheet ws = Workbook.ActiveSheet ws.Cell(A1).Value = "SomeValue" 

或者你可以使用索引。

 Set ws = ExcelApplication.Worksheets(1)