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

时间:2015-07-02 16:26:09

标签: excel vba excel-vba

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

问题: 在第三次更改时将始终使用其中两个工作簿(例如RFQ_1234,RFQ_1235)。宏工作得很好,除了每次使用它,我必须调试它并重新输入第三个工作簿的名称。如何在不使用特定名称的情况下更改我的代码以使其引用第3个工作簿?

声明: 我知道。选择超级慢,我不在乎。它只需要工作。另外,我对编码知之甚少,所以请解释最细微的细节。

代码示例:

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

2 个答案:

答案 0 :(得分:3)

尽可能少地更改代码(根据要求!)......

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

编辑:这是<{1}}以上

的改进版本
Tester

答案 1 :(得分:0)

您可以按索引或activesheet引用它。

Dim ws as Excel.Worksheet

ws = Workbook.ActiveSheet

ws.Cell(A1).Value = "SomeValue"

或者您可以使用索引。

Set ws = ExcelApplication.Worksheets(1)