La instrucción ReDim permite redimensionar una matriz en Visual Basic. Personalmente la he utilizado cuando he usado VBA en Access, un código que es compatible con VB6 (Visual Basic versión 6).
Es útil en aquellos casos en que necesitamos almacenar datos en una matriz pero no sabes, a priori, cual será el número total de elementos a incorporar.
Un ejemplo práctico es cuando hacemos una utilidad para tratar los archivos de una carpeta pero al hacer el programa no sabemos cuantos archivos puede llegar a contener dicha carpeta y no sería eficiente diseñar matrices enormes para prever cualquier situación.
Option Explicit Dim MiMatriz() As String Private Sub Form_Load() ReDim MiMatriz(NuevoIndice) As String End Sub
La instrucción Redim puede ir seguido del parámetros Preserve: «Redim Preserve…» como su nombre indica lo que se hace es indicarle que al aumentar el tamaño de la matriz se preserven los datos de la misma.
La instrucción Redim puede utilizarse también para liberar espacio en una matriz ya procesada y que no necesitamos tener sus datos. Por ejemplo poniendo ReDim MiMatriz(0)
Como iterar por la matriz:
Dim ind as integer For ind = 0 To UBound(MiMatriz) debug.print MiMatriz(ind) Next
Usar Redim para leer el contenido de Excel
En este ejemplo se usa la instrucción ReDim para leer el contenido de una hoja de Excel.
Public Sub ImportarDatosLaCaixa(Optional ArchivoExcel As String = "") Dim RutaArchivo As String Dim ObjHoja As Object Dim strfilename As String Dim objexcel As Object Dim i As Integer Dim objHojas As Object 'Integer Dim Respuesta As String Dim itm As Variant Dim Sheetcount As Integer Dim canHojas As Integer Dim Lista() strfilename = ArchivoExcel If Len(Dir(strfilename)) = 0 Then Respuesta = MsgBox("El archivo XLS que especificó no existe. Verifique la ruta", vbYesNo + vbCritical + vbDefaultButton2, " Archivo ") Exit Sub End If Set objexcel = CreateObject("excel.application") With objexcel .displayalerts = False .workbooks.Open (strfilename) Sheetcount = .worksheets.Count ReDim Lista(1 To Sheetcount) For i = 1 To Sheetcount '.worksheets.Count Set objHojas = .sheets(i) canHojas = canHojas + 1 Lista(i) = .sheets(i).Name DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel8, "LaCaixa2008", strfilename, True, Lista(i) & "!" & "A1:Q300" Next i End With objexcel.Quit Set objexcel = Nothing 'close Set ObjHoja = Nothing MsgBox "Proceso Finalizado" End Sub
Puedes consultar más ejemplos de Visual Basic en la sección Trucos y ejemplo de VBA para Microsoft Access.