Buongiorno a tutti,
vorrei chiedere un consiglio alla community in merito al codice che sto per postare.
Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal count As Long)
On Error GoTo ErrorHandler
If Not Me.Dirty Then
If (count < 0) And (Me.CurrentRecord > 1) Then
DoCmd.GoToRecord , , acPrevious
ElseIf (count > 0) And (Me.CurrentRecord <= Me.Recordset.RecordCount) Then
DoCmd.GoToRecord , , acNext
End If
Else
MsgBox "I dati sono stati modificati!" & vbNewLine & "Salvare o annullare le modifiche prima di passare ad un altro record.", vbOKOnly, "Avviso!"
End If
ErrorHandler:
Call ErrHandler(Err.Number)
End Sub
Con questo codice in pratica permetto di girare tra i record, se non sono stati editati/modificati e fin qui va bene, il problema sorge che dopo il messaggio e facendo esclusivamente salva
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
è come se andasse in loop e ripropone sempre lo stesso messaggio “bloccandosi”
su un'altra maschera ho invece risolto/ovviato in un altro modo, dovendo anche dover inserire dei controlli in più, con questo codice:
Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal count As Long)
On Error GoTo ErrorHandler
Dim Risp As Integer
With CodeContextObject
If Not .Dirty Then
If (count < 0) And (Me.CurrentRecord > 1) Then
DoCmd.GoToRecord , , acPrevious
ElseIf (count > 0) And (Me.CurrentRecord <= Me.Recordset.RecordCount) Then
DoCmd.GoToRecord , , acNext
End If
Else
Risp = MsgBox("I dati sono stati modificati! Salvare o annullare" & vbNewLine & "le modifiche prima di passare ad un altro record." _
& vbNewLine & vbNewLine & "Si vuole salvare ora?", vbQuestion + vbYesNo + vbDefaultButton1, "Avviso!")
If Risp = 6 Then
If .C = 0 Then
If .F = 0 Then
If .R = 0 Then
MsgBox "Non è stato specificato" & vbNewLine & "il tipo di anagrafica" & vbNewLine & "Cliente/Fornitore/Rappresentante" _
& vbNewLine & "Si prega di specificare per poter salvare"
.C.SetFocus
Exit Sub
Else
GoTo SaveAndGo
End If
Else
GoTo SaveAndGo
End If
Else
GoTo SaveAndGo
End If
Else
Exit Sub
End If
End If
End With
SaveAndGo:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
If (count < 0) And (Me.CurrentRecord > 1) Then
DoCmd.GoToRecord , , acPrevious
ElseIf (count > 0) And (Me.CurrentRecord <= Me.Recordset.RecordCount) Then
DoCmd.GoToRecord , , acNext
End If
ErrorHandler:
Call ErrHandler(Err.Number)
End Sub
Ora vorrei chiedere un Vs parere sul perchè mi riporta quell'errore ridondante con il primo codice “semplice” e se c'è un modo per snellire di più il secondo visto che vorrei inserire questi controlli ad ogni spostamento tra record ed eventualmente anche in altre maschere
grazie mille per le risposte