'Redimensiona los índices de la matriz al doble de su valor actual, preservando sus valores originales (incluye matrices de una dimensión, 2 dimensiones y matrices dentro
'de matrices)
Public Sub RedimMat(NombreMatriz As String, Optional Nivel1, Optional Nivel2, Optional LlenarLosNuevosIndicesConElSigValor As Boolean = False, _
Optional ValorAIntroducirEnLosIndicesDeLaMat As Variant = SinVal)
'ENTRADAS
'1)NombreMatriz indica el nombre de la matriz a redimensionar
'2)Nivel1 = Primer nivel de profundidad de matriz
'3)Nivel2 = Segundo nivel de profundidad de matriz
'4)ValorAIntroducirEnLosIndicesDeLaMat = Es el valor k se va a introducir en los nuevos índices redimensionados de la matriz (en caso de k LlenarLosNuevosIndicesConElSigValor
'= True
'5)LlenarLosNuevosIndicesConElSigValor = Bandera para utilizar ValorAIntroducirEnLosIndicesDeLaMat o no utilizarla
'SALIDAS
'1)La matriz indicada x el NombreMatriz, ya redimensionada al doble
Static MatRedimMatTemporal As Variant
Dim EmpezarALlenarConElValor3APartirDeEsteNumero
Dim NumeroLlenando As Long
Select Case NombreMatriz
'Matrices con 1 dimensión
Case "CPsValores"
ReDim Preserve CPsValores(LBound(CPsValores) To UBound(CPsValores) + (UBound(CPsValores) _
- LBound(CPsValores) + 1))
Case "MatDendDsAMover"
ReDim Preserve MatDendDsAMover(LBound(MatDendDsAMover) To UBound(MatDendDsAMover) + (UBound(MatDendDsAMover) _
- LBound(MatDendDsAMover) + 1))
Case "MatrizDeCamSeñales"
ReDim Preserve MatrizDeCamSeñales(LBound(MatrizDeCamSeñales) To UBound(MatrizDeCamSeñales) + (UBound(MatrizDeCamSeñales) _
- LBound(MatrizDeCamSeñales) + 1))
Case "PoblacsPendientes"
ReDim Preserve PoblacsPendientes(LBound(PoblacsPendientes) To UBound(PoblacsPendientes) + (UBound(PoblacsPendientes) - LBound(PoblacsPendientes) + 1))
Case "C"
ReDim Preserve C(LBound(C) To UBound(C) + (UBound(C) - LBound(C) + 1))
Case "MatCamSeñalesDeCaseta"
ReDim Preserve MatCamSeñalesDeCaseta(LBound(MatCamSeñalesDeCaseta) To UBound(MatCamSeñalesDeCaseta) + (UBound(MatCamSeñalesDeCaseta) - LBound(MatCamSeñalesDeCaseta) + 1))
Case "MatDeCaHisYCaMas"
ReDim Preserve MatDeCaHisYCaMas(LBound(MatDeCaHisYCaMas) To UBound(MatDeCaHisYCaMas) + (UBound(MatDeCaHisYCaMas) - LBound(MatDeCaHisYCaMas) + 1))
'*********************************************************************
'PUNTO K QUISIERA OPTIMIZAR
'Matrices q a fuerzas se tienen q copiar a una matriz individual, porque la instrucción Redim no permite redimensionarlas directamente, porque
'son matrices q están dentro de otra matriz, y vb6 no la reconoce como tal (visual basic 2008 sí la reconoce)
Case "C() () "
MatRedimMatTemporal = C(Nivel1)(Nivel2)
If LlenarLosNuevosIndicesConElSigValor = True Then EmpezarALlenarConElValor3APartirDeEsteNumero = UBound(MatRedimMatTemporal) + 1
ReDim Preserve MatRedimMatTemporal(LBound(MatRedimMatTemporal) To UBound(MatRedimMatTemporal) + (UBound(MatRedimMatTemporal) _
- LBound(MatRedimMatTemporal) + 1))
If LlenarLosNuevosIndicesConElSigValor = True Then
For NumeroLlenando = EmpezarALlenarConElValor3APartirDeEsteNumero To UBound(MatRedimMatTemporal)
MatRedimMatTemporal(NumeroLlenando) = ValorAIntroducirEnLosIndicesDeLaMat
Next
End If
C(Nivel1)(Nivel2) = MatRedimMatTemporal
Case "CpsValores() () "
MatRedimMatTemporal = CPsValores(Nivel1)(Nivel2)
If LlenarLosNuevosIndicesConElSigValor = True Then EmpezarALlenarConElValor3APartirDeEsteNumero = UBound(MatRedimMatTemporal) + 1
ReDim Preserve MatRedimMatTemporal(LBound(MatRedimMatTemporal) To UBound(MatRedimMatTemporal) + (UBound(MatRedimMatTemporal) _
- LBound(MatRedimMatTemporal) + 1))
If LlenarLosNuevosIndicesConElSigValor = True Then
For NumeroLlenando = EmpezarALlenarConElValor3APartirDeEsteNumero To UBound(MatRedimMatTemporal)
MatRedimMatTemporal(NumeroLlenando) = ValorAIntroducirEnLosIndicesDeLaMat
Next
End If
CPsValores(Nivel1)(Nivel2) = MatRedimMatTemporal
'***********************************************************************
'Matrices con 2 dimensiones
Case "MatCamLlavesTratadas"
ReDim Preserve MatCamLlavesTratadas(LBound(MatCamLlavesTratadas, 1) To UBound(MatCamLlavesTratadas, 1), _
LBound(MatCamLlavesTratadas, 2) To UBound(MatCamLlavesTratadas, 2) + (UBound(MatCamLlavesTratadas, 2) - LBound(MatCamLlavesTratadas, 2) + 1))
Case "MatSeparadoresDeConceptos"
ReDim Preserve MatSeparadoresDeConceptos(LBound(MatSeparadoresDeConceptos, 1) To UBound(MatSeparadoresDeConceptos, 1), _
LBound(MatSeparadoresDeConceptos, 2) To UBound(MatSeparadoresDeConceptos, 2) + (UBound(MatSeparadoresDeConceptos, 2) - LBound(MatSeparadoresDeConceptos, 2) + 1))
Case "MatrizDeAccionesEnVisio"
ReDim Preserve MatrizDeAccionesEnVisio(LBound(MatrizDeAccionesEnVisio, 1) To UBound(MatrizDeAccionesEnVisio, 1), _
LBound(MatrizDeAccionesEnVisio, 2) To UBound(MatrizDeAccionesEnVisio, 2) + (UBound(MatrizDeAccionesEnVisio, 2) - LBound(MatrizDeAccionesEnVisio, 2) + 1))
Case "MatDeCaHis"
ReDim Preserve MatDeCaHis(LBound(MatDeCaHis, 1) To UBound(MatDeCaHis, 1), _
LBound(MatDeCaHis, 2) To UBound(MatDeCaHis, 2) + (UBound(MatDeCaHis, 2) - LBound(MatDeCaHis, 2) + 1))
Case Else
ErrorCritico ("La Matriz se tiene que redimensionar antes de continuar"), -1: Debug.Assert Seguir: Ending 'Si no encontré el NombreMatriz, saca un error y ya no puedo
'continuar hasta k solucione el error.
End Select
NombreMatriz = ""
End Sub