Foro VBATotal

Aprender a programar en Visual Basic

Por favor, o Regístrate para crear mensajes y debates.

FLUJO CONSTRUCCION DE FLUJO DE CAJA MEDIANTE VBA EXCEL Y ACCESS

estimados buenas tardes.

Agradezco al administrador por permitirme ser parte de este excelente foro, soy aficionado en la programación de vba Excel y gracias a grupos como este e venido aprendiendo cada día más,

En esta oportunidad les escribo porque tengo problemas al construir un flujo de caja, en Excel, pero los estados de cuentas del banco están alojados en Access, del cual necesito obtener datos de los ingresos y gastos que se generan del día a día y cuyos valores sean enviados a Excel y cada vez que hay una actualización en la base de datos Access también se actualice el flujo de caja de Excel, este es el código que estoy usando para poder registrar todo lo que son ingreos,

Sub ConstruirFlujoIngresos()
Dim miConsulta As Object
Set miConsulta = CreateObject("ADODB.Recordset")
Dim strConexion As String
Dim strSQL As String
Dim fecha As Date
Dim tipoPago As String
Dim totalIngresos As Double
Dim celdaFecha As Range
Dim celdaTipoPago As Range

totalIngresos = 0

Call ConexionACCESS ' Hace la conexión de Access con Excel

' Recorre las fechas en la fila 3 de Excel (desde la columna 3 hasta la última columna con datos)
For Each celdaFecha In Hoja1.Range(Hoja1.Cells(3, 3), Hoja1.Cells(3, Hoja1.Cells(3, Hoja1.Columns.Count).End(xlToLeft).Column))
If IsDate(celdaFecha.Value) Then
fecha = celdaFecha.Value ' Obtiene la fecha a buscar

' Recorre los tipos de pago en la columna 2 de Excel (desde la fila 6 hasta la última fila con datos)

For Each celdaTipoPago In Hoja1.Range(Hoja1.Cells(6, 2), Hoja1.Cells(Hoja1.Cells(Rows.Count, 2).End(xlUp).Row, 2))
tipoPago = celdaTipoPago.Value ' Obtiene el tipo de pago a buscar

' Construye la consulta SQL para buscar coincidencias en Access
strSQL = "SELECT INGRESOS FROM BBVA_SOLES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM BBVA_DOLARES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM BCP_SOLES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM BCP_DOLARES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM CAJA_HUANCAYO WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM INTERBANK_SOLES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM INTERBANK_DOLARES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM PICHINCHA_SOLES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM PICHINCHA_DOLARES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM SCOTIABANK_SOLES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' " & _
"UNION ALL SELECT INGRESOS FROM SCOTIABANK_DOLARES WHERE FECHA = #" & Format(fecha, "yyyy-mm-dd") & _
"# AND TIPO_DE_PAGO = '" & tipoPago & "' "

' Ejecuta la consulta y obtiene la suma de los ingresos encontrados
miConsulta.Open strSQL, miConeccion
Do While Not miConsulta.EOF
totalIngresos = totalIngresos + CDbl(miConsulta.Fields(0).Value)
miConsulta.MoveNext
Loop
miConsulta.Close

' Guarda el resultado en la hoja de Excel
celdaTipoPago.Offset(0, celdaFecha.Column - 2).Value = totalIngresos

' Reinicia la variable para la siguiente iteración
totalIngresos = 0
Next celdaTipoPago
End If
Next celdaFecha

' Cierra la conexión a la base de datos Access
Call DesconexionACCESS

End Sub

pero al ejecutar la macro se demora una eternidad en trasladar los datos en las celdas correspondientes, y si ahí le cargo parque realice la misma función para los egresos prácticamente va ser una eternidad más todavía,
lo que intento hacer con esta macro es que obtenga datos de los distintos estados de cuenta que tengo en la base de datos de Access, cada estado de cuenta está alojado en una tabla diferente, donde con la macro hago validaciones si las fechas que están la fila3 de la hoja 1 a partir de la columna 3 si son iguales con la columna FECHAS de la bd de Access de los distintos estados de cuenta, de igual manera si los valores alojados en la columna 2 de la hoja 1 a partir de la fila 6 son iguales a la columna TIPO_DE_PAGO de todos los estados de cuenta entonces que me sume entonces que me sume los valores de INGRESOS realice el registro a partir de la columna 3 fila 6 hasta la fila 13, los valores de EGRESOS realice el registro a partir de la columna 3 fila 14 en adelante, hasta la fila 43 de la hoja 1, muy aparte a ellos los valores de ingresos como de egresos que pertenecen a estados eh cuenta dólares, se multiplique por el valor de la fila 3 de la hoja 1 de Excel ese valor se sume al resto de los resultados, esa suma recién se registre en la hoja flujo de caja.
adjunto el archivo.
desde ya agradezco su apoyo en este complejo proyecto.
saludos.

 

 

 

Archivos subidos:
  • Tienes que conectarte para acceder a las subidas.

Hola Inocente,

La primera mejora que veo para tu programa es estructural.

Creo que no es buena idea crear una tabla por cada sucursal para el uso que vas a darle a la bbdd. Quizá sería mucho más rápido y accesible crear una única tabla con la id de la sucursal, la fecha del movimiento, etc.. Tal y como lo tienes planteado, es normal que se eternice cualquier consulta.

Dale una vuelta a lo que te digo, creo que sería una muy buena opción para mejorar la tranferencia de info entre Access y Excel.

Saludos.

Por favor, si te he ayudado, haz clic en algún banner publicitario. Es una gran manera de ayudarme. También puedes realizar una donación en Paypal por la cantidad que desees https://paypal.me/vbatotal

Contacto