Buenos días, tengo el siguiente código que intenta copiar el mismo rango desde el archivo "DATOS DEL SISTEMA" hacia el archivo "Escenario" en la hoja Datos, siempre y cuando el nombre de la hoja del primero sea igual al encabezado de columna de la hoja Datos del segundo archivo, la intención es que si falta alguna variable el proceso no se detenga y salte al siguiente con datos, y luego en el archivo Escenario, elimine las columnas que queden sin datos, ya que no todos los días hay datos para todas las variables, esto cambia día a día. Necesito que en la hoja datos solo aparezcan las columnas en forma consecutiva con las que tengan información. El problema es que la macro me borra todo al final, al principio me estaba funcionando bien, pero no se qué paso, no lo quiere hacer, me gustaría por favor si pueden revisarla a ver si dan con el error y me pueden ayudar a corregirla:
Windows("Escenario.xls").Activate
Sheets("Datos").Select
Range("B2:O21").Select
Selection.ClearContents
Windows("Escenario.xls").Activate
Worksheets("DATOS").Range("B1").Value = "30"
Worksheets("DATOS").Range("C1").Value = "60"
Worksheets("DATOS").Range("D1").Value = "90"
Worksheets("DATOS").Range("E1").Value = "120"
Worksheets("DATOS").Range("F1").Value = "180"
Worksheets("DATOS").Range("G1").Value = "270"
Worksheets("DATOS").Range("H1").Value = "360"
Worksheets("DATOS").Range("I1").Value = "720"
Worksheets("DATOS").Range("J1").Value = "1080"
Worksheets("DATOS").Range("K1").Value = "2160"
Worksheets("DATOS").Range("L1").Value = "4320"
Worksheets("DATOS").Range("M1").Value = "5200"
Worksheets("DATOS").Range("N1").Value = "USD"
Worksheets("DATOS").Range("O1").Value = "LT"
Range("B1:O1").Select
Selection.Font.Bold = True
Application.ScreenUpdating = False
For Each celda In Hoja1.Range("B1:O1")
Windows("DATOS DEL SISTEMA.xls").Activate
For Each sh In ActiveWorkbook.Worksheets
If sh.Name = celda.Value Then
sh.Select
Range("E4:E23").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Escenario.xls").Activate
Cells(2, celda.Column).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next sh
Next celda
Application.ScreenUpdating = True
Columns("B:O").EntireColumn.AutoFit
Windows("Escenario.xls").Activate
Dim n As Integer 'n° columnas
Dim i As Integer
n = ActiveSheet.UsedRange.Columns.Count
For i = n To 1 Step -1
Range("B2:O21").Select
If ActiveSheet.Cells(2, i) = "" Then
ActiveSheet.Cells(2, i).Select
Selection.EntireColumn.Delete
End If
Next i
[b2].Select
MsgBox "Columnas Vacias Eliminadas"
Range("B1", Range("B1").End(xlDown).End(xlToRight)).Select
Featured Replies
Archivado
Este tema está ahora archivado y está cerrado a más respuestas.
Buenos días, tengo el siguiente código que intenta copiar el mismo rango desde el archivo "DATOS DEL SISTEMA" hacia el archivo "Escenario" en la hoja Datos, siempre y cuando el nombre de la hoja del primero sea igual al encabezado de columna de la hoja Datos del segundo archivo, la intención es que si falta alguna variable el proceso no se detenga y salte al siguiente con datos, y luego en el archivo Escenario, elimine las columnas que queden sin datos, ya que no todos los días hay datos para todas las variables, esto cambia día a día. Necesito que en la hoja datos solo aparezcan las columnas en forma consecutiva co n las que tengan información. El problema es que la macro me borra todo al final, al principio me estaba funcionando bien, pero no se qué paso, no lo quiere hacer, me gustaría por favor si pueden revisarla a ver si dan con el error y me pueden ayudar a corregirla:
Windows("Escenario.xls").Activate Sheets("Datos").Select Range("B2:O21").Select Selection.ClearContents Windows("Escenario.xls").Activate Worksheets("DATOS").Range("B1").Value = "30" Worksheets("DATOS").Range("C1").Value = "60" Worksheets("DATOS").Range("D1").Value = "90" Worksheets("DATOS").Range("E1").Value = "120" Worksheets("DATOS").Range("F1").Value = "180" Worksheets("DATOS").Range("G1").Value = "270" Worksheets("DATOS").Range("H1").Value = "360" Worksheets("DATOS").Range("I1").Value = "720" Worksheets("DATOS").Range("J1").Value = "1080" Worksheets("DATOS").Range("K1").Value = "2160" Worksheets("DATOS").Range("L1").Value = "4320" Worksheets("DATOS").Range("M1").Value = "5200" Worksheets("DATOS").Range("N1").Value = "USD" Worksheets("DATOS").Range("O1").Value = "LT" Range("B1:O1").Select Selection.Font.Bold = True Application.ScreenUpdating = False For Each celda In Hoja1.Range("B1:O1") Windows("DATOS DEL SISTEMA.xls").Activate For Each sh In ActiveWorkbook.Worksheets If sh.Name = celda.Value Then sh.Select Range("E4:E23").Select Application.CutCopyMode = False Selection.Copy Windows("Escenario.xls").Activate Cells(2, celda.Column).Select ActiveSheet.Paste Application.CutCopyMode = False End If Next sh Next celda Application.ScreenUpdating = True Columns("B:O").EntireColumn.AutoFit Windows("Escenario.xls").Activate Dim n As Integer 'n° columnas Dim i As Integer n = ActiveSheet.UsedRange.Columns.Count For i = n To 1 Step -1 Range("B2:O21").Select If ActiveSheet.Cells(2, i) = "" Then ActiveSheet.Cells(2, i).Select Selection.EntireColumn.Delete End If Next i [b2].Select MsgBox "Columnas Vacias Eliminadas" Range("B1", Range("B1").End(xlDown).End(xlToRight)).Select