para otra insertar hoja funciones formulario desde comando botones boton abrir excel excel-vba

otra - botones en excel sin macros



"Hacer clic" en el botón de comando de otro libro de trabajo (7)

¿Seguro que te refieres al libro de trabajo y no a la hoja? De todas formas, si desea " recorrer todos los libros de trabajo en una carpeta y realizar una operación en cada uno de ellos "

Si quieres acceder a otra hoja, hazlo así:

Worksheets("MySheet").YourMethod()

Intento escribir una macro que haga "clic" en un botón de comando que está en otro libro de trabajo ... ¿Sería posible? ¿Sin cambiar nada del código dentro de ese otro libro de trabajo?
¡Muchas gracias!


En lugar de intentar hacer clic programáticamente en el botón, es posible ejecutar la macro vinculada al botón directamente desde su código.

Primero necesita encontrar el nombre de la macro que se ejecuta cuando se hace clic en el botón.

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

Haga clic derecho en el botón de comando y seleccione ''Asignar macro''

Se mostrará el cuadro de diálogo "Asignar macro" .

Anote el nombre completo en el cuadro "Nombre de macro" en la parte superior del cuadro de diálogo.

Haga clic en el botón Aceptar .

Su código en el libro de trabajo que necesita llamar al código debe ser el siguiente.

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


No hay una forma clara de hacerlo a través del código, ya que el evento de clic del botón normalmente sería un método privado del otro libro de trabajo.

Sin embargo , puede automatizar el clic a través del código VBA abriendo el libro, encontrando el control que desea, y luego activándolo y enviándole un carácter de espacio (equivalente a presionar el botón).

Es casi seguro que es una idea terrible, y probablemente le traerá a usted y a sus hijos nada más que miseria. Te insto a que encuentres una solución mejor, pero mientras tanto, parece que funciona ...

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


Puede usar Application.Run para eso:

Run "OtherWorkbook.xls!MyOtherMacro"


Para un botón ActiveX en otro libro de trabajo:

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

Para un botón MSForms en otro libro de trabajo:

Application.Run Workbooks("OtherBook").Worksheets("Sheet1").Shapes("Button 1").OnAction


Tuve un problema similar al anterior y me tomó un tiempo averiguarlo, pero esto es todo lo que tenía que hacer.

En Sheet1 creé un botón con lo 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

Luego, el bit de importación para que funcione, debe ir al código en las otras hojas de cálculo y cambiarlo de Privado a Público.

Hasta ahora no han aparecido errores.


NOPE:

Esto es fácil de hacer:

  1. En la hoja de trabajo ABC donde tiene Private Sub xyz_Click (), agregue una nueva subrutina pública:

    Public Sub ForceClickOnBouttonXYZ() Call xyz_Click End Sub

  2. En su otra hoja de trabajo o módulo, agregue el código:

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

¡¡¡ESO ES!!! Si no desea que la pantalla parpadee o muestre actividad alguna, configure Application.ScreenUpdating = False antes de llamar a Sheets ("ABC"). Forzar sesión en la rutina de XYZ y luego configure Application.ScreenUpdating = True justo después.