Une manière intelligente de connecter plusieurs images à la macro en-clic – VAB Excel

J'ai posé cette question auparavant, mais certes d'une manière terrible, alors je le demande de nouveau. Alors, je suis une fois de plus.

Je fais un programme dans VBA Excel – ou mieux, combinant une certaine feuille de calcul avec des actions et des parties de code pour créer quelque chose qui fonctionne comme un programme autonome. Une partie de celle-ci implique la liaison d'un certain nombre d'images (des dizaines d'entre elles) à une certaine macro, en cliquant sur.

J'ai créé lesdites images à l'aide du bouton "Développeur" -> "Mode de conception". Les images sont nommées à la mode: Image1, Image2, Image3 … etc. Ce que je veux, c'est que si, par exemple, j'appuie sur Image1, l'action de sous-routine (1) est appelée. Si j'appuie Image100, je veux appeler l'action de sous-routine (100). Par conséquent, je souhaite appeler le sous-programme Action en passant une valeur en fonction de l'image sur laquelle l'image est affichée, dans l'exemple que je vous ai donné, selon son nom.

Avec une recherche rapide, la première façon dont j'ai découvert que cela fonctionne était celle ci-dessous:

Sub Image1_Click() Call Action(1) End Sub 

C'était pour un clic sur Image1. Pour un clic sur Image100, ce serait:

 Sub Image100_Click() Call Action(100) End Sub 

L'inconvénient de l'utilisation uniquement de cette façon est évident: je devrais créer autant de gestionnaires en ligne que les images que j'ai, même si la même routine est appelée à chaque fois et tout ce qui compte pour que la valeur soit transmise soit l'image prénom.

Donc, compte tenu de l'ordre évident de ma logique et de ce que je veux atteindre, j'aimerais que vous me fournissiez une manière plus intelligente de créer des événements sur le clic pour toutes mes images, sans avoir à utiliser autant de code redondant et un Évidemment logique non optimale.

REMARQUE: en cas de confusion, le sous-programme Action est identique pour toutes les images. Seule la valeur passée change.

Vous pouvez utiliser la propriété Application.Caller et affecter la macro générique à toutes les images, puis passer l'ID de l'image comme argument –

 Sub genericpicture_click() Dim pic As String pic = Application.Caller MsgBox (pic) End Sub 

Voici un exemple en utilisant les cas:

  ' 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