Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

redimensionar una array tipo type

Estas en el tema de redimensionar una array tipo type en el foro de Visual Basic clásico en Foros del Web. buenas, haber si me pueden ayudar con esto. he diseñado una matriz tipo type de esta manera: Private Type datos nombre As String cantidad As ...
  #1 (permalink)  
Antiguo 18/11/2008, 07:44
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
redimensionar una array tipo type

buenas, haber si me pueden ayudar con esto.
he diseñado una matriz tipo type de esta manera:
Private Type datos
nombre As String
cantidad As Integer
confi As String
End Type

Dim matrix() As datos

el diferentes procedimientos voy llenando la matriz:
ReDim Preserve matrix(k)
matrix(k).nombre = variable
k = k + 1

.....


ReDim Preserve matrix(k)
matrix(k).cantidad = can
...
For i = 0 To UBound(vConfigName)
ReDim Preserve matrix(i)
matrix(i).confi = vConfigName(i)
Next i

y cuando lo voy a visualizarlo en la hoja excel la matriz, matrix se encuentra vacio.
xq puede ser?? el fallo puede estar a la hora de redimensionar la matriz. gracias!


Dim i As Integer, j As Integer, cont As Integer, cont2 As Integer

For i = 0 To UBound(matrix)'matrix vacio
cont = matrix(i).cantidad
Range("A2").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(0, 1).Select
Loop
Do Until cont = cont2
ActiveCell.FormulaR1C1 = matrix(i).nombre
ActiveCell.Offset(0, 1).Select
cont2 = cont2 + 1
Loop

For j = 1 To cont
Range("B2").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = matrix(j).confi
Next j
Next i

otra cosita saben si existe algun otro modo para escribir en una celda de excel aparte de este modo ActiveCell.FormulaR1C1 = matrix(j).confi. sq a veces se me para ai.
  #2 (permalink)  
Antiguo 18/11/2008, 07:47
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: redimensionar una array tipo type

¿Podrías poner el código completo donde redimensionas el array?. Porque vas redimensionando con diferentes valores con lo que si se reduce el array los demás índices se pierden.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 18/11/2008, 08:01
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: redimensionar una array tipo type

Sub deitura(neremodel As object)

Dim a As String
Dim aText() As String, s As String, variable As String
Dim k As Long

a = neremodel.GetPathName 'a es un array de objetos


aText = Split(a, "\")
s = aText(UBound(aText))
variable = Left(s, InStr(s, ".") - 1)

ReDim Preserve matrix(k)
matrix(k).nombre = variable
k = k + 1

End Sub


Sub contar(neremodel As object)
Dim i As Integer, cop As Integer
Dim vConfigName As Variant

cop = neremodel.GetConfigurationCount'cop as integer
ReDim Preserve matrix(k)
matrix(k).cantidad = cop

vConfigName = neremodel.GetConfigurationNames 'array tipo string

For i = 0 To UBound(vConfigName)
ReDim Preserve matrix(i)
matrix(i).confi = vConfigName(i)
Next i

End Sub
  #4 (permalink)  
Antiguo 18/11/2008, 08:09
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: redimensionar una array tipo type

Es como te dije, al principio estás redimensionando con k que va incrementándose, pero después lo redimensionas en un bucle que empieza con 0, por lo que al primer paso del bucle se perderán todos los valores que almacenaste.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 18/11/2008, 08:15
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: redimensionar una array tipo type

y como lo tengo q hacer??
la teoria dice q cada vez q vaya a redimensionar un array y quiera mantener los datos ya almacenados hay q poner redim preserve. y poniendo:
ReDim Preserve matrix.(k)nombre
ReDim Preserve matrix(k).cantidad
ReDim Preserve matrix(i).confi

valdria?? sq necesito usar las variables k e i para poner los datos en una posicion concreta.
  #6 (permalink)  
Antiguo 18/11/2008, 08:44
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: redimensionar una array tipo type

Un ejemplo para que entiendas mejor:
Código vb:
Ver original
  1. Dim vArray() As String
  2. ReDim vArray(5)
  3. Array(0) = "Valor0"
  4. Array(1) = "Valor1"
  5. Array(2) = "Valor2"
  6. Array(3) = "Valor3"
  7. Array(4) = "Valor4"
  8. Array(5) = "Valor5"
  9.  
  10. 'Si yo hago algo como esto
  11. ReDim Preserve vArray(6)
  12. 'Todos los índices anteriores preservan el contenido y se expande el array
  13. vArray(6) = "Valor6"
  14.  
  15. 'Pero si hago esto
  16. ReDim Preserve vArray(0)
  17. 'Todo mi contenido fue se perdió
  18. MsgBox vArray(1) 'Provocará un error, el índice 1 ya no existe
Por eso, depende del caso, si no quieres realmente perder los datos cada vez que haces ReDim Preserve debes expandir el array porque si haces al revés se perderán los datos que no estén dentro del nuevo rango de índices.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 18/11/2008, 09:19
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: redimensionar una array tipo type

ok, gracias x el ejemplo! como el array coge una unica longitud para todos sus datos es absurdo poner ReDim Preserve matrix(k).cantidad.
entonces, con esto tendria q funcionar:
ReDim matrix(k)
matrix(k).nombre = variable
k = k + 1

cop = neremodel.GetConfigurationCount
ReDim Preserve matrix(k)
matrix(k).cantidad = cop


vConfigName = neremodel.GetConfigurationNames
ReDim Preserve matrix(i)
For i = 0 To UBound(vConfigName)
matrix(i).confi = vConfigName(i)'pero ahora aqui me dice:error9:subindice fuera del intervalo??what?no lo pillo.
Next i
  #8 (permalink)  
Antiguo 18/11/2008, 09:25
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: redimensionar una array tipo type

Si "lees" el código entenderás qué pasa:
Código vb:
Ver original
  1. ReDim Preserve matrix(i)
  2. ' ¿Qué valor tiene i?. Si no le has dado otro valor será 0
  3. ' Por lo que tu array quedaría con un único elemento, matrix(0)
  4. For i = 0 To UBound(vConfigName)
  5.     '¿Cuánto vale i?. 0, así que en la primera repetición, todo bien
  6.    matrix(i).konfi = vConfigName(i)
  7.     'Aquí está el problema, al volver a repetir el código "i" valdrá 1
  8.    'Por lo que al tratar de colocar un valor en matrix(1) provocará un error.
  9. Next i
P.S.: Ejecutar paso a paso es muy útil para detectar esta clase de errores, para depurar el código.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 18/11/2008, 09:43
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: redimensionar una array tipo type

gracias, sq yo no lo veia asi.entonces no puedo cargar todos los datos en un mismo array, xq tanto k como i van a ir cogiendo los mismos valores (del 0 para rriba...) y entonces si pongo ReDim matrix(i) no me tendra en cuenta los valores de matrix (k) y si pongo ReDim Preserve matrix(i) ira a 0 y me borrara los datos anteriormente cargados.
no hay opcion de hacer redim matrix(i).konfi???
he leido x ai q el redim/redim preserve es un adelanto pero lo estoy poniendo en duda...
  #10 (permalink)  
Antiguo 18/11/2008, 09:46
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: redimensionar una array tipo type

No, no se puede, como te había contestado en tu otro tema.

Claro, si konfi fuera otro array sería otra historia, pero en fin, no es el caso.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 18/11/2008, 09:50
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: redimensionar una array tipo type

pues konfi tendre q definirlo como otro array si no va a ser imposible hacer lo q tenia pensado.
pensaba q se podia hacer de este modo y tenia escrito los comandos para visualizar la matrix en el excel, tendre q modificar todo.
mil gracias, david!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:51.