[英]Using VBA to copy range from one worksheet to another where the worksheet is specified by a cell value
我正在尝试使用 VBA 将数据从一个工作表复制到另一个工作表。 我有一个包含大约 62 个不同工作表选项卡的工作簿。
对我来说特别棘手的部分是数据需要复制到的工作表并不总是相同的。
我有一个下拉菜单,列出了 62 种不同的设备。 这当前显示在名为“HOME”的工作表中的 G1 中。 我希望文本根据选择复制到正确的选项卡。
我已经弄清楚如何复制特定文本,当我这样做时,我看到指定的工作表上出现“TEXT”一词。
Sheets(Range("g1").Value).Activate
Range("a1").Value = "TEXT"
但是,我无法弄清楚的部分是如何基于相同的下拉菜单将 G4:G24 从我的“HOME”工作表复制到另一个工作表。
这是我尝试过的。
Private Sub CommandButton1_Click()
Worksheets("HOME").Range("g4:g24").Copy
Sheets(Range("g1").Value).Activate
Range("a1").Value = "TEXT"
Sheets(Range("g1").Value).Activate
Range("f4").PasteSpecial
End Sub
明确工作簿和工作表 - 切勿在未限定工作表的情况下使用范围/单元格(尽管如果您指的是相关的工作表,您可以在工作表代码模块中摆脱它)。
Private Sub CommandButton1_Click()
Dim wb As Workbook, ws As Worksheet
Set wb = ThisWorkbook 'or ActiveWorkbook?
With wb.Worksheets("HOME")
Set ws = wb.Worksheets(.Range("G1").Value) 'create a worksheet reference
ws.Range("A1").Value = "TEXT" '...and use it
.Range("g4:g24").Copy ws.Range("f4")
End With
End Sub
参见例如: 工作表和单元格和范围的默认范围是什么?
一般来说,你有一个良好的开端,但它可以用更少的行以更快的速度完成,如下所示:
Sub ExampleSub()
Dim SheetName As String
SheetName = Worksheets("HOME").Range("A1").Value
Worksheets("HOME").Range("G4:G24").Value = Worksheets(SheetName).Range("G4:G24").Value
End Sub
甚至没有必要使用变量SheetName
,但它可以帮助保持简单,它现在也可以在以后的子例程中重用。 参考表的替代方法是将变量设为工作表:
Sub ExampleSub()
Dim SheetName As Worksheet
Dim HomeSheet As Worksheet
Set HomeSheet = Worksheets("HOME")
Set SheetName = Worksheets(HomeSheet.Range("A1").Value)
HomeSheet.Range("G4:G24").Value = SheetName.Range("G4:G24").Value
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.