[英]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.