背景: 我正在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
答案 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)