Visual Basic para Aplicaciones - Problemas con codigo VBA

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Nahara
Val: 1
Ha disminuido su posición en 23 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Problemas con codigo VBA

Publicado por Nahara (1 intervención) el 24/06/2020 16:50:32
Hola grupo, estoy trabada en una formula VBA para Excel, usando macros....mi situacion es la siguiente:
Necesito vincular varios documentos recogidos en forma de encuestas, hacia otro documento general, en forma de matriz, este libro recogeria todos los datos a modo de resumen de las respuestas de cada encuestado. He modificado una formula que tome cmo ejemplo que me salta constantemente un error...me podrian ayudar?
He modificado un tanto tu codigo, para acercarlo a lo que necesito. Primero que todo, deseo agradecer la ayuda que me brindas con tu codigo, y lo referenciaré en cada uso que le de, cuenta con ello. Mi situacion es la siguiente, intento validar una encuesta, en el que asigno valores a cada respuesta introducida por el usuario y que esto tribute a su vez a una matriz de datos que puedo finalmente manerjar estadisticamente. Modifique tu codigo segun mis condiciones, pero me sigue saltando error: que estan incorrectos los parametros de Matriz...me ayudas???----te agradeceria mucho
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
Sub Consolidar()
 
'Definimos las variables
    Dim Misdatos(), i, Matriz_Archivo, Ruta_archivo, Base_archivos
    Dim Libro_nuevo As Workbook
 
'Controlamos posibles errores al introducir los datos de la matriz
 
On Error GoTo Control_e
'Refresco de pantalla desactivado
Application.ScreenUpdating = False
 
'Hacemos que la hoja2 (donativos) sea la hoja activa
Sheets(2).Select
 
    'Igualamos el destino del archivo base con el resto de archivos a consolidar
    Ruta_archivo = ThisWorkbook.Path & "\"
 
    'Buscamos los archivos que sean Excel (xls, xlsx, xlsm ...)
    Base_archivos = Dir(Ruta_archivo & "*.xl*")
 
    'Empezamos a contar archivos desde 1
    Matriz_Archivo = 1
 
    'Creamos bucle asignando los nuevos archivos a la matriz creada (siempre que existan archivos)
    Do While Base_archivos <> Empty
 
    'Si el nombre de los archivos a consolidar no son iguales al
    'nombre del archivo principal entonces empezar a contar
        If Base_archivos <> ThisWorkbook.Name Then
 
        'procedemos a contar igualando y sumando 1
            Matriz_Archivo = Matriz_Archivo + 1
 
        'controlamos el tamaño de la matriz
            ReDim Preserve Misdatos(1 To Matriz_Archivo)
            Misdatos(Matriz_Archivo) = Base_archivos
        End If
 
        'Usamos la variable base archivo para realizar la búsqueda
        Base_archivos = Dir()
    Loop
 
    If Matriz_Archivo > 0 Then
        'Definimos el tamaño de la matriz
        ReDim Matriz(1 To Matriz_Archivo, 2 To 29)
        'Especificamos el mayor y menor subíndice en la matriz de datos
        For i = LBound(Misdatos) To UBound(Misdatos)
 
           'Asignamos cada uno de los archivos a vble Libro_nuevo
            Set Libro_nuevo = Workbooks.Open(Ruta_archivo & Misdatos(i))
 
            With Libro_nuevo.Worksheets(1)
               'Asignamos datos a la matriz
               'desde cada uno de los archivos que se van consolidando
              Matriz(i, 2) = Libro_nuevo.Worksheets(1).Range("M15")
              Matriz(i, 3) = Libro_nuevo.Worksheets(1).Range("M18")
              Matriz(i, 4) = Libro_nuevo.Worksheets(1).Range("M21")
              Matriz(i, 5) = Libro_nuevo.Worksheets(1).Range("M24")
               Matriz(i, 6) = Libro_nuevo.Worksheets(1).Range("M28")
               Matriz(i, 7) = Libro_nuevo.Worksheets(1).Range("M29")
               Matriz(i, 8) = Libro_nuevo.Worksheets(1).Range("M30")
               Matriz(i, 9) = Libro_nuevo.Worksheets(1).Range("M31")
               Matriz(i, 10) = Libro_nuevo.Worksheets(1).Range("M32")
               Matriz(i, 11) = Libro_nuevo.Worksheets(1).Range("M33")
               Matriz(i, 12) = Libro_nuevo.Worksheets(1).Range("M34")
               Matriz(i, 13) = Libro_nuevo.Worksheets(1).Range("M35")
               Matriz(i, 14) = Libro_nuevo.Worksheets(1).Range("M36")
               Matriz(i, 15) = Libro_nuevo.Worksheets(1).Range("M37")
               Matriz(i, 16) = Libro_nuevo.Worksheets(1).Range("M38")
               Matriz(i, 17) = Libro_nuevo.Worksheets(1).Range("M39")
               Matriz(i, 18) = Libro_nuevo.Worksheets(1).Range("M40")
               Matriz(i, 19) = Libro_nuevo.Worksheets(1).Range("M42")
               Matriz(i, 20) = Libro_nuevo.Worksheets(1).Range("M43")
               Matriz(i, 21) = Libro_nuevo.Worksheets(1).Range("M44")
               Matriz(i, 22) = Libro_nuevo.Worksheets(1).Range("M45")
               Matriz(i, 23) = Libro_nuevo.Worksheets(1).Range("M46")
               Matriz(i, 24) = Libro_nuevo.Worksheets(1).Range("M47")
               Matriz(i, 25) = Libro_nuevo.Worksheets(1).Range("M48")
               Matriz(i, 26) = Libro_nuevo.Worksheets(1).Range("M49")
               Matriz(i, 27) = Libro_nuevo.Worksheets(1).Range("M50")
               Matriz(i, 28) = Libro_nuevo.Worksheets(1).Range("M51")
               Matriz(i, 29) = Libro_nuevo.Worksheets(1).Range("M52")
 
            End With
            'cerramos el libro
            Libro_nuevo.Close
            Next i
 
            End If
 
    'Asignamos en la hoja2 los datos introducidos en la matriz.
        With ThisWorkbook.ActiveSheet
 
        'Limpiamos contenidos de la hoja hoja
        ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Offset(1).ClearContents
 
        'Pegamos datos respetando la cabecera que hemos colocado como fija,
        'y especificamos que las columnas que utilizamos son iguales a las definidas en las matrices,
        'en este caso son 29 columnas
        ThisWorkbook.ActiveSheet.Range("A2").Resize(Matriz_Archivo, 29) = Matriz
 
        'Justificamos celdas
        ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.EntireColumn.AutoFit
    End With
 
        'En caso de que en la carpeta los archivos sean 0 cerramos proceso
        If Matriz_Archivo = 0 Then
        MsgBox "NO HAY ARCHIVOS PARA CONSOLIDAR EN LA CARPETA ACTUAL", vbExclamation, "CARPETA VACÍA"
        Exit Sub
 
'Si los datos de la matriz no son correctos saltará mensaje
Control_e:
    MsgBox "VERIFICA QUE HAS INTRODUCIDO CORRECTAMENTE LOS PARAMETROS DE LA MATRIZ EN EL CODIGO VBA", vbExclamation, "CARPETA VACIA"
    Exit Sub
 
    End If
 
   'Liberamos memoria datos nueva hoja
    Set Libro_nuevo = Nothing
 
    'Liberamos matriz de datos
    Erase Misdatos
 
    'Refresco de pantalla activo
    Application.ScreenUpdating = True
 
End
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de MIGUEL
Val: 424
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Problemas con codigo VBA

Publicado por MIGUEL (121 intervenciones) el 26/07/2020 03:38:29
Hola Nahara

Por si aun no lo solucionas te dejo el archivo con las correcciones.

Espero te sirva.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar