ListBox falla cuando hay un solo registro

06/05/2006 - 21:29 por Fabian | Informe spam
Hola a todos, este codigo lo perfecciono Hector.
Con el uso diario descubri que cuando encuentra un solo registro falla el
ListBox en la linea: ListBox1.List = .CurrentRegion.Value
error 381 No se puede configurar la propiedad list. Indice de matriz
de propiedades no valido.
Como puedo solucionar esto? gracias.
Tambien poner en blanco el listbox si no encuentra registros.
Yo le habia agregado un goto salida y en la salida, listbox.clear, porque
creia que solo fallaba cuando no encontraba registros.
Saludos Gracias.

Private Sub TextBox1_Change()
Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Letras As String
Dim Ruta As String

Ruta = ThisWorkbook.Path
Letras = TextBox1
If Len(TextBox1.Text) > 8 Then Exit Sub
Letras = Replace(Letras, "'", "''")

Set Cnn = New ADODB.Connection
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\BaseViajes.mdb"
.Open
End With
Set Rst = New ADODB.Recordset
Rst.Open "SELECT DISTINCT Titular FROM Viajes WHERE Titular " & _
"LIKE '" & Letras & "%' ORDER BY Titular", Cnn, , , adCmdText

With Hoja12.[a1]
.CopyFromRecordset Rst
ListBox1.List = .CurrentRegion.Value
.CurrentRegion.Clear
End With

Rst.Close: Set Rst = Nothing
Cnn.Close: Set Cnn = Nothing
End Sub
 

Leer las respuestas

#1 Héctor Miguel
07/05/2006 - 19:35 | Informe spam
hola, Fabian !

El codename en esta linea, por si hay algun cambio en el nombre de la hoja
cuando hago pruebas le saco los "on error"... va la linea en cuestion.
ListBox1.List = Worksheets("hoja2").Range(Rango).Value



como no corriste las pruebas 'segun eran mis preguntas'...
1) en que 'caso/s' es que no logras que trabaje el codename ?
- cuando se obtiene un solo registro ?
- cuando NO existen registros ?
- o... en cualquiera de los casos ?
2) has intentado con las modificaciones propuestas ?

corri pruebas [obviamente con 'criterios' y bases de datos diferentes] :)) y [efectivamente]...
-> el codigo falla SIEMPRE que el recordset NO 'consige' devolver una matriz de DOS O MAS elementos :-(
con lo cual, el control de lista NO puede [ni encuentra] 'como' llenarse con la propiedad .List = matriz :-((

para 'resolver' esta situacion, y dado que el listbox se 'actualiza/refresca/...' constantemente y 'en tiempo real'...
-> sustituye las lineas con el With <codename_hoja> ... End With a lo siguiente:

' luego de abrir el recordset con la instruccion: Rst.Open "SELECT DISTINCT Titular FROM ... etc. etc. etc.]...
ListBox1.Clear ' el control lista se vacia 'invariablemente' '
With Hoja12.[a1]
.CopyFromRecordset Rst
If .CurrentRegion.Count > 1 _
Then ListBox1.List = .CurrentRegion.Value _
Else ListBox1.AddItem .Value
.CurrentRegion.Clear
End With

[incluso] si quieres 'evitar conflictos' por -posibles- cambios de nombre en 'esa' hoja...
-> puedes 'mantenerla' OCULTA [usando la propiedad .Visible = xlSheetVeryHidden] ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Preguntas similares