Como hacer que me funciones Bucle For Next en Excel 2013 a partir del segundo ciclo las variables pierden su valor

Les comento estoy aprendiendo el lenguaje de VBA para Excel 2013 y estoy haciendo un proyecto el cual consiste en que al abrir un libro (Índice) se ejecute una macro que abra otros determinados archivos y en diferentes ubicaciones dependiendo de cada persona que use esta aplicación. Ya tengo resuelta la parte que me pregunta por la nueva ubicación o si deseo cambiar de ubicación. El Problema que tengo que en la parte en donde tengo el código para abrir los archivos seleccionados estoy utilizando un bucle For Next y se me presenta el siguiente problema cuando lo Ejecuto y corre el primer ciclo del bucle si me abre el archivo pero al correr el segundo en adelante las Variables que tengo pierden su valor.

Cuando ejecuto el código en modo de visualizar el valor de las variables mediante un MsgBox aquí si en cada uno de los siclos las variables me muestran sus valores que deben de ser, pero al ejecutar la instrucción (Workbooks.Open Filename:=Miarchivo) me paso que apartir de segundo siclo las variables pierden su valor, no sé qué estaré haciendo mal, por eso acudo a ustedes si alguien me puede ayudar con este problema, les anexo el código que tengo para este efecto.

Private Sub Workbook_Open()

Dim Actual As String, Completo As String, Archivo As String, Ruta As String, ELD As String, Columna As Integer, Fila As Integer, Miarchivo As String, numarch As Integer

ELD = Cells(1, 12).Value

'MsgBox "Atención Verifica que tienes actualizada la Ruta de la nueva ubiación de los archivos de las Balanzas... Gracias", vbExclamation, ELD

ActiveSheet.Select

ELD = Cells(1, 12).Value

       numarch = Cells(2, 13).Value

        Dim Resp As Byte

         For i = 0 To numarch - 1

           Ruta = Cells((2 + i), 14).Value

           Archivo = Cells((2 + i), 15).Value

           Miarchivo = Ruta & Archivo

           MsgBox i, vbExclamation, ELD

           MsgBox Ruta, vbExclamation, ELD

           MsgBox Miarchivo, vbExclamation, ELD

         'Workbooks.Open Filename:=Miarchivo

       Next i

End

1 Respuesta

Respuesta
1

H o l a:

En VBA, no es necesario que declares las variables, VBA lo hace en automático.

Lo que sucede cuando abres un archivo, es que el control está en el archivo que acabas de abrir, entonces cuanto en el siguiente ciclo tienes esto:

Ruta = Cells((2 + i), 14).Value

El valor que estás asignando a la variable Ruta es el de la celda 3, 14 (N3), pero del archivo que acabas de abrir, para tomar los datos del libro que tiene la macro, tienes que poner de qué libro y de qué hoja quieres el dato de la celda N3, por ejemplo:

Ruta = workbooks("archivoConMacro.xlsm").sheets("Hoja1").Cells((2 + i), 14).Value

O en una variable establecer el objeto libro y hoja, para que no lo repitas varias veces, el ejemplo sería así:

Private Sub Workbook_Open()
'Act.Por.Dante Amor
    'Dim Actual As String, Completo As String, Archivo As String, Ruta As String, ELD As String, Columna As Integer, Fila As Integer, Miarchivo As String, numarch As Integer
    'Dim Resp As Byte
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    ELD = Cells(1, 12).Value
    'MsgBox "Atención Verifica que tienes actualizada la Ruta de la nueva ubiación de los archivos de las Balanzas... Gracias", vbExclamation, ELD
    'ActiveSheet.Select
    'ELD = Cells(1, 12).Value
    numarch = Cells(2, 13).Value
    For i = 0 To numarch - 1
        Ruta = h1.Cells((2 + i), 14).Value
        Archivo = h1.Cells((2 + i), 15).Value
        Miarchivo = Ruta & Archivo
        'MsgBox i, vbExclamation, ELD
        'MsgBox Ruta, vbExclamation, ELD
        'MsgBox Miarchivo, vbExclamation, ELD
        Workbooks.Open Filename:=Miarchivo
    Next i
End

Comenté algunas de las líneas que no son necesarias.


Me faltó poner h1 en 2 variables, quedaría así:

Private Sub Workbook_Open()
'Act.Por.Dante Amor
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    ELD = h1.Cells(1, 12).Value
    numarch = h1.Cells(2, 13).Value
    For i = 0 To numarch - 1
        Ruta = h1.Cells((2 + i), 14)
        Archivo = h1.Cells((2 + i), 15)
        Miarchivo = Ruta & Archivo
        Workbooks.Open Filename:=Miarchivo
    Next
End Sub

¡Gracias!  Dante por tu gran ayuda lo eh hecho tal como me aconsejas y con tu explicación ya me ah quedado claro en lo que me faltaba por hacer.  nuevamente te agradezco, saludos y que estés bien. ahora como cierro este este tema? voy a investigar lo hago.bye

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas