Как ссылаться на фигуры в модуле

#vba #excel

#vba #excel

Вопрос:

Я создал разные фигуры в Excel и назначил им макрос, который функционирует как активация другого листа. Я хочу поместить все это в один макрос, а затем назначить его разным фигурам с разным свойством связывания. Но этот код не работает, потому что, очевидно, я делаю что-то глупое. Может кто-нибудь, пожалуйста, помочь?

 Dim shp As ShapeRange, ws As Sheets, i As Integer
Set ws = ActiveWorkbook.Sheets(Array("Introduction", "S1 Fuel Consumption", "S1 Fugitive", "S2 Electricity Consumption"))
Set shp = ws(2).Shapes.Range(Array("Chevron1", "Chevron2"))

Select Case shp(i)

Case shp(1)
ws(1).Activate

Case shp(2)
ws(3).Activate

End Select

End Sub
 

Комментарии:

1. It just executes the second "with" — он всегда выполняет первый with оператор, а после этого — второй. Это обычный программный поток. Вы понимаете with , что делает оператор на самом деле?

2. О, да, вы правы.. Это будет работать в потоке. Тогда как я могу назначить его разным фигурам, но в пределах одного макроса?

3. Можете ли вы помочь мне, предоставив пример кода? Потому что я очень новичок в VBA, поэтому я не знаю большинства функций

Ответ №1:

В VBA есть гораздо более простой способ сделать «кнопки» (я предполагаю, что это то, чего вы пытаетесь достичь)

Прежде всего, в модуле создайте код «Open Worksheet»:

 Sub Open_Sheet2
Sheets("Sheet2").visible = True
Sheets("Sheet2").Activate
End Sub
 

Затем щелкните правой кнопкой мыши свою фигуру, выберите Assign Macro и назначьте Open_Sheet2 этой фигуре. Теперь при нажатии на него откроется Лист2

Комментарии:

1. Эй, да, я хочу работать с кнопками, но у меня есть от 10 до 15 таких кнопок. Итак, мне было интересно, могу ли я просто поместить все в один код.

2. Это личное предпочтение, но я бы просто использовал все «Открытые» модули в модуле, предназначенные для хранения только этих модулей. Тогда вы знаете, где они все находятся. Это быстро, просто, и вы вызываете его только тогда, когда вам это нужно

3. Что делает строка кода .visible ? Я имею в виду, что я могу выполнить активацию листа без этой строки кода.. Итак, мне было интересно..

4. . Visible Гарантирует, что если лист скрыт, он не будет скрыт, чтобы гарантировать, что активация работает без сбоев