簡體   English   中英

Excel VBA:將范圍設置為激活表

[英]Excel VBA: set a range as an activate sheet

我目前正在處理一個工作簿,其中所有工作表信息都存儲在工作表中(“概述”)。 在“A:A”列中,我有每個工作表的名稱。 我想要制作的是貫穿“A:A”列中列出的每個單元格的宏,並打印出該工作表。 打印代碼不是問題。 問題是我不知道將單元格稱為工作表。 我想出了這個解決方案,但我不起作用。

Worksheets(Range("A1")).Activate

是否有可能從單元格中引用激活工作表?

嘗試

Worksheets(Range("A1").Value).Activate

如評論中所述,您的代碼將受益於在此處限定您的對象( Range("A1")在哪張紙上?)。 最后,您很少需要激活工作表來對其執行操作。 只需跳過Activate並直接跳轉到您的行動聲明

Dim ws As Worksheet

With ThisWorkbook 'or ActiveWorkbook, or ?
    Set ws = .Worksheets(.Worksheets("Overview").Range("A1").Value)
End With

'do something with ws

以下代碼通過其名稱引用給定的工作表,在Worksheets("Overview") A:A列中寫入為文本:

Sub PrintWorksheetNames()

    Dim myCell As Range
    Dim lastCell As Long
    lastCell = LastRow("Overview")

    For Each myCell In ThisWorkbook.Worksheets("Overview").Range("A1:A" & lastCell).Cells
        Dim wksName As String
        wksName = myCell.Text
        ThisWorkbook.Worksheets(wksName).Range("A1:C20").PrintOut Copies:=1, Collate:=True
    Next

End Sub

Public Function LastRow(wsName As String, Optional columnToCheck As Long = 1) As Long

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(wsName)
    LastRow = ws.Cells(ws.Rows.Count, columnToCheck).End(xlUp).Row

End Function

    Public Function LastRow(wsName As String, Optional columnToCheck As Long = 1) As Long

        Dim ws As Worksheet
        Set ws = ThisWorkbook.Worksheets(wsName)
        LastRow = ws.Cells(ws.Rows.Count, columnToCheck).End(xlUp).Row

    End Function
  • 寫入工作表名稱的范圍由ThisWorkbook.Worksheets("Overview").Range("A1:A" & lastCell).Cells
  • 如果不打算更改上述范圍,則可以對其進行硬編碼 - ThisWorkbook.Worksheets("Overview").Range("A1:A8").Cells 因此不需要附加函數LastRow()
  • lastCellA列的LastRow()結果。 A是第一列,因此可選參數負責處理它。
  • 如何避免在 Excel VBA 中使用 Select (這是每個 VBA 人的必讀內容)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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