Ayuda con proyecto Vba

Por favor su ayuda urgente...
He hecho un código de una macro donde se ejecuta un Msgbox cada vez que al insertar datos se supere un limite (condicional de dinero)
Yo le he colocado un limite de dinero en la columna O5
El cual se debe repartir entre las columnas P5:AW5.
El total de la sumatoria de P5: AW5 se coloca en AX5 y la casilla AY5 muestra la diferencia un saldo de dinero (O5 - AX5)
¿He logrado que cumpla la condicional pero solo para la fila 5 como hago para que se cumpla en todas las demás que yo programe hasta la fila 965?
Y que se ejecute la macro al abrir el archivo, cada vez que alguien programe un valor superior..
Adjunto el código elaborado...
Private Sub Total()
Dim Total As Single
If ActiveSheet.Range("AX5") > ActiveSheet.Range("O5") Then
MsgBox Prompt:="El valor programado en las regionales, supera el Monto Asignado en el Rubro", Title:="ERROR"
Continuar = False
End If
If ActiveSheet.Range("AX5") = ActiveSheet.Range("O5") Or ActiveSheet.Range("AY5") = 0 Then
MsgBox Prompt:="Esta Completa la Asignación de Cupos para el Rubro", Title:="Excelente"
Continuar = False
End If
X = MsgBox("Desea Guardar esta programación..?", vbYesNo + vbQuestion, "Opción")
' Se ha pulsado sobre botón Si
If X = vbYes Then
Else ' Se ha pulsado sobre botón No
End If
End Sub

1 respuesta

Respuesta
1
Prueba esto:
Option Explicit
 Dim fila As Long
Private Sub Total(f As Long)
Dim Total As Single
Dim continuar As Boolean
Dim x As Integer
If Range("AX" & f) <= 0 Then Exit Sub
If Range("AX" & f) > Range("O" & f) Then
MsgBox Prompt:="El valor programado en las regionales, supera el Monto Asignado en el Rubro en " & (Range("AY" & f)) * -1, Title:="ERROR"
continuar = False
End If
If Range("A" & f) = Range("O" & f) Or ActiveSheet.Range("AY" & f) = 0 Then
MsgBox Prompt:="Esta Completa la Asignación de Cupos para el Rubro", Title:="Excelente"
continuar = False
End If
x = MsgBox("Desea Guardar esta programación..?", vbYesNo + vbQuestion, "Opción")
' Se ha pulsado sobre botón Si
If x = vbYes Then
Else ' Se ha pulsado sobre botón No
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Call Total(fila)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
fila = Selection.Row
End Sub
Explico: en el evento Worksheet_SelectionChange de la hoja, capturamos el número de fila sore el cual te has posicionado, cada vez que te muevas sobre la hoja, captura el número de fila, esto nos servirá para evaluar que monto debe verificar.
En el evento: Worksheet_Change(
Invocamos el macro Total(fila), que no es otra cosa que tu macro + el número de fila que debe evaluar
Una vez que le pasamos el datos tu macro, simplemente concatenamos con el comodín & + f que es el numero de fila, por lo tanto las referencias a evaluar se convierten de fijas a dinámicas, ya que toda vez que el usuario provoque el cambio (manual) en la hoja, invocara el macro, que evaluara la fila justo en que realiza la modificación.
No me pareció oportuno correr el macro desde el evento open de la planilla, puesto que dejarías de estar evaluando las sgtes modificaciones.
A ver si te sirve
Bye

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas