Macro que pase hoja a hoja y hacer ka rutina

Hola no se si me puedas ayudar lo que pasa es lo siguiente tengo una macro en un libro que me abre otro del cual extraigo informacion y queda registrada en mi macro pero eso ya lo tengo lo que necesito es que en el libro que yo consulto este trea muchas hojas las cuales tienen el mismo formato todas y necesito pasar por ejemplo: hoja1 - hace mi rutina ahora pasa a la hoja 2 y hace mi rutina y asi sucesivamente hasta finalizar las hojas y que en mi macro (otro libro) quedeen cada fila lo que copie que eso ya lo hace muestro el codigo que tengo solo me falta anexarle las instrucciones para que pase de hoja en hoja y en cada una me ejecute mi rutina.
Sub DATOS()
    Dim stArchivoElegido As Variant
    Dim a As Variant
    Dim b As Variant
    Dim c As Variant
    Dim d As Variant
    Dim e As Variant
    Dim f As Variant
    Dim g As Variant
    Dim h As Variant
    Dim i As Variant
    Dim j As Variant
    Dim k As Variant
    Dim l As Variant
    stArchivoElegido = Application.GetOpenFilename("Hoja Excel , *.xls*", _
    , "INGRESE SU ARCHIVO PARA EJECUTAR")
    Workbooks.Open stArchivoElegido
    stArchivoElegido = ActiveWorkbook.Name
    ActiveWindow.ScrollRow = 1
    ActiveWindow.WindowState = xlNormal
    Rem CAMPO DE FECHA DE PAGO
    Range("J15:K15").Select
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("B18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO DE NOMBRE DE BENEFICIARIO
    Workbooks(stArchivoElegido).Activate
    Range("K26:U26").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("C18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO DE NIT O CEDULA
    Workbooks(stArchivoElegido).Activate
    Range("B26:D26").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("D18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO DE ESTADO DE PAGO
    Workbooks(stArchivoElegido).Activate
    Range("J16:K16").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("E18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO DE Nº DE OBLIGACION
    Workbooks(stArchivoElegido).Activate
    Range("U16:V16").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("F18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO DE Nº ORDEN DE PAGO
    Workbooks(stArchivoElegido).Activate
    Range("B15:D15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("G18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO DE VALOR BRUTO
    Workbooks(stArchivoElegido).Activate
    Range("B18:D18").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("H18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO DE VALOR DEDUCCIONES
    Workbooks(stArchivoElegido).Activate
    Range("M18:P18").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("I18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO DE VALOR NETO
    Workbooks(stArchivoElegido).Activate
    Range("Y18").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("J18").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO PARA EL CODIGO DE LA DESCRIPCION------------
    Workbooks(stArchivoElegido).Activate
    Range("A41").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("N3").Select
    ActiveSheet.Paste Link:=True
    Rem CAMPO PARA EL VALOR DE LA DESCRIPCION------------
    Workbooks(stArchivoElegido).Activate
    Range("AN41").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CONSOLIDADO11").Activate
    Range("P3").Select
    ActiveSheet.Paste Link:=True
a = Range("N3")
b = Range("P3")
If Range("K14").Value = a Then
Range("K18") = b
Else
If Range("L14").Value = a Then
Range("L18") = b
Else
If Range("M14").Value = a Then
Range("M18") = b
Else
If Range("N14").Value = a Then
Range("N18") = b
Else
If Range("O14").Value = a Then
Range("O18") = b
Else
If Range("P14").Value = a Then
Range("P18") = b
Else
If Range("Q14").Value = a Then
Range("Q18") = b
Else
If Range("R14").Value = a Then
Range("R18") = b
Else
If Range("S14").Value = a Then
Range("S18") = b
Else
If Range("T14").Value = a Then
Range("T18") = b
Else
If Range("U14").Value = a Then
Range("U18") = b
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
    Rem CAMPO PARA EL CODIGO DE LA DESCRIPCION------------
    Workbooks(stArchivoElegido).Activate
    Range("A42").Select
    Application.CutCopyMode = False
   ...

1 respuesta

Respuesta
1
Lo puede hacer con un for each... No olvides calificar y cerrar la pregunta...
...
Sub CorrerHojas()
For Each Hoja In Worksheets
    Hoja.Select
    ..... Tu rutina
Next Hoja
End Sub
Hola experto ya la entendi pero tengo otra duda como vez hay muchas condicionales sera que hay otra forma de ejecutarla ya que al correrla se demora mucho y otra cosita que pena resulta que yo lo defini por referencia pero me acabe de dar cuenta que no todos los formatos se encuentran en la misma celda y no me trae la informacion que necesito como lo podria hacer.
muchas gracias.
Todos esos if son suceptibles de ser resumidos con un ciclo for, aprovechando alguna colección. Si los datos están en rangos diferentes deben ser unificados o encontrar algún patrón para escribir la macro... Por ejemplo, los if que buscan un valor en el rango K14:U14 y llevan otro valor al rango K18:U18 se podrían resumir con:
Range("K14:U14").Select
For Each celda In Selection
If celda.Value = "a" Then
    celda.Offset(4, 0).Value = "b"
End If
Next

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas