Estoy tratando de escribir una macro que haga «clic» en un botón de comando que está en otro libro. Es eso posible? Sin cambiar el código dentro de ese otro libro?

InformationsquelleAutor | 2008-09-24

7 Comentarios

  1. 4

    Para un ActiveX botón en otro libro:

    Workbooks("OtherBook").Worksheets("Sheet1").CommandButton1.Value = True

    Para un MSForms botón en otro libro:

    Application.Run Workbooks("OtherBook").Worksheets("Sheet1").Shapes("Button 1").OnAction
    • gracias por decírmelo. No entendí la pregunta «cómo automatizar un clic de botón en un formulario de usuario.» De todos modos, he actualizado mi respuesta para adaptarse a la pregunta.
    • Sí, Eso funciona.
  2. 1

    Puede utilizar Application.Run para que:

    Run "OtherWorkbook.xls!MyOtherMacro"
    • La pregunta es cómo a haga clic en un botón de comando de un libro diferente
  3. 1

    Lugar de tratar de forma programática haga clic en el botón, es posible ejecutar la macro vinculado al botón directamente desde el código.

    Primer lugar usted necesita para encontrar el nombre de la macro que se ejecuta cuando se pulsa el botón.

    Para hacer esto, abra el libro que contiene el botón de comando.

    Derecho haga clic en el botón de comando y seleccione «Asignar macro»

    La «Asignar macro» aparecerá el cuadro de diálogo.

    Anote el nombre completo en la ‘nombre de la Macro’ cuadro en la parte superior del cuadro de diálogo.

    Haga clic en el ACEPTAR botón.

    Su código en el libro que necesita llamar el código debe ser de la siguiente manera.

    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
  4. 0

    He tenido un problema similar como el anterior y se tomó un tiempo para averiguar, pero esto es todo lo que tenía que hacer.

    De Sheet1 he creado un botón con el siguiente:

        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

    A continuación, la importación de poco para conseguir que el trabajo que usted necesita para ir al código en las otras hojas de cálculo y el cambio de la Privada a la Pública.

    Hasta el momento no hay bugs que han aparecido.

  5. 0

    NOPE:

    Esto es FÁCIL de hacer:

    1. En la hoja de cálculo de ABC, donde usted tiene la Private Sub xyz_Click(), agregar una nueva subrutina pública:

      Public Sub ForceClickOnBouttonXYZ()
          Call xyz_Click
      End Sub
    2. En su otra hoja de cálculo o módulo, agregue el código:

      Sheets("ABC").Activate
      Call Sheets("ABC").ForceClickOnBouttonXYZ

    QUE ES!!!
    Si usted no desea que la pantalla parpadee o mostrar cualquier actividad, establecer el Application.ScreenUpdating = False antes de llamar a la Sheets("ABC").ForceClickOnBouttonXYZ rutina y, a continuación, establezca Application.ScreenUpdating = True justo después del mismo.

    • Esto es lo que Elennor NO quiero hacer
  6. -1

    No hay una manera correcta de hacer esto a través de código, desde el evento click del botón suele ser un método privado de otro libro.

    Sin embargo, usted puede automatizar el clic a través de código VBA abriendo el libro, la búsqueda de control que desee y, a continuación, la activación y el envío de un carácter de espacio (equivalente a presionar el botón).

    Esto es casi seguro que una idea terrible, y es probable que traer a usted y a su descendencia nada pero la miseria. Me gustaría instar a encontrar una mejor solución, pero mientras tanto, esto parece funcionar…

    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
    • Creo que este hace exactamente eso, a menos que haya alguna diferencia sutil acerca de lo que es un «clic» de que me estoy perdiendo
    • Veo lo que están haciendo ahora, ¿de dónde se introduce la variable para controlName?
    • cuando se llama al método, por ejemplo: el botón de run(«MyWorkbook», «ImportantWorksheet»,»ctlButtonToClick»)

Dejar respuesta

Please enter your comment!
Please enter your name here