it-roy-ru.com

Как передать ячейку другого листа, упомянутого в ячейке, через VBA

У меня есть файл Excel с именем «Book1» с «Sheet1» и «Sheet2». В Sheet1 значение ячейки A1 равно «'[Book1.xlsb] Sheet2'! $ A $ 14», которое выводится как некоторый результат формулы. Я хочу, чтобы ссылка на ячейку, указанная в ячейке A1, была выбрана через VBA.

Я поставил VB код как

Range(Range("A1")).Select or Range([Indirect("A1")]).Select

Этот код работает только в том случае, если указанная ячейка в A1 находится на одном листе, но не работает, если указанная ячейка находится на другом листе.

Может кто-нибудь помочь решить эту проблему, пожалуйста

2
Jignesh Bavishi

вы можете сделать один из следующих способов:

With Worksheets("Sheet2")
    .Activate
    .Range([Indirect("Sheet1!A1")]).Select
End With

или же

With Worksheets("Sheet2")
    .Activate
    .Range(Worksheets("Sheet1").Range("A1")).Select
End With
0
user3598756

Поскольку оба листа («Лист1» и «Лист2») находятся в одной и той же книге, значение в ячейке А1 «Лист1» должно быть «Лист2! $ A $ 14» .

Код ниже немного длиннее, чем нужно, но я хотел пройти все шаги, чтобы объяснить лучше.

Я использую функцию Split для разделения имени Worksheet и Range.Address, и помещаю результат в 2 элемента массива.

После этого вы извлекаете первый элемент массива RngString в качестве имени рабочего листа, а затем второй элемент массива - это range.address.

Код  

Option Explicit

Sub SelectRange()

Dim Rng As Range
Dim RngString As Variant
Dim ShtName As String
Dim RngAddress As String

RngString = Split(Worksheets("Sheet1").Range("A1").Value, "!")

' sheet name is the first array element
ShtName = RngString(0)

' Range address is the second array element
RngAddress = RngString(1)

' setting the Rng object
Set Rng = Worksheets(ShtName).Range(RngAddress)

' since your range is in another worksheet, you need to activate it first
Worksheets(ShtName).Activate
' select the range
Rng.Select

End Sub
4
Shai Rado