J'essaye d'écrire une macro qui "cliquera" sur un bouton de commande qui se trouve dans un autre classeur. Serait-ce possible? Sans changer le code dans cet autre classeur?
Merci beaucoup!Bouton de commande "Clic" à partir d'un autre classeur
Répondre
Vous pouvez utiliser Application.Run
pour que:
Run "OtherWorkbook.xls!MyOtherMacro"
Vous voulez dire que vous classeur et non feuille? Quoi qu'il en soit si vous « want to loop through all workbooks in a folder and perform an operation on each of them »
Si vous souhaitez accéder à une autre feuille, il est fait comme ceci:
Worksheets("MySheet").YourMethod()
Il n'y a pas une manière propre de le faire à travers le code, étant donné que l'événement click sur le bouton serait typiquement une méthode privée de l'autre classeur.
Toutefois, vous pouvez automatiser le code de clic VBA en ouvrant le classeur, en trouvant le contrôle que vous voulez, puis en l'activant et en lui envoyant un caractère espace (équivalent à appuyer sur le bouton).
C'est certainement une idée terrible, et cela ne vous apportera probablement que de la misère. Je vous conseille vivement de trouver une meilleure solution, mais en attendant, cela semble fonctionner ...
Public Sub RunButton(workbookName As String, worksheetName As String, controlName As String)
Dim wkb As Workbook
Dim wks As Worksheet
Set wkb = Workbooks.Open(workbookName)
wkb.Activate
Dim obj As OLEObject
For Each wks In wkb.Worksheets
If wks.Name = worksheetName Then
wks.Activate
For Each obj In wks.OLEObjects
If (obj.Name = controlName) Then
obj.Activate
SendKeys (" ")
End If
Next obj
End If
Next wks
End Sub
je crois que ce fait exactement cela, à moins qu'il y ait une distinction subtile sur ce qu'est un "clic" qui me manque – msulis
Je vois ce que vous faites maintenant, où entreriez-vous la variable pour 'controlName'? – Davesexcel
lorsque vous appelez la méthode, par exemple: RunButton ("MyWorkbook", "ImportantWorksheet", "ctlButtonToClick") – msulis
Au lieu d'essayer de cliquer sur le bouton programatically, il est possible d'exécuter la macro liée au bouton directement à partir de votre code.
Vous devez d'abord trouver le nom de la macro qui est exécutée lorsque le bouton est cliqué.
Pour ce faire, ouvrez le classeur qui contient le bouton de commande.
Faites un clic droit sur le bouton de commande et sélectionnez « Affecter une macro »
Le « Affecter une macro » dialogue s'affiche.
Notez le nom complet dans la zone 'Nom de macro' en haut de la boîte de dialogue.
Cliquez sur le bouton OK .
Votre code dans le classeur qui doit appeler le code doit être comme suit.
Sub Run_Macro()
Workbooks.Open Filename:="C:\Book1.xls"
'Open the workbook containing the command button
'Change the path and filename as required
Application.Run "Book1.xls!Macro1"
'Run the macro
'Change the filename and macro name as required
'If the macro is attached to a worksheet rather than a module, the code would be
'Application.Run "Book1.xls!Sheet1.Macro1"
End Sub
NOPE:
Ceci est facile à faire:
Dans la feuille de calcul ABC où vous avez la Private Sub xyz_Click(), ajouter un nouveau sous-programme public:
Public Sub ForceClickOnBouttonXYZ() Call xyz_Click End Sub
Dans votre autre feuille de calcul ou module, ajoutez le code:
Sheets("ABC").Activate Call Sheets("ABC").ForceClickOnBouttonXYZ
EST !!! QUE Si vous ne voulez pas que l'écran scintille ou affiche une activité, définissez Application.ScreenUpdating = False avant d'appeler la routine Sheets ("ABC") ForceClickOnBouttonXYZ, puis définissez Application.ScreenUpdating = True juste après.
J'ai eu un problème similaire à celui ci-dessus et il a fallu du temps pour le comprendre mais c'est tout ce que j'avais à faire.
Sur Sheet1 j'ai créé un bouton qui suit:
Private Sub cmdRefreshAll_Click()
Dim SheetName As String
SheetName = "Mon"
Worksheets(SheetName).Activate
ActiveSheet.cmdRefresh_Click
SheetName = "Tue"
Worksheets(SheetName).Activate
ActiveSheet.cmdRefresh_Click
' "I repeated the above code to loop through a worksheet for every day of the week"
End Sub
le bit d'importation pour l'obtenir pour vous travailler besoin d'aller au code sur les autres feuilles de calcul et changer du privé au public.
Jusqu'à présent, aucun bug n'est apparu.
Pour un bouton ActiveX dans un autre classeur:
Workbooks("OtherBook").Worksheets("Sheet1").CommandButton1.Value = True
Pour un bouton MSForms dans un autre classeur:
Application.Run Workbooks("OtherBook").Worksheets("Sheet1").Shapes("Button 1").OnAction
@Davesexcel, merci de le signaler. J'ai mal lu la question comme "comment automatiser un clic de bouton sur un userform." Quoi qu'il en soit, j'ai mis à jour ma réponse pour répondre à la question. –
Oui, ça marche. – Davesexcel
- 1. Appelez l'événement de clic d'un bouton d'un autre site Web
- 2. Copie des données du classeur vers un autre classeur
- 3. WPF: Bouton simple clic + double clic problème
- 4. Déclenchez une commande d'installation de maven à partir d'une autre commande d'installation de maven
- 5. Comment développer une section de détails Datagrid à partir d'un clic sur un bouton?
- 6. Comment passer des paramètres à l'objet de commande à partir de Xaml pour l'outil de bouton?
- 7. Réaffectation de Macro à bouton de commande lorsque le fichier copie
- 8. Lecture par programmation _AssemblyLocation à partir d'un classeur Excel VSTO
- 9. jQuery et ASP.NET - bouton forcer clic
- 10. Comment copier des données d'un autre classeur (Excel)?
- 11. Résolution automatique Perforce à partir de la ligne de commande?
- 12. Publier ClickOnce à partir de la ligne de commande
- 13. Événement de clic de bouton appelé à nouveau lorsque la page est actualisée à l'aide de F5
- 14. Comment puis-je naviguer vers une autre page à partir d'un bouton?
- 15. Automatiser Windows à partir du bouton
- 16. Appel de la fonction JavaScript à la fin de l'événement de clic sur un bouton
- 17. Capture stdout à partir d'une commande system() de manière optimale
- 18. WxPython: Way multiplateformes à Conform Ok/bouton Annuler la commande
- 19. ASP.NET MVC - Plusieurs modèles dans un classeur et un classeur
- 20. Copier des feuilles de calcul Excel, les macros et les graphiques d'un classeur à un autre, le déplacement des liens vers le nouveau classeur
- 21. Puis-je appeler une fonction jquery à partir d'un clic?
- 22. Jquery et déclencher un clic sur un bouton caché
- 23. Lier un clic sur un bouton dynamique avec jQuery?
- 24. Je veux changer l'image du bouton sur le clic
- 25. Boîte à outils ASP.NET Problème de double clic en accordéon
- 26. Appel d'Excel Solver VBA à partir d'une autre feuille de calcul
- 27. filtres OpenOffice à partir d'un bouton Menu/barre d'outils
- 28. Ajout d'un onglet GWT à partir d'un autre onglet
- 29. Comment faire pour appuyer sur le bouton de la souris à partir d'un événement de commande dans XUL?
- 30. problèmes qui simulent clic sur un bouton ASP.NET
La question est de savoir comment cliquer sur un bouton de commande à partir d'un autre classeur – Davesexcel