Jump to content
eugeniocol

Como ejecutar dos macros a la vez ????

Recommended Posts

Hola buenas.

Como podria desde una macro ejecutar dos macros  a la vez, siendo una de ellas Activex y la otra macro normal:

Sub Copia ()

En Sub

Private Sub CommandButton1_Click()

End With
End Sub

Salud2.....

 

Share this post


Link to post
Share on other sites

Sub copia ()

End sub

 

Sub leer ()

End sub

 

Sub ejecutar ()

   Call copia

   Call leer

End sub

 

No ejecutará las dos macros a la vez, sino ejecutará una  y luego cuando concluya el siguiente.

 

Edited by Virgilio

Share this post


Link to post
Share on other sites

Eso ya lo se, primero se ejecuta una y despues la otra la macro en si son estas

Cita

Dim hoja As String
Private Sub CommandButton1_Click()

Next A
End Sub

Private Sub resumen()
On Error Resume Next
With Sheets(hoja)

End With
End Sub

 

Y

Cita

Sub Copia ()

En Sub

Yo he probado de esta forma, con Call delante y sin el

Cita

Sub Ejecutar ()

CommandButton1_Click

Copia

En Sub

Da error la macro CommandButton1_Click " no se ha definido Sub o Function""

la macro Ciopia sin problemas se ejecuta

 

Salud2...

Share this post


Link to post
Share on other sites
Hace 12 horas, eugeniocol dijo:

Da error la macro CommandButton1_Click " no se ha definido Sub o Function"

es más seguro que probable que ambos procedimientos estén en módulos diferentes (p.ej.)

  • el del commandbutton en un móodulo "de clase" (de la hoja o algún formulario)
  • el de la copia (y el que ejecuta a los dos) en un módulo estándar

de ser así, tienes dos alternativas:

  1. QUITAR el "Private" al procedimiento del commandbutton
  2. MOVER los del módulo estándar al módulo "de clase" (de la hoja o del formulario)

saludos,
hector.

Share this post


Link to post
Share on other sites
Hace 9 horas, eugeniocol dijo:

ok. pero no me funciono.

ok, te quedan (al menos) dos opciones:

  1. comentar (exactamente) tus códigos, objetos y en que (tipo de) módulos se encuentran (de manera que se pueda REcrear un modelo y entorno de trabajo [+/- exactamente] iguales al tuyo)
  2. adjuntar una copia (recortada pero) FIEL de la situación a resolver

saludos,
hector.

Share this post


Link to post
Share on other sites
Guest Cacho R
Hace 4 horas, Antoni dijo:

... ya deberías haberte enterado ...

¡Caramba!... Con ese carácter no sé si vas a llegar a "mayorcito de edad". :unsure:

Share this post


Link to post
Share on other sites
Hace 11 horas, Antoni dijo:

Llevas 19 días con este tema, si hubieras subido tu archivo y hubieras explicado lo que que quieres, haría 18 días que lo tendrías solucionado.

Después de casi 500 mensajes, ya deberías haberte enterado que ES OBLIGATORIO SUBIR UN ARCHIVO.

19 dias ¿??  Puffff que de tiempo. Mira Antoni hay rachas que tengo más tiempo y otras como esta última me falta tiempo.

Hay veces que da miedo hacer algunas preguntas por respuestas fuera de tono de algún MAL HUMORADO FORERO jeje……

Por mi parte que se cierre este post.

Salud2……

Share this post


Link to post
Share on other sites
En 13/8/2018 at 22:07 , Héctor Miguel dijo:

por que no dejas fuera lo inconveniente y sigues adelante con lo que te pueda ser de utilidad ?

  • comentas ?
  • o adjuntas ?

saludos,
hector.

Estoy preparando libros.

Salud2....

Share this post


Link to post
Share on other sites

Hector solucione el tema, ahora ya pude seguir con el siguiente paso pero como seria un tema nuevo según me han dicho otras veces… pues abro nuevo post en VBA

Salud2......

Edited by eugeniocol

Share this post


Link to post
Share on other sites
En 26/7/2018 at 3:32 , Héctor Miguel dijo:

es más seguro que probable que ambos procedimientos estén en módulos diferentes (p.ej.)

  • el del commandbutton en un móodulo "de clase" (de la hoja o algún formulario)
  • el de la copia (y el que ejecuta a los dos) en un módulo estándar

de ser así, tienes dos alternativas:

  1. QUITAR el "Private" al procedimiento del commandbutton
  2. MOVER los del módulo estándar al módulo "de clase" (de la hoja o del formulario)

saludos,
hector.

