Розумний спосіб підключення декількох зображень до макросу - WBA Excel


0

Я поставив це питання раніше, але, звісно, ​​в жахливому порядку, тому я запитую це знову. Так ось я ще раз.

Я роблю програму в VBA Excel - або краще, поєднуючи певний аркуш з діями і частинами коду, щоб зробити те, що працює як окрема програма. Частина з них передбачає прив'язування ряду зображень (десятки з них) до певного макросу, при натисканні.

Ці зображення було створено за допомогою кнопки "Розробник" - "Режим розробки". Зображення називаються в моді: Image1, Image2, Image3 ... і т.д. Я хочу, щоб, наприклад, натиснути Image1, викликається підпрограма Action (1). Якщо натиснути Image100, я хочу викликати підпрограму Action (100). Тому, я хочу викликати Action Subroutine, передаючи значення, відповідно до якого натискається зображення, у прикладі, який я дав вам, відповідно до його назви.

З швидким пошуком, перший спосіб, який я зрозумів, щоб зробити цю роботу, була нижчою:

Sub Image1_Click()
     Call Action(1)
End Sub

Це було для клацання на Image1. Для кліку на Image100 це буде:

Sub Image100_Click()
     Call Action(100)
End Sub  

Недоліком використання лише цього способу є очевидний: мені потрібно створити стільки обробників натискань, скільки зображень, які я маю, навіть якщо одна й та сама процедура називається кожного разу, і все, що має значення, щоб отримати значення, яке буде передано, це зображення ім'я.

Отже, з огляду на очевидний порядок моєї логіки і того, що я хочу досягти, я хотів би, щоб ви надали мені більш розумний спосіб створення подій, які можна натискати, для всіх своїх зображень, не використовуючи стільки надлишкового коду і явно не оптимальна логіка.

ПРИМІТКА: У разі незрозумілості, підпрограма Action IS однакова для всіх зображень. Змінено лише значення.


Відповідне питання називають які були попрошені раніше .
Raystafarian

@Raystafarian Це саме те, що я сподівався. Я не знаю, однак, якщо це було б можливо, я не те, що знайомі з VBA. Тому я зробив це питання. Неможлива реалізація також можлива відповідь. Примітка: Підпрограма Action є однаковою для всіх зображень.
Noob Doob

@Raystafarian Що ви говорите, як відповісти, що те, що я прошу не possbile. Уникати написання всіх підпрограм 100 зображень (x) _Click - це моя мета. І ви неправильно зрозуміли. Дія (1) не робить тих самих дій, що і Дія (2). Я просто вказав, що Дія є тією ж підпрограмою, і не відрізняється для кожного Зображення, але значення, що передається, змінює те, що відбувається.
Noob Doob

@Raystafarian Action (x) є підпрограмою. Спрощуючи речі, можна сказати, що він показує номер, на який було натиснуто зображення.
Noob Doob

@Raystafarian Якщо Application.Caller дає мені string, який повинен бути доступний, він повинен бути просто чудовим. Я відповім на це питання, коли я його перевірю.
Noob Doob

Відповіді:


0

Ви можете використовувати Application.Caller властивість і призначити загальний макрос всім зображенням, а потім передати ідентифікатор зображення як аргумент -

Sub genericpicture_click()

Dim pic As String
pic = Application.Caller
MsgBox (pic)

End Sub

Ось приклад використання випадків:

  ' Procedure to display which button was pressed.
      Sub WhichButton()

         ' Assign the calling object to a variable.
         ButtonName = Application.Caller

         ' Display the name of the button that was clicked.
         Select Case ButtonName

            ' NOTE: When you type the name of the button, note that
            ' Visual Basic is case and space sensitive when comparing                                                
            ' strings. For example, "Button 6" and "button6" are not the 
            ' same.
            Case "Button 6"
            MsgBox Application.Caller & "  was Clicked"

            Case "Button 7"
            MsgBox Application.Caller & " was clicked."

            Case "Button 8"
            MsgBox Application.Caller & " was clicked."

         End Select

      End Sub
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.