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
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
0