none
Desconcertante Duda en Query Select con VBA en Excel RRS feed

  • Pregunta

  • Buen día, estoy intentando usar desde un formulario en Excel, el código que copio más abajo.

    Cuando lo ejecuto la primera vez, funciona perfecto, pero a partir de la segunda ya no da ningún resultado (tampoco da error).
    Al inspeccionarlo me doy cuenta que la segunda vez, al abrir el Recordset, automáticamente le pone la propiedad EOF en True.
    No sé como hacer para evitar eso.
    Sé que luego de CopyFromRecordset, el EOF se pone en verdadero, pero suponía que al cerrar el Recordset, esto quedaba sin efecto.

    Pienso que tal vez quede colgado algo en la memoria del Excel, porque si cierro el Excel (no solo mi archivo, sin todo el Excel), y lo vuelvo a abrir, vuelve a funcionar, pero solo una vez, y ya queda el EOF en True, y no vuelve a funcionar.

    Para comprobar donde puede estar el error, hago que en cada ejecución me vaya mostrando las variables (vNombre), la cadena de conexión (Cnn), la sentencia Select (Sql) y el valor del EOF. Y lo único que cambia es esto último (EOF, pasa a true a partir de la primera ejecución).
    Además hice una copia del siguiente código, cambiando los nombres de Recordset, la conexión, y la variable, y tampoco funciona.

    Al ejecutar Excel recién abierto funciona la primera vez con cualquier Conexión/Recordset, pero la segunda ya no anda, y no lo hace hasta reiniciar Excel.

    También probé mover al primer registro antes del IF, pero ahí me da el error de que el valo BOF o EOF es True (el EOF lo es).

    Como dato anexo cuento que uso la Referencia Microsoft ADO 2.1

    Estoy sinceramente desconcertado.

    Pongo esta consulta en este foro, porque en el de Excel y el General no encontré no encontré la solución.


    Agradecería cualquier ayuda.
    Muchas gracias de antemano.
    Saludos a todos
    Pablo

    Va el código:

    Worksheets("CLIEMH").Range("Z1:AZ3000").Clear

    vNombre = TextBox1
       
    Sql = "SELECT NROCTA, NOMBRE, DIRECC FROM [CLIEMH$E9:T2000] WHERE NOMBRE LIKE '%" & _
        vNombre & _
        "%' order by NOMBRE"

    Set Cnn = New ADODB.Connection
    With Cnn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & ActiveSheet.Parent.FullName
        .Properties("Extended Properties").Value = "Excel 8.0;HDR=Yes"
        .Open
    End With
       
    Set Rs = New ADODB.Recordset
     
    Rs.CursorLocation = adUseClient
    Rs.Open Sql, Cnn
       
    If not(Rs.EOF and Rs.BOF) = False Then
        Worksheets("CLIEMH").Range("AA3:AA" & Rs.RecordCount + 3).CopyFromRecordset Rs
    End If
     
       
    Rs.Close
    Set Rs = Nothing
       
    Cnn.Close
    Set Cnn = Nothing

    jueves, 12 de agosto de 2010 10:37