簡體   English   中英

使用 VBA 將范圍從一個工作表復制到另一個工作表,其中工作表由單元格值指定

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM