Una macro no se ejecuta desde otra macro, pero sí si la ejecuto manualmente, ¿Por qué?

En una hoja tengo un botón que ejecuta el siguiente código:

Sub preguntar_scroll()
Dim respuesta
respuesta = MsgBox("¿Quieres extender la pantalla actual?", vbYesNo + vbQuestion, "Extender pantalla")
If respuesta = vbYes Then
    Sheets("visor").Activate
    ActiveWindow.NewWindow
    Sheets("datos").[J7].Value = ActiveWindow.hWnd
    Sheets("datos").[I7].Value = "on"
    Call visor
    Else
    Sheets("datos").[I7].Value = "off"
End If
End Sub

Básicamente me crea una ventana duplicada, la cual mostraré en un segundo monitor...

Al crearse la nueva ventana llamo a la macro "visor", que lo que hace, o debería, es darle formato a la nueva ventana (maximizarla, inmovilizar paneles, ocultar encabezados de filas y columnas, etc.), es la siguiente:

Sub scroll_visor()
'On Error GoTo error
Dim valorscroll As Long
valorscroll = Sheets("datos").[I8].Value
    If ActiveWindow.hWnd <> Sheets("datos").[J7].Value Then
        Windows(2).Activate
    End If
    'damos formato a la nueva ventana
    With ActiveWindow
        .Application.DisplayFullScreen = True
        .Application.Sheets("visor").[B11].Select
        .FreezePanes = True
        .DisplayFormulas = False
        .DisplayHeadings = False
        .DisplayWorkbookTabs = False
        .DisplayZeros = False
        .DisplayHorizontalScrollBar = False
        .DisplayVerticalScrollBar = False
    End With
End Sub

El problema radica en que cuando ejecuto el primer código, se ejecuta normalmente, y salta al segundo (lo he comprobado poniendo un msgbox), pero no realiza lo que este código ordena. Sin embargo si ejecuto el segundo código a mano desde vba, sí se ejecuta correctamente.

¿Alguien me podría indicar qué está pasando?

1 Respuesta

Respuesta
2

Parece que no recibiste mi respuesta a tu consulta anterior o no te quedó clara.

Trabajar con una ventana duplicada en excel

Paso a explicarla un poco más.

Como las 2 macros estan en un mismo módulo declaré las variables como Dim. Pero si van a estar en módulos aparte deberas declararlas como Public porque van a ser utilizadas por las 2 macros:.

Public pantallaInicio As String, pantallaExt As String

Luego en las macros no utilizo el índice Windows (i) porque no por ser la 2da ventana creada será la nro 2. Por eso me aseguro con el nombre de la ventana guardadas en las variables.

Ahora parece que cambiaste un poco tu macro del scroll, pero si probaras con la anterior y colocaras un punto de interrupción en la línea Windows(2). Activate verás el nombre de la ventana que estás activando. Y a mi no me dice que sea la nueva ventana ;)

Como yo estoy ejecutando la macro del Scroll desde la ventana original (a falta de información puse algo de imaginación;) es que guardo ese nombre en la variable 'pantallaInicio' y recién entonces paso a la 2da ventana que ya tengo guardado su nombre en la variable 'pantallaExt'.

Sub scroll_visor()
    Dim tiempo
    'se guarda el nombre de la primera ventana, puede ser la misma hoja u otra
    pantallaInicio = ActiveWindow.Caption
    Windows(pantallaExt).Activate  'se pasa a la pantalla2 y se configura
    With Windows(pantallaExt)

Sdos!

Elsa

http://aplicaexcel.com

https://www.youtube.com/c/ElsaMatilde 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas