Jump to content

Recorrer dos mas recordset con un solo do while


Go to solution Solved by AlexanderS,

Recommended Posts

Necesito enviar  al libro2 hoja banco a través de una consulta sql todos los pagos de los meses de enero a marzo mayores a 0 de la tabla Rel de igual forma a libro2 hoja pagos de la tabla Pagos de los meses enero a marzo los impuestos mayores a 0

Como hago para consultar las tablas y moverme los los recordset con un solo do while y no repetir el do wile por cada consulta que haga. Gracias de antemano.

'Conexion
sqL = Select fecha, pagado, debe from [Rel] where beetwin fecha #1/1/2020# and #31/3/2020#  and debe >0 orden por fecha

'Abrir sql

'Para Hoja Banco
With Libro.Hoja
Uf = .Range("A1000").End(xlUp).Row + 1
Z = 0

Do while Rst.eof
    .Cells(Uf + Z, "A") = Rst("FECHA")
    .Cells(Uf + Z, "b") = Rst("PAGADO")
    .Cells(Uf + Z, "e") = Rst("DEBE")
    Rst.MoveNext
        Z = Z + 1
loop
end with

sqL = Select fecha, pagado, impuesto from [Pagos] where beetwin fecha #1/1/2020# and #31/3/2020#  and impuesto >0 orden por fecha
'Abrir sql

'Para Hoja Pago
With Libro.Hoja
Uf = .Range("A1000").End(xlUp).Row + 1
Z = 0

Do while Rst.eof
    .Cells(Uf + Z, "A") = Rst("FECHA")
    .Cells(Uf + Z, "B") = Rst("PAGADO")
    .Cells(Uf + Z, "F") = Rst("IMPUESTO")
    Rst.MoveNext
        Z = Z + 1
loop
end with

Libros.rar

Link to post
Share on other sites

Hola  AlexanderSgracias por responder, la dificultad con esa instrucción es que pega los datos en columnas contiguas y lo que necesito es que se copien el ciertas columnas por ejemplo, del Recordset la columas FECHA va en la Columna A, PAGADO  en la columnas B, pero el DEBE van en la columna F y alguna veces en la columna G. Gracias por anticipado.

Range("A2").CopyFromRecordset Rst
Link to post
Share on other sites
  • Solution

@RadioViraje73, correcto la instrucción copiara los datos en columnas contiguas, entonces tienes algunas opciones: 1 utilizar un ciclo while para leer cada columna de tu tabla individualmente o 2 realizar una consulta a por cada columna para poder utilizar el .CopyFromRecordset, algo como esto:

Columnas = Array("FECHA", "PAGADO", "DEBE")

For Each param In Columnas

Sql = Replace("SELECT ? FROM [Datos$] where (FECHA BETWEEN #1/1/2020# and #31/3/2020#) and DEBE >0", "?", param)

Rst.Open Sql, cn, 3, 3

Select Case param
Case Is = "FECHA": Sheets("Resultado").Range("A2").CopyFromRecordset Rst
Case Is = "PAGADO": Sheets("Resultado").Range("B2").CopyFromRecordset Rst
Case Is = "DEBE": Sheets("Resultado").Range("F2").CopyFromRecordset Rst

End Select
Rst.Close
Next

Adjunto un pequeño ejemplo, en mi caso la tabla esta en el mismo libro.

Obviamente es mas rápido utilizar un ciclo para leer 3 columnas que uno para leer X cantidad de filas. 

Comentas, saludos. 

Ejem SQL.xlsm

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • Hola a tod@s. Me adelanto dando las gracias por su tiempo en ayudarme en mi caso. Tengo una macro que extrae información de la página web de venta de autos el problema está en extraer ciertos secciones por ejemplo: details, features y specifications. <div class="tab-content" id="sections-contents"> <div class="tab-pane fade" id="details" role="tabpanel" aria-labelledby="details-tab" data-webm-section="features-tab-details"> <div class="tab-pane fade" id="features" role="tabpanel" aria-labelledby="features-tab" data-webm-section="features-tab-features"> <div class="tab-pane fade" id="specifications" role="tabpanel" aria-labelledby="specifications-tab" data-webm-section="features-tab-specifications"> La sección ¨details¨ a su vez se desglosa en varios items y estos a su vez en otros Por ejemplo Items de "details": <div class="row features-item features-item-vehculo"> <div class="row features-item features-item-precio"> <div class="row features-item features-item-kilmetros"> Por ahora necesito extraer toda la sección  <div class="tab-pane fade" id="details" role="tabpanel" aria-labelledby="details-tab" data-webm-section="features-tab-details"> He intentado lo siguiente: '----Detalles Set htmlims = htmldoc.getElementsByClassName("tab-pane fade") For Each htmlim In htmlims Sheets("Hoja1").Cells(fila, 7).Value = htmlim.innerText Next htmlim El cual funciona bien solo que después pasa a extraer la sección de: <div class="tab-pane fade" id="features" role="tabpanel" aria-labelledby="features-tab" data-webm-section="features-tab-features"> Temporalmente lo he solucionado agregando la siguiente línea antes del Next:           If fila = fila Then Exit For       Next htmlim Sin embargo, en la página web ciertos autos no tienen las tres secciones antes mencionadas en ocasiones solo tienen uno o dos secciones.  Intentando escribir htmlim.getElementsByTagName("details")innerText u otros intentos me aparecen mensajes de errores. Espero haberme hecho entender. Saludos    
    • YO uso el office prof 2016 y maximo me permite 7 u 8;tengo q hacer otra consulta que aun ni se como hacer pero no se si corresponde o debo abrir otro tema?(es en la misma planilla y es para que tome/sume 2 datos de un mismo numero cuando refuerzan un anticipo,abro otra consulta??)
    • 1) No debería tardar mucho más que una función normal, el problema surgiría si la hicieras volátil para que recalcule automáticamente ante cada modificación en el archivo; eso sí que la haría lenta. 2) Según Microsoft se "puede anidar hasta 64 niveles de funciones en una fórmula" pero yo no pude hacerlo, seguramente el límite depende de la versión de Excel que tengas.
    • ok Cristian,con el boton ya funciona la actualizacion;preguntas 1)al cargar mas el  archivo eso no afectara en el tiempo de actualizacion?(no se hara muy pesado y tardar a mucho? 2)si lo hago con si.error como estaba antes,tengo el limite de anidar solo 7 verdad?GraCIAS
    • Revisa el adjunto, agregué un botón que debes presionar cada vez que quieras actualizar la UDF, otras opciones serían volver volátil la UDF o forzar la actualización de las celdas siempre, pero esto impactaría en el rendimiento de tu archivo. Fuente: https://www.enmimaquinafunciona.com/pregunta/135313/formula-personalizada-no-actualizacion Si te sirvieron mis respuestas por favor dale click al corazón de abajo a la derecha de los mensajes ;) caja 2020 ok original2-1.xls
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy