Visual Basic para Aplicaciones - Una macro que no se ejecuta entera (se para sola)

Life is soft - evento anual de software empresarial
 
Vista:

Una macro que no se ejecuta entera (se para sola)

Publicado por Manuel Sánchez (8 intervenciones) el 04/04/2008 12:51:04
TENGO UNA MACRO QUE DICE ASÍ:

Sub Actualizar

Call M_16
Call M_28
Call M_32

End sub
------------------------------------------------------------------------------------------------------------------------
Sub M_16()

Dim fila As Integer 'para seleccionar la fila de donde están los datos a distribuir
Dim fila2 As Integer 'para seleccionar la fila donde irán copiados los datos dentro del Ø
Dim n As Integer 'contador
Dim m As Integer 'contador 2

fila = 1
fila2 = 3

Range("Q2").Select

For n = 1 To 200

If ActiveCell.Offset(fila, 0).Value <> "16" Then
fila = fila + 1
fila2 = fila2 + 1
Else
Workbooks.Open("C:PlanificaciónM_16.xls").Activate
Sheets("---").Select

Workbooks("Ordenes.xls").Activate
Sheets("M").Select
Range("Q2").Select

For m = 1 To 49

If ActiveCell.Offset(fila, 0).Value = "16" Then
Range("AA" & fila2, Range("AA" & fila2).End(xlToLeft)).Select 'selecciona desde AA hacia la izquierda
Selection.Copy

'Busca la última celda vacía
Workbooks("M_16.xls").Activate
Sheets("---").Select
Range("D2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, -1).Range("A1").Select

ActiveSheet.Paste
Range("A1").Select
Workbooks("Ordenes.xls").Activate
Sheets("M").Select
Application.CutCopyMode = False
Range("AB" & fila2).Value = "."
Range("Q2").Select

End If

fila = fila + 1
fila2 = fila2 + 1

'Función Exit For para que cuando se cumpla el If, se corte el bucle
If Workbooks("M_16.xls").Sheets("---").Range("D49").Value <> "" Then
Exit For
End If

If m = 49 Then
Workbooks("Ordenes.xls").Activate
Call Borrar_líneas
Workbooks("M_16.xls").Activate
Sheets("---").Select
Application.Run "'M_16.xls'!Actualizar"
End If

Next

End If

Next

End Sub
------------------------------------------------------------------------------------------------------------------------
Sub M_28()

Dim fila As Integer 'para seleccionar la fila de donde están los datos a distribuir
Dim fila2 As Integer 'para seleccionar la fila donde irán copiados los datos dentro del Ø
Dim n As Integer 'contador
Dim m As Integer 'contador 2

fila = 1
fila2 = 3

Range("Q2").Select

For n = 1 To 200

If ActiveCell.Offset(fila, 0).Value <> "28" Then
fila = fila + 1
fila2 = fila2 + 1
Else
Workbooks.Open("C:PlanificaciónM_28.xls").Activate
Sheets("---").Select

Workbooks("Ordenes.xls").Activate
Sheets("M").Select
Range("Q2").Select

For m = 1 To 49

If ActiveCell.Offset(fila, 0).Value = "28" Then
Range("AA" & fila2, Range("AA" & fila2).End(xlToLeft)).Select 'selecciona desde AA hacia la izquierda
Selection.Copy

'Busca la última celda vacía
Workbooks("M_28.xls").Activate
Sheets("---").Select
Range("D2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, -1).Range("A1").Select

ActiveSheet.Paste
Range("A1").Select
Workbooks("Ordenes.xls").Activate
Sheets("M").Select
Application.CutCopyMode = False
Range("AB" & fila2).Value = "."
Range("Q2").Select

End If

fila = fila + 1
fila2 = fila2 + 1

'Función Exit For para que cuando se cumpla el If, se corte el bucle
If Workbooks("M_28.xls").Sheets("---").Range("D49").Value <> "" Then
Exit For
End If

If m = 49 Then
Workbooks("Ordenes.xls").Activate
Call Borrar_líneas
Workbooks("M_28.xls").Activate
Sheets("---").Select
Application.Run "'M_28.xls'!Actualizar"
End If

Next

End If

Next

End Sub
------------------------------------------------------------------------------------------------------------------------
Sub M_32()

Dim fila As Integer 'para seleccionar la fila de donde están los datos a distribuir
Dim fila2 As Integer 'para seleccionar la fila donde irán copiados los datos dentro del Ø
Dim n As Integer 'contador
Dim m As Integer 'contador 2

fila = 1
fila2 = 3

Range("Q2").Select

For n = 1 To 200

If ActiveCell.Offset(fila, 0).Value <> "32" Then
fila = fila + 1
fila2 = fila2 + 1
Else
Workbooks.Open("C:PlanificaciónM_32.xls").Activate
Sheets("---").Select

Workbooks("Ordenes.xls").Activate
Sheets("M").Select
Range("Q2").Select

For m = 1 To 49

If ActiveCell.Offset(fila, 0).Value = "32" Then
Range("AA" & fila2, Range("AA" & fila2).End(xlToLeft)).Select 'selecciona desde AA hacia la izquierda
Selection.Copy

'Busca la última celda vacía
Workbooks("M_32.xls").Activate
Sheets("---").Select
Range("D2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, -1).Range("A1").Select

ActiveSheet.Paste
Range("A1").Select
Workbooks("Ordenes.xls").Activate
Sheets("M").Select
Application.CutCopyMode = False
Range("AB" & fila2).Value = "."
Range("Q2").Select

End If

fila = fila + 1
fila2 = fila2 + 1

'Función Exit For para que cuando se cumpla el If, se corte el bucle
If Workbooks("M_32.xls").Sheets("---").Range("D49").Value <> "" Then
Exit For
End If

If m = 49 Then
Workbooks("Ordenes.xls").Activate
Call Borrar_líneas
Workbooks("M_32.xls").Activate
Sheets("---").Select
Application.Run "'M_32.xls'!Actualizar"
End If

Next

End If

Next

End Sub

CUANDO YO EJECUTO LA MACRO Actualizar, SOLO ME LLAMA A M_16 Y SE PARA LA MACRO.
¿PORQUE SI EJECUTO M_16, M_28 Y M_32 POR SEPARADO FUNCIONAN, PERO EN CAMBIO SI EJECUTO Actualizar, SOLO ME EJECUTA EL M_16?
CREO QUE EL TEMA ESTÁ EN Application.Run. PUEDE SER QUE SOLO SE PUEDA EJECUTAR ESTA ORDEN UNA SOLA VEZ POR MACRO?

MUCHAS GRACIAS DE ANTEMANO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Una macro que no se ejecuta entera (se para sol

Publicado por JuanC (243 intervenciones) el 04/04/2008 13:10:04
probá depurando con F8 (paso a paso) y vas a ver dónde está el problema...
o utiliza Debug

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Una macro que no se ejecuta entera (se para sol

Publicado por Manuel Sánchez (8 intervenciones) el 04/04/2008 15:29:14
PUES HE DEPURADO CON F8 COMO BIEN ME HAS DICHO, Y LO QUE HACE ES QUE EMPIEZA LLAMANDO A M_16, Y CUANDO ACABA, EN VEZ DE LLAMAR A M_28, VUELVE A LLAMAR A M_16.

¿CUÁL PODRÍA SER EL ERROR?

REALMENTE NO TENGO NI IDEA Y YA LLEVO ASÍ COMO CASI UN MES DETRÁS DE TODO ESTO.

SOY NOVATO Y TAMPOCO TENGO MUCHA IDEA.

MUCHAS GRACIAS DE ANTEMANO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Una macro que no se ejecuta entera (se para sol

Publicado por Manuel Sánchez (8 intervenciones) el 04/04/2008 16:09:27
HE PROBADO DE QUITAR EL SIGUIENTE CÓDIGO DE M_16, M_28 Y M_32 Y SI QUE FUNCIONA. O SEA QUE CUANDO EJECUTO Actualizar, ME EJECUTA M_16, LUEGO M_28 Y TERMINA CON M_32.

ESTE ES EL CÓDIGO QUE QUITO:

If m = 49 Then
Workbooks("Ordenes Fabricación (OPT).xls").Activate
Call Borrar_líneas
'''Workbooks("MT1 Ø16.xls").Activate '''QUITADO
'''Sheets("---").Select '''QUITADO
'''Application.Run "'MT1 Ø16.xls'!Actualizar" '''QUITADO
End If

NO ESTARÁ ENTONCES EL ERROR CUANDO EJECUTA Application.Run???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Una macro que no se ejecuta entera (se para sol

Publicado por JuanC (243 intervenciones) el 04/04/2008 17:13:33
claro, se llama nuevamente indefinidamente...

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar