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

    • Saludos Estimados, tengo una función que al imprimir me guarda información y datos de algunas celdas de un formulario abierto, en un archivo (dato2.txt), este archivo contiene mucha información que se ha almacenado desde hace mucho tiempo, este archivo de texto es abierto de vez en cuando para verificar la información allí guardada, pero en algunas ocasiones se ha visto modificado por las personas que lo abren, por lo que se me ocurre generar uno nuevo con la misma información, es decir tener dos archivos idénticos pero que la información se cargue idéntica, no hago copia y paste del archivo ya creado porque aunque la información guardada esta guardada, necesito el otro de respaldo, o si me dan otra idea de como crear este doble respaldo estaré gustoso de aceptar sus opiniones. adjunto las instrucciones que me generan el respaldo permanente Private Sub Workbook_BeforePrint(Cancel As Boolean)Dim Archivotxt As StringSet fs = CreateObject("Scripting.FileSystemObject")Archivotxt = "C:\Varios Excel\dato2.txt" '<---Ruta y nombre del Txt  creadoIf Len(Dir(Archivotxt)) = 0 ThenSet a = fs.CreateTextFile(Archivotxt, True)a.CloseEnd IfSet a = fs.OpenTextFile(Archivotxt, 😎texto = Range("T17").Value & " ; " & ActiveWorkbook.Name & " ; " & ActiveSheet.Name & " ; " & Range("f15").Value & " ; " & Format(Range("F17").Value, "dd/mm/yyyy") & " ; " & Format(Range("j17").Value, "h:mm:ss AM/PM")a.WriteLine (texto) '<-----celda que se escribe en el Txt, se escribe en un renglon del txta.CloseSet fs = NothingSet Archivo = Nothing    gracias de antemano  
    • Expertos saludos a todo de esta comunidad informática, mi duda es que no logro ubicar si fuera un error o desbordamientos de código, lo que pasa es que me funciona muy bien la macro realizar los reportes por cada alumno, el detalle es que cuando en algunos reportes los criterio evaluación no coinciden cada criterio no lo esta tomando bien  para sacar el total, tengo mas de 30 alumnos por cada archivo, me tomado el afán de revisar cada reporte en algunos reportes del alumno lo cuadra muy bien la sumatoria pero en algunos reportes no los toma bien el total sale mas a en otros casos menos  no lo generando la sumatoria de acuerdo a los criterios eso es el único detalle que me sale en mi registro de correspondencia....Adjunto el archivo por favor. muchas gracias a la comunidad.      Rubricas 1 A 1 Primaria V2.xlsm
    • Checa el archivo   Saludos, Copia de PonerContraseñaBoton.xlsm
    • ¡Hola a todos! @Cristian 1985:  Debes tener en cuenta que en la función INDICE, el argumento 0 hace que la función devuelva TODOS los valores de la columna a analizar (puedes probar con una función en modo edición, y presionar F9 para que lo constates). @victorjavega:  Cristian si escribió bien mi nombre (eso hizo que me fijara en el tema).  Tu llamaste a un "tocayo"... 😂 Para la propuesta, no necesitas ningún tipo de macros.  Simplemente un control de formulario (control número), vinculado con la celda donde está el mes. Mejoré la fórmula que tenías en la selección del mes, además de la fórmula original, donde combino INDICE - COINCIDIR - INDICE.  Revisa el adjunto.  ¡Bendiciones! Calendario_aulas.xlsx
    • Gracias por millones Toni, muy amable.
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy