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

3 respuestas

  1. Colaborador
    Hola,

    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
    1. 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.
      1. Colaborador
        ¡Funciona!

        Entre B17 y B41 así como C17 y C41, al hacer doble clic, si está vacío se pone una x, de lo contrario se borra la x.

        ¿Es este el resultado esperado?
    2. ¡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