Cómo ejecutar macro al abrir el archivo

Tengo un archivo excel que contiene 8 hojas por usuario y cada hoja muestra información de un reporte. En total son 160 hojas ya que tengo 20 usuarios.

Cada hoja tiene un botón que ejecuta una macro para actualizar los datos. ¿Cómo puedo hacer para que no se tenga que presionar el botón sino que la macro corra al abrir el archivo?

Macro 1

Private Sub CommandButton1_Click()
With Worksheets("PrestReg_AC").Range("A7")
Sheets("AA_LENDING").Range("A1:J7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:J6"), Unique:=True
End With: End Sub

1 Respuesta

Respuesta
1

Si la macro de los botones es la misma para cada hoja, genes que colocar sus instrucciones en un modulo, con un encabezado como este:

Sub macroUnica()

`tus instrucciones

End Sub

Y en el objeto Thisworkbook, en el evento Open, un bucle como este:

Privare Sub Workbook_Open()

For each Sh un sheets

Sh.select

Calle macroUnica

Next

End sub

Si por alguna razón hay que omitir alguna hoja avisame para que incluya la condición en la macro.

Sdos

Elsa

Olvide que tenes un With. En la macroUnica, el with debe indicar la hoja activa (ActiveSheet) en lugar del nombre... O quizás donde mencionas Sheet... evalúa esa condición y consultarme si no te queda claro.

Sdos!

Gracias Elsa, no es la misma fórmula.

Son 8 reportes por usuario y tengo 20 usuarios y el nombre de la hoja cambia al final las 2 últimas letras "PrestReg_AC" y adicional tengo otra macro

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveWorkbook.Unprotect "contraseña"
For Each mihoja In Sheets
If mihoja.Name <> "INICIO" And mihoja.Visible Then mihoja.Visible = xlVeryHidden
Next mihoja
ActiveWorkbook.Protect "contraseña"
End Sub

Private Sub Workbook_Open()
ActiveWorkbook.Unprotect "contraseña"
clave1 = InputBox("Ingrese contraseña")
If clave1 <> "" Then
Select Case clave1

Case "UVERME01"
Sheets("PrestReg_UV").Visible = True
Sheets("PrestB2B_UV").Visible = True
Sheets("PrestInd_UV").Visible = True
Sheets("DepaPlazo_UV").Visible = True
Sheets("CtaCteTrad_UV").Visible = True
Sheets("CtasSobreg_UV").Visible = True
Sheets("Lineas_UV").Visible = True
Sheets("Inversiones_UV").Visible = True
Case "MOSTERLING"
Sheets("PrestReg_MO").Visible = True
Sheets("PrestB2B_MO").Visible = True
Sheets("PrestInd_MO").Visible = True
Sheets("DepaPlazo_MO").Visible = True
Sheets("CtaCteTrad_MO").Visible = True
Sheets("CtasSobreg_MO").Visible = True
Sheets("Lineas_MO").Visible = True
Sheets("Inversiones_MO").Visible = True

End Select
End If
End Sub

Aclarame entonces si solo se debe ejecutar el 'botón' (que ya no estaría) de cada hoja que se hace visible ... ¿es decir solo las de ese usuario?

Y además en la macro se menciona Sheets("AA_LENDING")... ¿este nombre irá para todas las hojas?

Sdos!

El archivo tiene 8 hojas donde se colocan los reportes originales que contienen la información de todos los usuarios, estas hojas son:

  1. AA_Lending
  2. AA_Lending_Branch
  3. Guarantees Issued
  4. Money Market List
  5. Account List
  6. Overdraft Account
  7. Reporte de Limites
  8. Holdings

Como no se puede generar los reportes por usuario se creó una hoja por cada usuario (20 usuarios en total) para que puedan ver solo su información.

Para que ellos puedan verla se usa esta macro que varía porque las hojas tienen el nombre de los reportes + las iniciales de los usuarios.  

Private Sub CommandButton1_Open()
With Worksheets("PrestReg_AC").Range("A7")
Sheets("AA_LENDING").Range("A1:J7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:J6"), Unique:=True
End With: End Sub

Private Sub CommandButton1_Click()
With Worksheets("PrestB2B_AC").Range("A7")
Sheets("AA_LENDING_PANAMA BRANCH").Range("A1:J7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:J6"), Unique:=True
End With: End Sub

Private Sub CommandButton1_Click()
With Worksheets("PrestInd_AC").Range("A7")
Sheets("GUARANTEES ISSUED").Range("A1:L7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:L6"), Unique:=True
End With: End Sub

Private Sub CommandButton1_Click()
With Worksheets("DepaPlazo_AC").Range("A7")
Sheets("MONEY MARKET LIST").Range("A1:P7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:P6"), Unique:=True
End With: End Sub

Private Sub CommandButton1_Click()
With Worksheets("CtaCteTrad_AC").Range("A7")
Sheets("ACCOUNT LIST").Range("A1:Q7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:L6"), Unique:=True
End With: End Sub

Private Sub CommandButton1_Click()
With Worksheets("CtasSobreg_AC").Range("A7")
Sheets("OVERDRAFT ACCOUNT").Range("A1:P7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:K6"), Unique:=True
End With: End Sub

Private Sub CommandButton1_Click()
With Worksheets("Lineas_AC").Range("A7")
Sheets("REPORTE DE LIMITES").Range("A1:I7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:I6"), Unique:=True
End With: End Sub

Private Sub CommandButton1_Click()
With Worksheets("Inversiones_AC").Range("A7")
Sheets("HOLDINGS").Range("A1:R7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:R6"), Unique:=True
End With: End Sub

Te preparé los codigos en un libro que podés solicitarmelo al correo que aparece en mi sitio que dejo al pie (o dejame un correo tuyo).

Gracias Elsa,

mi e-mail es [email protected]

Una consulta para hacerlo menos complejo, ¿cómo puedo hacer para que en un solo comando se ejecute este código para varias páginas

Private Sub CommandButton1_Click()
With Worksheets("PrestB2B_AC").Range("A7")
Sheets("AA_LENDING_PANAMA BRANCH").Range("A1:J7000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A6:A7"), CopyToRange:=Range("C6:J6"), Unique:=True
End With: End Sub

Páginas a las que debe aplicar son:

PrestB2B_AC; PrestB2B_AS, PrestB2B_YM; PrestB2B_VO; PrestB2B_LG; PrestB2B_RH.

¿Esto se puede hacer?  Así solo dejo 8 botones que actualice todo.

Saludos,

Los 2 correos me vinieron de vuelta: con pyt o con pty ...

Enviame correo a cibersoft_arg de yahoo.com.ar

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas