Excel VBA: установить диапазон в качестве листа активации - PullRequest
0 голосов
/ 20 февраля 2020

В настоящее время я работаю над рабочей книгой, в которой вся информация о рабочей таблице хранится в рабочей таблице («обзор»). В столбце «A: A» у меня есть название каждого листа. Я хочу сделать макрос, который проходит через каждую ячейку, указанную в столбце «A: A», и распечатывает этот лист. Печатный код не проблема. Проблема в том, что я не знаю, чтобы ссылаться на ячейку как на рабочий лист. Я пришел с этим решением, но я не работаю.

Worksheets(Range("A1")).Activate

Можно ли ссылаться на активированный лист из ячейки?

Ответы [ 3 ]

0 голосов
/ 20 февраля 2020
Dim ws As Worksheet

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

'do something with ws
0 голосов
/ 20 февраля 2020

Следующий код относится к данному листу через его имя, записанное в виде текста в столбце A:A в Worksheets("Overview"):

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() не требуется.
  • lastCell является результатом LastRow() для столбца A. A - это первый столбец, поэтому об этом позаботится необязательный параметр.
  • Как избежать использования Select в Excel VBA (Это необходимо прочитать каждому человеку VBA)
0 голосов
/ 20 февраля 2020

Попробуйте

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

Как указано в комментариях, ваш код выиграет от квалификации ваших объектов здесь (Range("A1") на каком листе?). Наконец, вам редко требуется активировать лист для выполнения операций с ним. Просто пропустите Activate и сразу перейдите к заявлению о действии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...