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

matriz dinamica tipo type

Estas en el tema de matriz dinamica tipo type en el foro de Visual Basic clásico en Foros del Web. buenas, aqui estamos con otra duda. he definido una matrix tipo type de este modo: Private Type datos nombre As String confi As String cantidad ...
  #1 (permalink)  
Antiguo 17/11/2008, 02:11
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
matriz dinamica tipo type

buenas, aqui estamos con otra duda.
he definido una matrix tipo type de este modo:
Private Type datos
nombre As String
confi As String
cantidad As Integer
End Type

Dim matrix() As datos
k=0
y en una procedure al usarla como:
matrix(k).izena = variable
k = k + 1
se produce un error9: subindice fuera del intervalo
xq aparece eso??
gracias de antemano!
  #2 (permalink)  
Antiguo 17/11/2008, 02:53
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: matriz dinamica tipo type

y como se dice la posicion de matrix.nombre(i - 1) y de (matrix.cantidad(i))??
For j = (matrix(i).nombre) To (matrix(i).cantidad)

con l bound y ubound??
For j = lbound(matrix(i).nombre) To ubound(matrix(i).cantidad)

y xq no se puede poner:
For i = 0 To UBound(matrix.nombre)
quiero coger el limite de la matrix en los nombres y me pone q el calificador no es valido.

gracias!

Última edición por ebu; 17/11/2008 a las 03:01
  #3 (permalink)  
Antiguo 17/11/2008, 04:14
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: matriz dinamica tipo type

Cita:
Iniciado por ebu Ver Mensaje
buenas, aqui estamos con otra duda.
he definido una matrix tipo type de este modo:
Private Type datos
nombre As String
confi As String
cantidad As Integer
End Type

Dim matrix() As datos
k=0
y en una procedure al usarla como:
matrix(k).izena = variable
k = k + 1
se produce un error9: subindice fuera del intervalo
xq aparece eso??
gracias de antemano!
Hola, a la primera pregunta: Tienes que redimendionar el array antes de cargar cualquier valor

ReDim Preserve Matrix(k)
Matrix(k).nombre = "pepe"
Matrix(k).confi = "Confi"
Matrix(k).cantidad = k
k = k + 1


a la segunda, para recorrer la matriz

For i = 0 To UBound(Matrix)
List1.AddItem Matrix(i).nombre
List1.AddItem Matrix(i).confi
Next i


  #4 (permalink)  
Antiguo 17/11/2008, 04:30
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: matriz dinamica tipo type

ok.
sobre la segunda pregunta. es posible q coja el ubound de matrix.nombre, es decir, el limite superior de los datos tipo nombre, no el de matrix.
For i = 0 To UBound(matrix.nombre)
Range("A2").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = matrix(i).nombre

'aqui lo q quiero q haga en q coja la posicion del nombre q esta en la posicion i de la matrix, e igual con la cantidad. no hay alguna funcion q t devuelva la posicion??gracias!
y aunq lo ponga asi For i = 0 To UBound(Matrix) me sigue dando error 9
For j = (matrix(i).nombre) To (matrix(i).cantidad)
Range("B2").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = matrix(j).confi
Next j
Next i
  #5 (permalink)  
Antiguo 17/11/2008, 09:14
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: matriz dinamica tipo type

La Matriz es una sola, así que no tiene sentido lo de UBound(Matriz.nombre) ya que todos los índices tienen ".nombre", no hay diferencias entre los índices de cada variable que compone el Type .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 17/11/2008, 09:50
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: matriz dinamica tipo type

mi matrix esta definida asi:
Private Type datos
nombre As String
confi As String
cantidad As Integer
End Type

yo de atemano se q .confi tendra mayor longitud q el .nombre.
con el UBound(Matriz.nombre) lo q queria era coger el limite superior de .nombre. pero sq eso no se si se puede hacer...
y sabes si este otro seria posible?
For j = (matrix(i).nombre) To (matrix(i).cantidad) 'quiero coger las posiciones de un nombre y una cantidad concreta
valdria con: For j = val(matrix(i).nombre) To val(matrix(i).cantidad)

gracias te antemano!
  #7 (permalink)  
Antiguo 17/11/2008, 09:59
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: matriz dinamica tipo type

Es lo que te expliqué, confi no puede tener mayor longitud que nombre (como cadena sí, pero no son arrays, así que UBound no tiene sentido usar con ellos), ambos pertenecen a un array que se expande.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 17/11/2008, 10:12
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: matriz dinamica tipo type

ok, perdona. sq todavia me cuesta pillar algunos conceptos q son un poco abstractos para mi.
y lo de For j = val(matrix(i).nombre) To val(matrix(i).cantidad) sabes si existe??
  #9 (permalink)  
Antiguo 17/11/2008, 11:02
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: matriz dinamica tipo type

De existir... existe, pero dependiendo del caso, no tiene mucho sentido, ya que estás convirtiendo .nombre en un número y .cantidad en otro, y a partir de ahí estás haciendo un bucle que empiece por el número en .nombre y termine con el número en .cantidad.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
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 13:20.