Ejecutar una macro en todas las hojas de un libro de trabajo.
Resuelto
Hola,
Solicito su ayuda.
De hecho, he escrito una macro y funciona, pero solo en una hoja.
Aquí está:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Union([B17:B41], [C17:C41])) Is Nothing Then
If IsEmpty(Target) Then
Target = "X"
Cancel = True
Else
If Target = "X" Then
Target = ""
Cancel = True
End If
End If
End If
End Sub
Sin embargo, me gustaría que se ejecute para todas las hojas (200) del libro.
He investigado y esto es lo que da:
Sub Dosomething()
Dim Ws As Worksheet
Application.ScreenUpdating = False
For Each Ws In Worksheets
Ws.Select
Call Runcode
Next
Application.ScreenUpdating = True
End Sub
Sub Runcode()
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Union([B17:B41], [C17:C41])) Is Nothing Then
If IsEmpty(Target) Then
Target = "X"
Cancel = True
Else
If Target = "X" Then
Target = ""
Cancel = True
Next Ws
End Sub
Pero no funciona (mensaje de error: Error de compilación: Se esperaba End Sub).
NOTA: he insertado un módulo y he escrito este código.
Espero haber formulado claramente mi problema.
Así como espero que alguien pueda ayudarme.
Gracias de antemano.
Jef
Solicito su ayuda.
De hecho, he escrito una macro y funciona, pero solo en una hoja.
Aquí está:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Union([B17:B41], [C17:C41])) Is Nothing Then
If IsEmpty(Target) Then
Target = "X"
Cancel = True
Else
If Target = "X" Then
Target = ""
Cancel = True
End If
End If
End If
End Sub
Sin embargo, me gustaría que se ejecute para todas las hojas (200) del libro.
He investigado y esto es lo que da:
Sub Dosomething()
Dim Ws As Worksheet
Application.ScreenUpdating = False
For Each Ws In Worksheets
Ws.Select
Call Runcode
Next
Application.ScreenUpdating = True
End Sub
Sub Runcode()
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Union([B17:B41], [C17:C41])) Is Nothing Then
If IsEmpty(Target) Then
Target = "X"
Cancel = True
Else
If Target = "X" Then
Target = ""
Cancel = True
Next Ws
End Sub
Pero no funciona (mensaje de error: Error de compilación: Se esperaba End Sub).
NOTA: he insertado un módulo y he escrito este código.
Espero haber formulado claramente mi problema.
Así como espero que alguien pueda ayudarme.
Gracias de antemano.
Jef
3 respuestas
-
ColaboradorHola,
a poner en ThisWorkbook:
Opción Explícita Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'tu código End Sub
--
@+ El Pícaro -
Hola cs_Le Pivert,
Primero que nada, gracias por responder tan rápido.
He escrito en ThisWorkbook:
Option Explicit
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Union([B17:B41], [C17:C41])) Is Nothing Then
If IsEmpty(Target) Then
Target = "X"
Cancel = True
Else
If Target = "X" Then
Target = ""
Cancel = True
End If
End If
End If
End Sub
Pero cuando hago doble clic en una celda correspondiente, la "X" no aparece.
Lo siento, ya que siendo novato, no percibo necesariamente todo lo que hay que hacer.
Pero gracias de nuevo. -
¡Exactamente!
Seguramente hice algo mal.
Entonces, repetí la manipulación.
En el libro, abro VBA (clic derecho, visualizar el código).
Hago doble clic en ThisWorkbook. Se abre un campo y escribo el código correspondiente.
Y luego guardo en un formato que admite macros.
¡Y sí, funciona!
¡Fantástico!
Mil gracias y que te vaya bien.
Jef