Otra vez aquí mientras estoy en el otro post, pensé que esto estaba solucionado haciendo lo que me decías o como yo creí entender, pero solo graba una hoja donde creo el botón, mira esta es la macro original que esta en una hoja,hoja = "1X2-ORIGINAL

 

Cita

Dim hoja As String
Sub CommandButton1_Click()

For A = 1 To 9
Select Case A
Case 1
hoja = "1X2-ORIGINAL"
Call resultados
Case 2
hoja = "QUINIELA 1"
Call resultados
Case 3
hoja = "QUINIELA 2"
Call resultados
Case 4
hoja = "QUINIELA 3"
Call resultados
Case 5
hoja = "QUINIELA 4"
Call resultados
Case 6
hoja = "QUINIELA 5"
Call resultados
Case 7
hoja = "QUINIELA 6"
Call resultados
Case 8
hoja = "QUINIELA 7"
Call resultados
Case 9
hoja = "QUINIELA 8"
Call resultados
Case 10
hoja = "QUINIELA 9"
Call resultados
Case 11
hoja = "QUINIELA 10"
Call resultados


End Select


Next A
End Sub

Sub resultados()
On Error Resume Next
With Sheets(hoja)
.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("D37")
.Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("E37")
.Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("F37")
.Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("G37")
.Range("H" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("H37")
.Range("I" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("I37")
.Range("J" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("J37")
.Range("K" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("K37")
.Range("L" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("L37")
.Range("M" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("M37")
.Range("N" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("N37")
.Range("O" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("O37")
.Range("P" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("P37")
.Range("Q" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("Q37")
.Range("R" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("R37")
.Range("S" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("S37")
.Range("T" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("T37")
.Range("U" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("U37")
.Range("V" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("V37")
.Range("W" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("W37")
.Range("X" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("X37")
.Range("Y" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("Y37")
.Range("Z" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("Z37")
.Range("AA" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AA37")
.Range("AB" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AB37")
.Range("AC" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AC37")
.Range("AD" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AD37")
.Range("AE" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AE37")
.Range("AF" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AF37")
.Range("AG" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AG37")
.Range("AH" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AH37")
.Range("AI" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AI37")
.Range("AJ" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AJ37")
.Range("AK" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AK37")
.Range("AL" & Rows.Count).End(xlUp).Offset(1, 0).Value = Now

End With
End Sub

 

Y esta es la misma movida a un modulo, que solo graba una hoja donde creo el botón para ejecutar hoja = "1X2-ORIGINAL, las demas hojas no graba nada.

Cita

Dim hoja As String
Sub Grabar()

For A = 1 To 9
Select Case A
Case 1
hoja = "1X2-ORIGINAL"
Call resultados
Case 2
hoja = "QUINIELA 1"
Call resultados
Case 3
hoja = "QUINIELA 2"
Call resultados
Case 4
hoja = "QUINIELA 3"
Call resultados
Case 5
hoja = "QUINIELA 4"
Call resultados
Case 6
hoja = "QUINIELA 5"
Call resultados
Case 7
hoja = "QUINIELA 6"
Call resultados
Case 8
hoja = "QUINIELA 7"
Call resultados
Case 9
hoja = "QUINIELA 8"
Call resultados
Case 10
hoja = "QUINIELA 9"
Call resultados
Case 11
hoja = "QUINIELA 10"
Call resultados


End Select


Next A
End Sub

Sub resultados()
On Error Resume Next
With Sheets(hoja)
.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("D37")
.Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("E37")
.Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("F37")
.Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("G37")
.Range("H" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("H37")
.Range("I" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("I37")
.Range("J" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("J37")
.Range("K" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("K37")
.Range("L" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("L37")
.Range("M" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("M37")
.Range("N" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("N37")
.Range("O" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("O37")
.Range("P" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("P37")
.Range("Q" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("Q37")
.Range("R" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("R37")
.Range("S" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("S37")
.Range("T" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("T37")
.Range("U" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("U37")
.Range("V" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("V37")
.Range("W" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("W37")
.Range("X" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("X37")
.Range("Y" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("Y37")
.Range("Z" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("Z37")
.Range("AA" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AA37")
.Range("AB" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AB37")
.Range("AC" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AC37")
.Range("AD" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AD37")
.Range("AE" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AE37")
.Range("AF" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AF37")
.Range("AG" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AG37")
.Range("AH" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AH37")
.Range("AI" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AI37")
.Range("AJ" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AJ37")
.Range("AK" & Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("AK37")
.Range("AL" & Rows.Count).End(xlUp).Offset(1, 0).Value = Now

End With
End Sub

 

Si algo no se entiende se puede ver en los libros del enlace que puse.

 

Salud2...

Edited by eugeniocol
rectificar

Share this post


Link to post
Share on other sites

Perdon ya esta solucionadoestaba todo ok, sucedia que son varias hojas y al borrar las grabaciones estaban eliminadas desde fila 38 a 50 pero por debajo de estas había datos y claro se grababan debajo de estas últimas, yo miraba en las primeras filas y no había grabaciones puff jiji…..

Solucionado.

Salud2....

Share this post


Link to post
Share on other sites

Por si lo lees, tus macros pueden reducirse a esto:

Sub Grabar()
Call Resultados(Hoja:=Sheets("1X2-ORIGINAL"))
For y = 1 To 8
   Call Resultados(Hoja:=Sheets("QUINIELA " & y))
Next A
End Sub

Sub Resultados(Hoja As Worksheet): On Error Resume Next
Application.ScreenUpdating = False
With Hoja
   For y = 4 To 37
      .Cells(Rows.Count, y).End(xlUp).Offset(1, 0) = Cells(37, y)
   Next
   .Cells(Rows.Count, 38).End(xlUp).Offset(1, 0) = Now
End With
End Sub

 

Edited by Antoni

Share this post


Link to post
Share on other sites
Hace 22 minutos , Antoni dijo:

Por si lo lees, tus macros pueden reducirse a esto:


Sub Grabar()
Call Resultados(Hoja:=Sheets("1X2-ORIGINAL"))
For y = 1 To 8
   Call Resultados(Hoja:=Sheets("QUINIELA " & y))
Next A
End Sub

Sub Resultados(Hoja As Worksheet): On Error Resume Next
Application.ScreenUpdating = False
With Hoja
   For y = 4 To 37
      .Cells(Rows.Count, y).End(xlUp).Offset(1, 0) = Cells(37, y)
   Next
   .Cells(Rows.Count, 38).End(xlUp).Offset(1, 0) = Now
End With
End Sub

 

Pues no funciona, acabo de probarla.

Error de compilacion. Referencia de variable de control Next no valida.

Gracias de todas formas esto me funciona ,me interesa mas lo del otro post para seguir avanzando.

Salud2....

Share this post


Link to post
Share on other sites

Ahora si:

Sub Grabar()
Call Resultados(Hoja:=Sheets("1X2-ORIGINAL"))
For y = 1 To 8
   Call Resultados(Hoja:=Sheets("QUINIELA " & y))
Next
End Sub

Sub Resultados(Hoja As Worksheet): On Error Resume Next
Application.ScreenUpdating = False
With Hoja
   For y = 4 To 37
      .Cells(Rows.Count, y).End(xlUp).Offset(1, 0) = Cells(37, y)
   Next
   .Cells(Rows.Count, 38).End(xlUp).Offset(1, 0) = Now
End With
End Sub

 

Share this post


Link to post
Share on other sites
Hace 6 horas, eugeniocol dijo:

no funciona, acabo de probarla... me interesa mas lo del otro post para seguir avanzando

por lo que se entiende de tu macro...

tienes cálculos en la fila 37 de cada hoja que pasas valores en la siguiente fila libre de cada columna [D:AK] y en la siguiente columna [AL] pones la fecha (?)

se supone que entre la fila 37 y la siguiente fila libre hay más datos (por lo que no se pierden las fórmulas de la fila 37)

si voy bien, prueba con el siguiente procedimiento (de paso te ahorras bucles internos):

sub resultados()
  dim n as long: on error resume next
  with worksheets("1x2-original")
    with .range("d65536").end(xlup).offset(1)
      .resize(, 34).value = .parent.range("d37:ak37").value: .offset(, 34) = now
    end with: end with
  for n = 1 to 11
    with worksheets("quiniela " & n)
      with .range("d65536").end(xlup).offset(1)
        .resize(, 34).value = .parent.range("d37:ak37").value: .offset(, 34) = now
      end with: end with: next
end sub

o puedes copiar el código a otro evento (p.ej. el del botón activex que mencionas haber colocado en alguna hoja ?), pero...

revisando tu consulta posterior, deduzco que la sugerencia no iba por el lado de suponer módulos diferentes para los procedimientos, sino que incluso se trata de LIBROS DISTINTOS

saludos,
hector.

Share this post


Link to post
Share on other sites

Antoni  y Hector

Se agradece estas macros reducidas comparando con la que tenia las he probado y funcionan, pero es un tema que ya me funcionaba.

Ahora lo que quiero es avanzar en el último paso (espero que sea el último) que tengo en el otro post “Abrir cerrar una cadena de libros “ que es lo que más me interesa en estos momentos.

Salud2….

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png