Cargar Matriz en Excel con VBA

Anónimas
2013-07-03T14:07:20+00:00

Buenas como estan,

mire tengo u gran problema en Excel con VBA tengo este codigo, y deseo simplificarlo y corregir el error de que no me carga bien la matriz en la hoja llamada General, que podre hacer, en negrita es donde esta la simplificacion y error:

Public NuevoNombre As String

Sub CopiarHojaDeArchivosEnDirectorio()

  Dim Ruta As String, Archivo As String

    Application.ScreenUpdating = False

    With ThisWorkbook

      Ruta = .Path & ""

      Archivo = Dir(Ruta & "*.xls*")

      Do While Archivo <> ""

        If Archivo = .Name Then GoTo Siguiente

        Application.StatusBar = "Procesando..." & Archivo

        Workbooks.Open Ruta & Archivo

        Worksheets(3).Copy After:=.Worksheets(.Worksheets.Count)

        CambiaNombre (Archivo)

        .Worksheets(.Worksheets.Count).Name = NuevoNombre

        For C = 3 To 49

            For A = 5 To 40

                .Worksheets(.Worksheets.Count).Activate

        '                Asigna valor de fila G + valor(A) en Dato

                Dato = Worksheets(.Worksheets.Count).Cells(A, 7).Value

                Porciento = Worksheets(.Worksheets.Count).Cells(1, 8).Value

                Programa1 = Worksheets(.Worksheets.Count).Cells(5, 2).Value                Programa2 = Worksheets(.Worksheets.Count).Cells(8, 2).Value                Programa3 = Worksheets(.Worksheets.Count).Cells(13, 2).Value                Programa4 = Worksheets(.Worksheets.Count).Cells(18, 2).Value                Programa5 = Worksheets(.Worksheets.Count).Cells(21, 2).Value                Programa6 = Worksheets(.Worksheets.Count).Cells(25, 2).Value                Programa7 = Worksheets(.Worksheets.Count).Cells(32, 2).Value                Programa8 = Worksheets(.Worksheets.Count).Cells(37, 2).Value                Programa9 = Worksheets(.Worksheets.Count).Cells(39, 2).Value                Windows("Consolida.xlsm").Activate                Worksheets(2).Cells(.Worksheets.Count, 4).Value = Programa1                Worksheets(2).Cells(.Worksheets.Count, 8).Value = Programa2                Worksheets(2).Cells(.Worksheets.Count, 14).Value = Programa3                Worksheets(2).Cells(.Worksheets.Count, 20).Value = Programa4                Worksheets(2).Cells(.Worksheets.Count, 24).Value = Programa5                Worksheets(2).Cells(.Worksheets.Count, 29).Value = Programa6                Worksheets(2).Cells(.Worksheets.Count, 38).Value = Programa7                Worksheets(2).Cells(.Worksheets.Count, 44).Value = Programa8                Worksheets(2).Cells(.Worksheets.Count, 47).Value = Programa9

B = A - 1                If Worksheets(2).Cells(C, B).Value = "" Then                    If A < 41 Then        '                    Asigna Dato en fla D + valor(C)                        Worksheets(2).Cells(C, B).Value = Dato                    Else                        B = A        '                    Asigna Dato en fla D + valor(C)                        Worksheets(2).Cells(C, B).Value = Dato                    End If                End If                Next A            A = 5        Next C

        Windows("Consolida.xlsm").Activate

        Worksheets(2).Cells(.Worksheets.Count, 2).Value = NuevoNombre

        Worksheets(2).Cells(.Worksheets.Count, 3).Value = Porciento

        Workbooks(Archivo).Close False

Siguiente:

            Archivo = Dir()

          Loop

        End With

        Application.StatusBar = "Listo"

End Sub

Public Function CambiaNombre(cadena As String) As String

Dim Posicion As Integer, Caracter As Variant

'definimos una matriz sin especificar elementos

Dim Matr() As Variant

'la redefinimos y le asignamos un número de elementos

'igual al número de caracteres que componen la cadena a evaluar

ReDim Preserve Matr(Len(cadena))

'recorremos cada uno de dichos caracteres

For Posicion = 1 To Len(cadena)

    Caracter = Mid$(cadena, Posicion, 1)

    If Caracter <> " " Then

        Matr(Posicion) = Caracter

        NuevoNombre = Join(Matr, "")

    Else

        Exit For

    End If

    Next Posicion

End Function

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios
Respuesta aceptada por el autor de la pregunta
Héctor Miguel 71,595 Puntos de reputación
2013-07-03T20:03:16+00:00

sube tu archivo a una carpeta pública de TU SkyDrive, obtén una ruta para su descarga y compártela en tu siguiente mensaje

de todas formas, hay algunos "conceptos" que no has analizado completamente (p.e.)

  1. lo que hace la función, ya lo "leí", le pasas como parámetro el nombre del libro que se abre y lo "recortas" en caso de encontrarse algún espacio " ", para asignarlo como nombre a la hoja recién agregada, la pregunta es: porque recortas al espacio ?

=> (no pusiste dos o tres ejemplos)

  1. Windows(... es claro que se refiere a un libro abierto, PERO... "ThisWorkbook" NO ES... ninguna hoja, es EL LIBRO donde esta pegado el código que expones, por lo que NO CAMBIA de nombre (según el bucle) a "XXXX"

nueva (RE)pregunta:

hay algún rango "especifico" para obtener los datos de la hoja(3) copiada de cada libro y agregada al libro (ThisWorkbook) ?

saludos,

hector.

p.d. agrego: cómo se llama el libro donde está el código que expones ?

¿Le ha resultado útil esta respuesta?

0 comentarios No hay comentarios

41 respuestas adicionales

Ordenar por: Más antiguo
  1. Anónimas
    2013-07-03T20:29:32+00:00

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  2. Anónimas
    2013-07-03T20:54:21+00:00

    Respuestas:

    1.El espacio con " " es para que solo me ponga en la nueva pestaña del archivo consolida el nombre antes del espacio en blanco porque el resto se repite en todas las hojas y se me hace muy largo el nombre cuando se crean pestañas en consolida.

    2.Correcto el ThisWorkbook es para trabajar en esa hoja activa. y el nombre se cambia mas abajo del codigo detalle.

    3.son valores en % que vienen de diferentes lados de cada hoja XXX que los llamo a mi hoja consolidada llamada General de Consolida.xlsm y vienen de la nueva pestaña llamada por ejemplo nuevo nombre AGUIRRE.

    cuando corras mi macro con boton CONSOLIDA tendras un mejor panorama de como se hace todo esto, pero lo que me faltaria es teminar de llenar la matriz que esta en general con datos de cada celda que te guiaras con la parte de la Hoja General donde dice NOMENCLATURAS que son un detalle de cada dato que se debe colocar en su respectica campo:

    (p.e):

    1 Capacitación

    va en celda de General: D3

    1,1 Concientizar sobre la Gestión Gubernamental y la Gestión Financiera

    van en celda de General E3

    y asi sucesivamente pero considerando que viene el dato de la hoja que corresponde que la primera por orden de la carpeta es AGUIRRE

    Muchas Gracias

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  3. Anónimas
    2013-07-04T01:57:04+00:00

    Hola hector pudiste ver el comprimido con las hojas de excel!!!

    Muchas Gracias de antemano

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  4. Héctor Miguel 71,595 Puntos de reputación
    2013-07-04T02:14:21+00:00

    por lo que se puede apreciar, luego de correr pruebas con esa macro (me parece que) te está dejando las cosas "patas arriba" (???)

    • no completa la información
    • toma y pone datos equivocados en lugares equivocados
    • agrega información "fantasma" (mas allá de las filas según n_archivos abiertos)
    • (probable o seguramente ocasionados por los bucles "For C" y "For A" -???-)

    además, existe un (AB)uso exagerado/desconsiderado/... de "formatitos" y celdas combinadas <\º|º/>

    (la única ventaja que veo en ese modelo de hoja3 es que el arreglo es "uniforme")

    pregunta (casi) final:

    => es imprescindible COPIAR la hoja3 de cada libro a tu consolidado ?

    (o es suficiente con trasladar los datos "fidedignos" a la hoja de tu resumen "general" ?)

    saludos,

    hector.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios