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: Muy útil
  1. Anónimas
    2013-07-04T17:05:05+00:00

    quedaste claro con esto o aun tienes alguna duda, amigo para ver si me puedes ayudar con esta macro.

    Pura Vida

    Muchas Gracias.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  2. Anónimas
    2013-07-04T13:56:15+00:00

    Hector terespondo:

    1. en el apartado 2.5 (columna M) no hay "%", la celda de origen tiene una validación para poner una "X" o dejar vacío su lugar

    R/todos los valores son % si no hay valor se pasa al siguiente, por eso te decia el refresh por si al darle de nuevo clic al Boton Consolida han cambiado algun valor y lo actualice.

    1. el apartado 6.6 (columna AI) "NO existe", no hay celda de origen, NI en el listado de descripciones (columna AZ)... puesto que del 6.5 se brinca al 6.7 (se omite el 6.6)

    R/ talves este error es mio porque si son secuenciales todos desde el 1 hasta el 9

    6 Tratamiento de Activos no Financieros
    6,1 Inventarios
    6,2 Propiedades, planta y equipo
    6,3 Propiedades de inversión
    6,4 Bienes de infraestructura
    6,5 Activos intangibles
    6,6 Activos biológicos
    6,7 Activos concesionados

    como lo "resolvemos" (en la hoja "general" del consolidado) ???

    R/la tabla NOMENCLATURA es un detalle de cada descripcion de la hoja origen es que es muy largo el texto en ciertos casos es por eso los numere del 1 a 9 y subniveles (pero ese fue un invento mio :) )

    1. se elimina la columna M ?... o ponemos la "X" (o vacío) ???

    R/Vacio

    1. se elimina la columna AI (y se recorre la numeración) ?... o la dejamos "en blanco" ???

    R/ si el dato en la hoja Origen esta en blanco se deja en blanco, luego tendre que afinar mas las hojas de origenes para que los usuarios minimicen errores humanos osea poner validaciones de 0% al 100% en cada dato.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  3. Héctor Miguel 71,595 Puntos de reputación
    2013-07-04T04:35:09+00:00

    me surgieron dos "pequeños inconvenientes" (parece que son "lo ultimo" ?)

    en la hoja general (consolidado) están tituladas las columnas (fila 2) con los capítulos y sub-capítulos de cada apartado PERO... dos de ellos no tienen "dato" (%) en las celdas "de origen" en el formulario de la hoja3 de cada libro:

    1. en el apartado 2.5 (columna M) no hay "%", la celda de origen tiene una validación para poner una "X" o dejar vacío su lugar
    2. el apartado 6.6 (columna AI) "NO existe", no hay celda de origen, NI en el listado de descripciones (columna AZ)... puesto que del 6.5 se brinca al 6.7 (se omite el 6.6)

    como lo "resolvemos" (en la hoja "general" del consolidado) ???

    1. se elimina la columna M ?... o ponemos la "X" (o vacío) ???
    2. se elimina la columna AI (y se recorre la numeración) ?... o la dejamos "en blanco" ???

    saludos,

    hector.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  4. Anónimas
    2013-07-04T03:50:46+00:00

    claro todas las patas para arriba,

    si el laberinto esta en los bucles C y A, y hasta como dices en el AB

    ya notaste que no rengo experiencia en matrices de varias hojas a consolidar,......:)

    no es necesario copiar todas las hojas de formulario en mi archivo consolidado hoja general, los puse para poder guiarme con los datos

    y si es posible trasladar los datos fidedignos a la hoja general, y el ultimo paso luego de este es que tenga algun tipo de refresh el boton consolida por si entra y/o elimina un archivo de los los que se trae la data %

    Pura Vida amigo.

    Muchas Gracias.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios