
ayuda con error de compilacion Loop sin Do
Publicado por Miguel (4 intervenciones) el 29/01/2024 05:14:13
Estimados, necesito ayuda en esta sub de access que hace 2 dias no encuentro el error que me da de compilacion Loop sin Do. He revisado que todos los If esten cerrados y no encuentro causa. agracezco su ayuda
Option Compare Database
Dim loteActualizarQuery As DAO.Recordset
Dim cuotaRetroactivo As DAO.Recordset
Dim refQuery As DAO.Recordset
Dim cuotaAplicacion As DAO.Recordset
Dim cuotascount As Integer
Dim valorCuotaReferencia As Variant
Dim totalCuotaReferencia As Variant
Dim nuevoTotal As Variant
Dim nuevoNeto As Variant
Dim tomoPrimerValorReferencia As Boolean
Dim numeroLote As Integer
Dim mensaje As String
' Variable para almacenar el mes y año de referencia
Dim mesReferenciaEncontrado As Boolean
' Variable para controlar si se mostró el mensaje de información
Dim mostradoMensaje As Boolean
' Obtener el mes y año del retroactivo desde la TextBox
Dim mesRetroactivo As Integer
Dim añoRetroactivo As Integer
Dim porcentajeRetroactivo As Double
Dim fechaRetroactivo As Date
Dim mesMasNuevo As Date
Private Sub btnActualizacionConRetroactivo_Click()
Dim db As DAO.Database
' Intenta convertir el valor del control a una fecha
If IsDate(txtmes_retroactivo.Value) Then
fechaRetroactivo = CDate(txtmes_retroactivo.Value)
' Extrae el mes y el año de la fecha
mesRetroactivo = Month(fechaRetroactivo)
añoRetroactivo = Year(fechaRetroactivo)
Else
mesRetroactivo = 0
añoRetroactivo = 0
End If
' Obtener el porcentaje del mes retroactivo desde la TextBox
txtPorcentajeRetroactivo.SetFocus
If Trim(txtPorcentajeRetroactivo.Text) <> "" Then
porcentajeRetroactivo = CDbl(Trim(txtPorcentajeRetroactivo.Text))
Else
porcentajeRetroactivo = 0
End If
' Verificar que las cajas de texto tengan datos
ind_incremento.SetFocus
If Trim(ind_incremento.Text) = "" Then
MsgBox "INDICE A INCREMENTAR está vacío"
Exit Sub
End If
txtmesyaño_aplicacion.SetFocus
If Trim(txtmesyaño_aplicacion.Text) = "" Then
MsgBox "MES DE APLICACIÓN está vacío"
Exit Sub
End If
txtmesyaño_referencia.SetFocus
If Trim(txtmesyaño_referencia.Text) = "" Then
MsgBox "MES DE REFERENCIA está vacío"
Exit Sub
End If
' Verificar que la fecha de referencia sea anterior a la fecha de aplicación
If CDate(Me.txtmesyaño_referencia.Value) >= CDate(Me.txtmesyaño_aplicacion.Value) Then
MsgBox "La fecha de referencia debe ser anterior a la fecha de aplicación."
Exit Sub
End If
' Preguntar al usuario si confirma Actualizar o SALE
Dim confirma As VbMsgBoxResult
Dim mensajeConfirmacion As String
mensajeConfirmacion = "ESTA OPERACION NO PODRA DESHACERSE" & vbCrLf & _
"" & vbCrLf & _
"ESTA SEGURO DE ACTUALIZAR" & vbCrLf
confirma = MsgBox(mensajeConfirmacion, vbYesNo + vbExclamation, "Confirmacion")
If confirma = vbNo Then
DoCmd.Close acForm, "Actualizacion"
DoCmd.OpenForm "VentanaOpciones"
Exit Sub ' Salir de la subrutina
End If
' Preguntar al usuario si desea ver las actualizaciones una a una
Dim verUnaAAUna As VbMsgBoxResult
verUnaAAUna = MsgBox("¿DESEA VER LOS VALORES DE CADA ACTUALIZACION UNO A UNO?", vbYesNo + vbQuestion, "Mostrar Actualizaciones")
' Realizar la consulta para obtener los registros que cumplen con las condiciones
Set loteActualizarQuery = db.OpenRecordset("SELECT * FROM Cuotas ORDER BY num_lote ASC, num_cuo ASC")
' Recorrer los registros y aplicar las modificaciones necesarias
Do While Not loteActualizarQuery.EOF
' Puntero del mouse Reloj de arena
DoCmd.Hourglass True
' Obtener los valores total_cuota y valor_cuota del mes retroactivo
Set cuotaRetroactivo = db.OpenRecordset("SELECT total_cuota, valor_cuota FROM Cuotas WHERE num_lote = " & loteActualizarQuery!num_lote & " AND Format(fe_pago, 'mm/yyyy') = '" & Format(CDate(txtmes_retroactivo.Value), "mm/yyyy") & "'")
If Not cuotaRetroactivo.EOF Then
totalCuotaRetroactivo = cuotaRetroactivo!total_cuota
valorCuotaRetroactivo = cuotaRetroactivo!valor_cuota
Else
totalCuotaRetroactivo = 0
valorCuotaRetroactivo = 0
End If
' Cerrar el recordset de cuotaRetroactivo
cuotaRetroactivo.Close
Set cuotaRetroactivo = Nothing
' Verificar si es el primer registro del lote y tomar los valores de referencia
If (numeroLote <> loteActualizarQuery!num_lote) Then
tomoPrimerValorReferencia = False
mostradoMensaje = False
End If
' Obtener los valores de referencia si es el primer registro del lote
If (tomoPrimerValorReferencia = False) Then
' Verificar si existe un registro en el mes y año de referencia y si es cuota 1 o mayor
Set refQuery = db.OpenRecordset("SELECT * FROM Cuotas WHERE num_lote = " & loteActualizarQuery!num_lote & " AND Format(fe_venci, 'mm/yyyy') = '" & Format(CDate(txtmesyaño_referencia.Value), "mm/yyyy") & "'")
' Si encuentra cuota = 1 o mayor
If Not refQuery.EOF Then
' Tomar los valores de referencia del registro con num_cuo = 1 o mayor
valorCuotaReferencia = refQuery!valor_cuota
totalCuotaReferencia = refQuery!total_cuota
tomoPrimerValorReferencia = True
mesReferenciaEncontrado = True
Else
' Si no se encuentra un registro con num_cuo = 1 o mayor, buscar los registros posteriores al mes y año de referencia
Set refQuery = db.OpenRecordset("SELECT TOP 1 * FROM Cuotas WHERE num_lote = " & loteActualizarQuery!num_lote & " AND fe_venci > #" & Format(CDate(txtmesyaño_referencia.Value), "Short Date") & "# ORDER BY fe_venci ASC")
If Not refQuery.EOF Then
' Tomar los valores de referencia del primer registro posterior al mes y año de referencia
valorCuotaReferencia = refQuery!valor_cuota
totalCuotaReferencia = refQuery!total_cuota
tomoPrimerValorReferencia = True
mesReferenciaEncontrado = True
End If
End If
End If
' Aplicar las modificaciones solo si la fecha de vencimiento es posterior a la fecha de aplicación y fe_pago está vacío
If IsNull(loteActualizarQuery!fe_pago) And CDate(loteActualizarQuery!fe_venci) > CDate(txtmesyaño_aplicacion.Value) And CDate(loteActualizarQuery!fe_venci) > CDate(txtmesyaño_referencia.Value) Then
' Buscar el registro correspondiente al mes de aplicación
Set cuotaAplicacion = db.OpenRecordset("SELECT * FROM Cuotas WHERE num_lote = " & loteActualizarQuery!num_lote & " AND Format(fe_venci, 'mm/yyyy') = '" & Format(CDate(txtmesyaño_aplicacion.Value), "mm/yyyy") & "'")
If mesReferenciaEncontrado And Not mostradoMensaje Then
' Verificar si se muestra el mensaje de información
If verUnaAAUna = vbYes And cuotaAplicacion!num_cuo > 1 Then
mensaje = "Número de Lote: " & loteActualizarQuery!num_lote & vbCrLf & _
"Se encontró el mes de referencia" & vbCrLf & _
"Voy a modificar con los siguientes parámetros:" & vbCrLf & _
"Fecha de Referencia: " & txtmesyaño_referencia.Value & vbCrLf & _
"Número de cuota de referencia: " & refQuery!num_cuo & vbCrLf & _
"Número de cuota de Aplicación: " & loteActualizarQuery!num_cuo & vbCrLf & _
"Valor de Cuota de Referencia: " & totalCuotaReferencia & vbCrLf & _
"Valor de Cuota del Mes de Aplicación (antes de modificar): " & loteActualizarQuery!total_cuota & vbCrLf & _
"Incremento a aplicar: " & totalCuotaReferencia * ind_incremento / 100 & vbCrLf & _
"Porcentaje Retroactivo: " & porcentajeRetroactivo & vbCrLf & _
"Fecha Retroactivo: " & txtmes_retroactivo.Value & vbCrLf & _
"Valor de Cuota al mes Retroactivo: " & totalCuotaRetroactivo & vbCrLf & _
"Nuevo Valor Neto (a partir del Mes de Aplicación): " & nuevoNeto & vbCrLf & _
"Retroactivo $ = " & (totalCuotaRetroactivo * porcentajeRetroactivo / 100) & vbCrLf & _
"Nuevo Valor de Cuota (a partir del Mes de Aplicación): " & (loteActualizarQuery!total_cuota + (totalCuotaRetroactivo * porcentajeRetroactivo / 100))
MsgBox mensaje, vbInformation, "Información de Modificación"
mostradoMensaje = True
End If
If verUnaAAUna = vbYes And cuotaAplicacion!num_cuo = 1 Then
mensaje = "Número de Lote: " & loteActualizarQuery!num_lote & vbCrLf & _
"Mes de Aplicación es Cuota 1" & vbCrLf & _
"NO SE MODIFICA:" & vbCrLf
MsgBox mensaje, vbInformation, "Información de Modificación"
mostradoMensaje = True
End If
End If
' Ajustar el cálculo para el mes retroactivo
nuevoTotal = loteActualizarQuery!total_cuota + (totalCuotaReferencia * ind_incremento / 100) + (totalCuotaRetroactivo * porcentajeRetroactivo / 100)
nuevoNeto = loteActualizarQuery!valor_cuota + (valorCuotaRetroactivo * ind_incremento / 100) + (totalCuotaRetroactivo * porcentajeRetroactivo / 100)
If Not cuotaAplicacion.EOF And cuotaAplicacion!num_cuo > 1 Then
' Verificar si se ingresa el mes y el porcentaje
If Trim(mesRetroactivo) <> "" And porcentajeRetroactivo <> 0 Then
' Verificar si el mes de aplicación es el más nuevo
If txtmesyaño_aplicacion.Value = mesMasNuevo Then
' Ajustar solo los términos relacionados con la actualización
nuevoTotal = nuevoTotal + (totalCuotaReferencia * ind_incremento / 100) + (totalCuotaRetroactivo * porcentajeRetroactivo / 100)
nuevoNeto = nuevoNeto + (valorCuotaReferencia * ind_incremento / 100) + (valorCuotaRetroactivo * porcentajeRetroactivo / 100)
Else
' Ajustar solo los términos relacionados con la actualización
nuevoTotal = nuevoTotal + (totalCuotaReferencia * ind_incremento / 100)
nuevoNeto = nuevoNeto + (valorCuotaReferencia * ind_incremento / 100)
End If
Else
nuevoTotal = loteActualizarQuery!total_cuota + (totalCuotaReferencia * ind_incremento / 100)
nuevoNeto = loteActualizarQuery!valor_cuota + (valorCuotaReferencia * ind_incremento / 100)
End If
If Not cuotaAplicacion.EOF And cuotaAplicacion!num_cuo > 1 Then
' Verificar si se ingresa el mes y el porcentaje
If Trim(mesRetroactivo) <> "" And porcentajeRetroactivo <> 0 Then
' Verificar si el mes de aplicación es el más nuevo
If txtmesyaño_aplicacion.Value = mesMasNuevo Then
nuevoTotal = loteActualizarQuery!total_cuota + (totalCuotaReferencia * ind_incremento / 100) + (IIf(IsNull(cuotaAplicacion!total_cuota), 0, cuotaAplicacion!total_cuota) * porcentajeRetroactivo / 100)
End If
End If
loteActualizarQuery!total_cuota = nuevoTotal
nuevoNeto = loteActualizarQuery!valor_cuota + (valorCuotaReferencia * ind_incremento / 100)
loteActualizarQuery!valor_cuota = nuevoNeto
loteActualizarQuery!g_a_f = nuevoTotal - nuevoNeto
loteActualizarQuery.Update
End If
cuotascount = cuotascount + 1
End If
' quito reloj de arena a puntero normal
DoCmd.Hourglass False
' Actualiza el número de lote solo si cambia
numeroLote = loteActualizarQuery!num_lote
' Avanzar al siguiente registro
loteActualizarQuery.MoveNext
Loop
' Cerrar el recordset
loteActualizarQuery.Close
Set loteActualizarQuery = Nothing
refQuery.Close
Set refQuery = Nothing
cuotaAplicacion.Close
Set cuotaAplicacion = Nothing
' Mostrar mensaje de finalización
MsgBox "Proceso de actualización completado. Se actualizaron " & cuotascount & " cuotas.", vbInformation, "Proceso Completado"
DoCmd.Close acForm, "Actualizacion"
End Sub
Option Compare Database
Dim loteActualizarQuery As DAO.Recordset
Dim cuotaRetroactivo As DAO.Recordset
Dim refQuery As DAO.Recordset
Dim cuotaAplicacion As DAO.Recordset
Dim cuotascount As Integer
Dim valorCuotaReferencia As Variant
Dim totalCuotaReferencia As Variant
Dim nuevoTotal As Variant
Dim nuevoNeto As Variant
Dim tomoPrimerValorReferencia As Boolean
Dim numeroLote As Integer
Dim mensaje As String
' Variable para almacenar el mes y año de referencia
Dim mesReferenciaEncontrado As Boolean
' Variable para controlar si se mostró el mensaje de información
Dim mostradoMensaje As Boolean
' Obtener el mes y año del retroactivo desde la TextBox
Dim mesRetroactivo As Integer
Dim añoRetroactivo As Integer
Dim porcentajeRetroactivo As Double
Dim fechaRetroactivo As Date
Dim mesMasNuevo As Date
Private Sub btnActualizacionConRetroactivo_Click()
Dim db As DAO.Database
' Intenta convertir el valor del control a una fecha
If IsDate(txtmes_retroactivo.Value) Then
fechaRetroactivo = CDate(txtmes_retroactivo.Value)
' Extrae el mes y el año de la fecha
mesRetroactivo = Month(fechaRetroactivo)
añoRetroactivo = Year(fechaRetroactivo)
Else
mesRetroactivo = 0
añoRetroactivo = 0
End If
' Obtener el porcentaje del mes retroactivo desde la TextBox
txtPorcentajeRetroactivo.SetFocus
If Trim(txtPorcentajeRetroactivo.Text) <> "" Then
porcentajeRetroactivo = CDbl(Trim(txtPorcentajeRetroactivo.Text))
Else
porcentajeRetroactivo = 0
End If
' Verificar que las cajas de texto tengan datos
ind_incremento.SetFocus
If Trim(ind_incremento.Text) = "" Then
MsgBox "INDICE A INCREMENTAR está vacío"
Exit Sub
End If
txtmesyaño_aplicacion.SetFocus
If Trim(txtmesyaño_aplicacion.Text) = "" Then
MsgBox "MES DE APLICACIÓN está vacío"
Exit Sub
End If
txtmesyaño_referencia.SetFocus
If Trim(txtmesyaño_referencia.Text) = "" Then
MsgBox "MES DE REFERENCIA está vacío"
Exit Sub
End If
' Verificar que la fecha de referencia sea anterior a la fecha de aplicación
If CDate(Me.txtmesyaño_referencia.Value) >= CDate(Me.txtmesyaño_aplicacion.Value) Then
MsgBox "La fecha de referencia debe ser anterior a la fecha de aplicación."
Exit Sub
End If
' Preguntar al usuario si confirma Actualizar o SALE
Dim confirma As VbMsgBoxResult
Dim mensajeConfirmacion As String
mensajeConfirmacion = "ESTA OPERACION NO PODRA DESHACERSE" & vbCrLf & _
"" & vbCrLf & _
"ESTA SEGURO DE ACTUALIZAR" & vbCrLf
confirma = MsgBox(mensajeConfirmacion, vbYesNo + vbExclamation, "Confirmacion")
If confirma = vbNo Then
DoCmd.Close acForm, "Actualizacion"
DoCmd.OpenForm "VentanaOpciones"
Exit Sub ' Salir de la subrutina
End If
' Preguntar al usuario si desea ver las actualizaciones una a una
Dim verUnaAAUna As VbMsgBoxResult
verUnaAAUna = MsgBox("¿DESEA VER LOS VALORES DE CADA ACTUALIZACION UNO A UNO?", vbYesNo + vbQuestion, "Mostrar Actualizaciones")
' Realizar la consulta para obtener los registros que cumplen con las condiciones
Set loteActualizarQuery = db.OpenRecordset("SELECT * FROM Cuotas ORDER BY num_lote ASC, num_cuo ASC")
' Recorrer los registros y aplicar las modificaciones necesarias
Do While Not loteActualizarQuery.EOF
' Puntero del mouse Reloj de arena
DoCmd.Hourglass True
' Obtener los valores total_cuota y valor_cuota del mes retroactivo
Set cuotaRetroactivo = db.OpenRecordset("SELECT total_cuota, valor_cuota FROM Cuotas WHERE num_lote = " & loteActualizarQuery!num_lote & " AND Format(fe_pago, 'mm/yyyy') = '" & Format(CDate(txtmes_retroactivo.Value), "mm/yyyy") & "'")
If Not cuotaRetroactivo.EOF Then
totalCuotaRetroactivo = cuotaRetroactivo!total_cuota
valorCuotaRetroactivo = cuotaRetroactivo!valor_cuota
Else
totalCuotaRetroactivo = 0
valorCuotaRetroactivo = 0
End If
' Cerrar el recordset de cuotaRetroactivo
cuotaRetroactivo.Close
Set cuotaRetroactivo = Nothing
' Verificar si es el primer registro del lote y tomar los valores de referencia
If (numeroLote <> loteActualizarQuery!num_lote) Then
tomoPrimerValorReferencia = False
mostradoMensaje = False
End If
' Obtener los valores de referencia si es el primer registro del lote
If (tomoPrimerValorReferencia = False) Then
' Verificar si existe un registro en el mes y año de referencia y si es cuota 1 o mayor
Set refQuery = db.OpenRecordset("SELECT * FROM Cuotas WHERE num_lote = " & loteActualizarQuery!num_lote & " AND Format(fe_venci, 'mm/yyyy') = '" & Format(CDate(txtmesyaño_referencia.Value), "mm/yyyy") & "'")
' Si encuentra cuota = 1 o mayor
If Not refQuery.EOF Then
' Tomar los valores de referencia del registro con num_cuo = 1 o mayor
valorCuotaReferencia = refQuery!valor_cuota
totalCuotaReferencia = refQuery!total_cuota
tomoPrimerValorReferencia = True
mesReferenciaEncontrado = True
Else
' Si no se encuentra un registro con num_cuo = 1 o mayor, buscar los registros posteriores al mes y año de referencia
Set refQuery = db.OpenRecordset("SELECT TOP 1 * FROM Cuotas WHERE num_lote = " & loteActualizarQuery!num_lote & " AND fe_venci > #" & Format(CDate(txtmesyaño_referencia.Value), "Short Date") & "# ORDER BY fe_venci ASC")
If Not refQuery.EOF Then
' Tomar los valores de referencia del primer registro posterior al mes y año de referencia
valorCuotaReferencia = refQuery!valor_cuota
totalCuotaReferencia = refQuery!total_cuota
tomoPrimerValorReferencia = True
mesReferenciaEncontrado = True
End If
End If
End If
' Aplicar las modificaciones solo si la fecha de vencimiento es posterior a la fecha de aplicación y fe_pago está vacío
If IsNull(loteActualizarQuery!fe_pago) And CDate(loteActualizarQuery!fe_venci) > CDate(txtmesyaño_aplicacion.Value) And CDate(loteActualizarQuery!fe_venci) > CDate(txtmesyaño_referencia.Value) Then
' Buscar el registro correspondiente al mes de aplicación
Set cuotaAplicacion = db.OpenRecordset("SELECT * FROM Cuotas WHERE num_lote = " & loteActualizarQuery!num_lote & " AND Format(fe_venci, 'mm/yyyy') = '" & Format(CDate(txtmesyaño_aplicacion.Value), "mm/yyyy") & "'")
If mesReferenciaEncontrado And Not mostradoMensaje Then
' Verificar si se muestra el mensaje de información
If verUnaAAUna = vbYes And cuotaAplicacion!num_cuo > 1 Then
mensaje = "Número de Lote: " & loteActualizarQuery!num_lote & vbCrLf & _
"Se encontró el mes de referencia" & vbCrLf & _
"Voy a modificar con los siguientes parámetros:" & vbCrLf & _
"Fecha de Referencia: " & txtmesyaño_referencia.Value & vbCrLf & _
"Número de cuota de referencia: " & refQuery!num_cuo & vbCrLf & _
"Número de cuota de Aplicación: " & loteActualizarQuery!num_cuo & vbCrLf & _
"Valor de Cuota de Referencia: " & totalCuotaReferencia & vbCrLf & _
"Valor de Cuota del Mes de Aplicación (antes de modificar): " & loteActualizarQuery!total_cuota & vbCrLf & _
"Incremento a aplicar: " & totalCuotaReferencia * ind_incremento / 100 & vbCrLf & _
"Porcentaje Retroactivo: " & porcentajeRetroactivo & vbCrLf & _
"Fecha Retroactivo: " & txtmes_retroactivo.Value & vbCrLf & _
"Valor de Cuota al mes Retroactivo: " & totalCuotaRetroactivo & vbCrLf & _
"Nuevo Valor Neto (a partir del Mes de Aplicación): " & nuevoNeto & vbCrLf & _
"Retroactivo $ = " & (totalCuotaRetroactivo * porcentajeRetroactivo / 100) & vbCrLf & _
"Nuevo Valor de Cuota (a partir del Mes de Aplicación): " & (loteActualizarQuery!total_cuota + (totalCuotaRetroactivo * porcentajeRetroactivo / 100))
MsgBox mensaje, vbInformation, "Información de Modificación"
mostradoMensaje = True
End If
If verUnaAAUna = vbYes And cuotaAplicacion!num_cuo = 1 Then
mensaje = "Número de Lote: " & loteActualizarQuery!num_lote & vbCrLf & _
"Mes de Aplicación es Cuota 1" & vbCrLf & _
"NO SE MODIFICA:" & vbCrLf
MsgBox mensaje, vbInformation, "Información de Modificación"
mostradoMensaje = True
End If
End If
' Ajustar el cálculo para el mes retroactivo
nuevoTotal = loteActualizarQuery!total_cuota + (totalCuotaReferencia * ind_incremento / 100) + (totalCuotaRetroactivo * porcentajeRetroactivo / 100)
nuevoNeto = loteActualizarQuery!valor_cuota + (valorCuotaRetroactivo * ind_incremento / 100) + (totalCuotaRetroactivo * porcentajeRetroactivo / 100)
If Not cuotaAplicacion.EOF And cuotaAplicacion!num_cuo > 1 Then
' Verificar si se ingresa el mes y el porcentaje
If Trim(mesRetroactivo) <> "" And porcentajeRetroactivo <> 0 Then
' Verificar si el mes de aplicación es el más nuevo
If txtmesyaño_aplicacion.Value = mesMasNuevo Then
' Ajustar solo los términos relacionados con la actualización
nuevoTotal = nuevoTotal + (totalCuotaReferencia * ind_incremento / 100) + (totalCuotaRetroactivo * porcentajeRetroactivo / 100)
nuevoNeto = nuevoNeto + (valorCuotaReferencia * ind_incremento / 100) + (valorCuotaRetroactivo * porcentajeRetroactivo / 100)
Else
' Ajustar solo los términos relacionados con la actualización
nuevoTotal = nuevoTotal + (totalCuotaReferencia * ind_incremento / 100)
nuevoNeto = nuevoNeto + (valorCuotaReferencia * ind_incremento / 100)
End If
Else
nuevoTotal = loteActualizarQuery!total_cuota + (totalCuotaReferencia * ind_incremento / 100)
nuevoNeto = loteActualizarQuery!valor_cuota + (valorCuotaReferencia * ind_incremento / 100)
End If
If Not cuotaAplicacion.EOF And cuotaAplicacion!num_cuo > 1 Then
' Verificar si se ingresa el mes y el porcentaje
If Trim(mesRetroactivo) <> "" And porcentajeRetroactivo <> 0 Then
' Verificar si el mes de aplicación es el más nuevo
If txtmesyaño_aplicacion.Value = mesMasNuevo Then
nuevoTotal = loteActualizarQuery!total_cuota + (totalCuotaReferencia * ind_incremento / 100) + (IIf(IsNull(cuotaAplicacion!total_cuota), 0, cuotaAplicacion!total_cuota) * porcentajeRetroactivo / 100)
End If
End If
loteActualizarQuery!total_cuota = nuevoTotal
nuevoNeto = loteActualizarQuery!valor_cuota + (valorCuotaReferencia * ind_incremento / 100)
loteActualizarQuery!valor_cuota = nuevoNeto
loteActualizarQuery!g_a_f = nuevoTotal - nuevoNeto
loteActualizarQuery.Update
End If
cuotascount = cuotascount + 1
End If
' quito reloj de arena a puntero normal
DoCmd.Hourglass False
' Actualiza el número de lote solo si cambia
numeroLote = loteActualizarQuery!num_lote
' Avanzar al siguiente registro
loteActualizarQuery.MoveNext
Loop
' Cerrar el recordset
loteActualizarQuery.Close
Set loteActualizarQuery = Nothing
refQuery.Close
Set refQuery = Nothing
cuotaAplicacion.Close
Set cuotaAplicacion = Nothing
' Mostrar mensaje de finalización
MsgBox "Proceso de actualización completado. Se actualizaron " & cuotascount & " cuotas.", vbInformation, "Proceso Completado"
DoCmd.Close acForm, "Actualizacion"
End Sub
Valora esta pregunta


0