Que esta mal con este codigo

02/12/2006 - 19:20 por zz | Informe spam
Despues de varios dolores de cabeza, me rindo y pido ayuda

tengo este codigo que me carga una lista guardada en una hoja de excel



Private Sub load_certifications()
Dim stritem, strdesc As String
Dim i As Integer
i = 0
Sheets("Entrenamientos").Activate
ActiveSheet.Range("a2").Activate
Do Until ActiveCell.Value = ""
With ActiveCell
stritem = CStr(.Offset(, 1).Value)
strdesc = CStr(.Offset(, 2).Value)
End With
Cmbtrainings.AddItem CStr(stritem)
Cmbtrainings.ColumnCount = 2
Cmbtrainings.ColumnHeads = True
Cmbtrainings.Column(2) = strdesc
i = i + 1
ActiveCell.Offset(1, 0).Activate
Loop
End Sub

pero al ejecutarlo me marca el error "381"

could not set the column property, Invalid property array index
la verdad no le encuentro donde esta el error




zz [MX]
cuasi-musico,semi-poeta y loco

Preguntas similare

Leer las respuestas

#6 Vinchenzo vinç
03/12/2006 - 01:58 | Informe spam
"Héctor Miguel" escribió en el mensaje news:

por eso digo [dentro de muchas otros 'bondades' que tienen estos foros]...
lo bueno es que no estamos solos :))



Eso mismo pienso yo.
Pero como se suele dicir, «entre todo lo bueno siempre hay algo malo», y en el caso de los foros es que no se suelen hacer muy a menudo este tipo de observaciones (no correcciones).
En muchas ocasiones me he percatado que la respuesta que había dado era errónea (en el grupo de Visual Basic), y desgraciadamente nadie se dignaba a comentarlo. Yo creo que es mejor advertirlo, porque además de ayudar a quien preguntó, me ayuda a mí (por si en lugar de despiste, es sencillamente porque estoy equivocado).

...corregidme si me equivoco :-)


Saludos
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/micr...c.es.excel
( i ) Temperancia en el foro:
http://support.microsoft.com/defaul...newsreglas
Respuesta Responder a este mensaje
#7 Héctor Miguel
03/12/2006 - 02:30 | Informe spam
hola, Vinchenzo !

por eso digo [dentro de muchas otras 'bondades' que tienen estos foros]...
lo bueno es que no estamos solos :))



Eso mismo pienso yo.
Pero como se suele decir, «entre todo lo bueno siempre hay algo malo» [...]



incluso [y tambien], 'dentro de lo malo'... se puede rescatar lo bueno :))
ese 'rescate' pudiera ser desde ignorar lo malo... hasta... ??? [cuestion de 'enfoques']

saludos,
hector.
___
En... ocasiones me he percatado que la respuesta... era erronea... y... nadie se dignaba a comentarlo.
... creo que es mejor advertirlo... ademas de ayudar a quien pregunto... por si en lugar de despiste, es... equivocado).
... corregidme si me equivoco :-)
Respuesta Responder a este mensaje
#8 Juan M
03/12/2006 - 16:47 | Informe spam
Hola a todos

Aprovechando el codigo modificado por HM, me gustaria saber si lo que
normalmente hago yo (corregidme si no estoy en lo correcto) mejoraria un
poco el codigo.
Evitamos la activacion de las celdas, y al tener un contador seria buena
cosa darle algo de uso. Del mismo modo, si las variables stritem y strdesc
no se emplean para nada mas, podemos asignarlas directamente a la lista.

A la espera de sus comentarios,
Atentamente,
Juan

Private Sub load_certifications()
Dim i As Integer
Cmbtrainings.ColumnCount = 2
Cmbtrainings.ColumnHeads = True
Sheets("Entrenamientos").Range("a2").Activate
i=2
Do Until range("A" & i).Value = ""
With Cmbtrainings
.AddItem
.List(i-2, 0) = CStr(range("A"&i).Offset(, 1).Value)
.List(i-2, 1) = CStr(range("A"&i).Offset(, 2).Value)
End With
i = i + 1
Loop
End Sub
Respuesta Responder a este mensaje
#9 Héctor Miguel
03/12/2006 - 21:48 | Informe spam
hola, Juan M !

Aprovechando el codigo modificado por HM, me gustaria saber si lo que normalmente hago yo
(corregidme si no estoy en lo correcto) mejoraria un poco el codigo.
Evitamos la activacion de las celdas, y al tener un contador seria buena cosa darle algo de uso.
Del mismo modo, si las variables stritem y strdesc no se emplean para nada mas, podemos asignarlas directamente a la lista.

A la espera de sus comentarios [...]



1) aunque [solo] nos limitamos [en este caso] a comentar las 'razones' de la falla en el codigo original...
es correcto que se obtiene 'mejora' al evitar la continua seleccion de 'la siguiente celda' ;)
tambien es posible evitar la seleccion de la hoja de donde se toman los datos... y el bucle de avance hasta encontrar una celda 'vacia' ;)
incluso, si las columnas seran siempre 2... puedes establecer ese parametro en directo en la ventanta de propiedades del combo
[y te evitas tambien la constante asignacion de 2 columnas al control]

2) el otro comentario, relacionado con la propiedad 'ColumnHeads' [insisto]...
solo te sera de utilidad si asignas el origen del control a un objeto 'Range' [y su hoja respectiva]
en lugar de llenar el control con los valores del rango [o de cada celda si se decide continuar con los bucles] ;)

3) dos formas [de entre otras posibes] de agilizar el llenado del control [lista o combo] es +/- como sigue:

op1: rellenando con los valores:
With Worksheets("entrenamientos")
Cmbtrainings.List = _
.Range(.[a2], .[a2].End(xlDown)).Offset(, 1).Resize(, 2).Value
End With

op2: asignando el rango [y dando utilidad a los 'ColumnHeads' que estaran en la fila 'anterior' del rango]
With Worksheets("entrenamientos")
Cmbtrainings.RowSource = .Name & "!" & _
.Range(.[a2], .[a2].End(xlDown)).Offset(, 1).Resize(, 2).Address
End With

saludos,
hector.

__ el codigo expuesto __
Private Sub load_certifications()
Dim i As Integer
Cmbtrainings.ColumnCount = 2
Cmbtrainings.ColumnHeads = True
Sheets("Entrenamientos").Range("a2").Activate
i=2
Do Until range("A" & i).Value = ""
With Cmbtrainings
.AddItem
.List(i-2, 0) = CStr(range("A"&i).Offset(, 1).Value)
.List(i-2, 1) = CStr(range("A"&i).Offset(, 2).Value)
End With
i = i + 1
Loop
End Sub
Respuesta Responder a este mensaje
#10 Juan M
04/12/2006 - 08:43 | Informe spam
Gracias por las explicaciones Hector Miguel.

Un saludo,
Juan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida