Error al Identificar la fila (Row) en la función Cells tomando el valor desde un ComboBox

12/07/2007 - 00:35 por Contaduria | Informe spam
Hola Gente del Foro:

En un Userform tengo un ComboBox de 2 columnas, al cual le incorporo los
datos con el siguiente código:

Private Sub UserForm_Activate()

Dim cXelda As Range
Dim i As Long
i = 0

ComboBox1.Clear

With ActiveSheet
For Each cXelda In .Range("f4:f" & .[F65536].End(xlUp).Row)
If cXelda.Offset(0, 1) = "NO EN" Then
With ComboBox1
.AddItem Format(cXelda, "#,##00.00")
.List(i, 1) = cXelda.Row
End With
i = i + 1
End If
Next
End With

End Sub

El BoundColumn esta parametrizado como 2, por lo que el valor que toma
ComboBox1 es el número de fila del registro (cXelda.Row). Ahora, cuando yo
selecciono un item del ComboBox1 quiero que se muestren ciertos datos del
registro en unas Label, lo cual pretendo hacer con un código como este:

Private Sub ComboBox1_Change()

Dim X As Integer
X = ComboBox1.Value

Label7 = Format(ActiveSheet.Cells(X, 6).Value, "#,#00.00")
Label5.Caption = Format(ActiveSheet.Cells(X, 5), "dd/mm/yyyy")
Label6 = ActiveSheet.Cells(X, 7).Value

End Sub

Pero, luego de intentar con varias variantes, no logro que funcione de
ninguna manera, ya que siempre me da un error en las lineas donde esta la
función Cells, ya que no reconoce el valor de la variable como un valor
válido para ubicar el número de fila. No entiendo porque, porque el valor
del ComboBox1 es simplemente el número de fila. Probé varias cosas, como
poner directamente en la función Cells ComboBox1, ComboBox1.Value,
Val(ComboBox1), etc, etc, pero nada parece funcionar.
Que estoy haciendo mal??
Desde ya muchas gracias!

Mariano

Preguntas similare

Leer las respuestas

#1 Ivan
12/07/2007 - 02:22 | Informe spam
hola Mariano,

no estoy seguro, pero, a la espera de quien te 'guio' en el codigo o
de cualquier otro experto, prueba a poner el textcolumn del combo a 2
(y por supuesto convierte a valor el texto del combo, como comentas
Val(combobox1))

a ver si hay suete
un saludo
Ivan

PD:(y solo a titulo informativo) si no me equivoco, Cells no es una
funcion, sino una propiedad del conjunto Range que lo que hace es
devolver otro objeto Range. Como te digo, es solo a titulo
informativo, que creo que (al menos a mi ) nunca viene mal.
Respuesta Responder a este mensaje
#2 Ivan
12/07/2007 - 02:54 | Informe spam
hola de nuevo,

disculpame Mariano, pero, como siempre, he hablado antes de la cuenta
(y de probarlo).al decir esto =>>

prueba a poner el textcolumn del combo a 2





si cambias la propiedad textcolumn, lo que te aparecera en el combo es
la propia fila (que evidentemente no parece que sea lo que deseas). De
todas formas, si tienes asignado el boundcolumn en 2 y haces la
conversion a valor, no eo por que no te funciona.

pej. a mi este idem me funciona bien (para un userform con un combo y
dos commandbutton)

' una opcion
Private Sub CommandButton1_Click()
Cells(Val(ComboBox1.List(ComboBox1.ListIndex, 1)),
1).Interior.ColorIndex = 5
End Sub

' otra opcion
Private Sub CommandButton2_Click()
Cells(Val(ComboBox1.Value), 1).Interior.ColorIndex = 5
End Sub

Private Sub UserForm_Initialize()
Dim n As Byte
With ComboBox1
.TextColumn = 1
.BoundColumn = 2
For n = 1 To 15
.AddItem "Fila " & n
.List(n - 1, 1) = n
Next
End With
End Sub

mira a ver si te ayuda, y disculpa la precipitacion

un saludo
Ivan
Respuesta Responder a este mensaje
#3 Contaduria
13/07/2007 - 00:08 | Informe spam
Hola Ivan:

Gracias por tu ayuda. Me sirvió de mucho, ya que el problema se ha resuelto
al usar una de tus propuestas. Al final, el código que funciona me quedo
así:

Private Sub ComboBox1_Change()

Label7 = Format(ActiveSheet.Cells(Val(ComboBox1.List(ComboBox1.ListIndex,
1)), 6).Value, "#,#00.00")
Label5 = Format(ActiveSheet.Cells(Val(ComboBox1.List(ComboBox1.ListIndex,
1)), 5).Value, "dd/mm/yyyy")
Label6 = Cells(Val(ComboBox1.List(ComboBox1.ListIndex, 1)), 7)
TextBox1 = Empty
TextBox1 = ActiveSheet.Cells(Val(ComboBox1.List(ComboBox1.ListIndex, 1)),
2).Value

End Sub

Sin embargo te cuento lo que me pasó: Probé las 2 opciones que me
propusiste, incluso yo ya habia probado antes con Val(ComboBox1.Value), pero
aun así no funcionaba ninguna! Como en otro libro y en otro UserForm tus
códigos si funcionaban concluí que el problema no podía ser el código, sino
que debía ser algo de los parámetros del ComboBox1. En efecto, comenzé a
revisar una por una las propiedades hasta que descubrí que el problema
estaba en el BoundColumn y ColumnCount, ya que yo había cambiado esos
valores a 2 al crear el ComboBox1. Cuando los volví a poner en 1, el código
que esta expuesto arriba funcionó perfectamente. Todavía no entiendo bien
porque, ya que el BoundColumn estaba correcto que fuera 2 (porque yo queria
que tomara el valor de la fila del registro, que es la segunda columna) y
también era correcto que el ColumnCount fuera 2 ya que el ComboBox de hecho
tiene 2 columnas. Es más, nunca tiró ningun error con el código de
activación:

Private Sub UserForm_Activate()

Dim cXelda As Range
Dim i As Long
i = 0

ComboBox1.Clear

With ActiveSheet
For Each cXelda In .Range("f4:f" & .[F65536].End(xlUp).Row)
If cXelda.Offset(0, 1) = "NO EN" Then
With ComboBox1
.AddItem Format(cXelda, "#,##00.00")
.List(i, 1) = cXelda.Row
End With
i = i + 1
End If
Next
End With

End Sub

Por último, yo había probado que valor era el que asumia el ComboBox1 al
probarlo con variables (pasando el contenido del combo como Integer, etc) y
con varios códigos como este:
WorkSheets("Prueba").Range("A1") = ComboBox1.Value
Con lo cual comprobaba que el valor que ponia en la celda era efectivamente
el de la fila (y que efectivamente era un valor!) Por lo tanto estaba bien
configurado el BoundColumn como 2 y el ColumnCount como 2. Y aun así cuando
lo aplicaba a la propiedad Cells decía que no era un valor??
Y ahora funciona con el código Val(ComboBox1.List(ComboBox1.ListIndex, 1)),
pero solo si se pone el BoundColumn como 1 y el ColumnCount como 1, (ya que
la propiedad Cells así lo reconoce como valor de fila).
Extraño, verdad? Yo todavía no entiendo porque.
Bueno, pero gracias a Dios ya se solucionó el probelma!! Y muchas gracias a
vos también Ivan!!
Saludos!!

Mariano


"Ivan" escribió en el mensaje
news:
hola de nuevo,

disculpame Mariano, pero, como siempre, he hablado antes de la cuenta
(y de probarlo).al decir esto =>>

>> prueba a poner el textcolumn del combo a 2

si cambias la propiedad textcolumn, lo que te aparecera en el combo es
la propia fila (que evidentemente no parece que sea lo que deseas). De
todas formas, si tienes asignado el boundcolumn en 2 y haces la
conversion a valor, no eo por que no te funciona.

pej. a mi este idem me funciona bien (para un userform con un combo y
dos commandbutton)

' una opcion
Private Sub CommandButton1_Click()
Cells(Val(ComboBox1.List(ComboBox1.ListIndex, 1)),
1).Interior.ColorIndex = 5
End Sub

' otra opcion
Private Sub CommandButton2_Click()
Cells(Val(ComboBox1.Value), 1).Interior.ColorIndex = 5
End Sub

Private Sub UserForm_Initialize()
Dim n As Byte
With ComboBox1
.TextColumn = 1
.BoundColumn = 2
For n = 1 To 15
.AddItem "Fila " & n
.List(n - 1, 1) = n
Next
End With
End Sub

mira a ver si te ayuda, y disculpa la precipitacion

un saludo
Ivan

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida