
26-03-11, 17:15
|
 | Διαχειριστής Όνομα: Τάσος Φιλοξενιδης Έκδοση λογισμικού Office: Ms-Office 365 Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική | | Εγγραφή: 21-10-2009
Μηνύματα: 2.035
| |
Αγαπητοί φίλοι, καλησπέρα κι από μένα!
Το θέμα της δυναμικής προεπιλογής τιμής ενός πεδίου έχει αποτελέσει βραχνά σε πολλούς
ειδικά όταν εφαρμόζεται σε συνεχείς φόρμες.
Η λύση του Δημήτρη είναι σωστή σαν σκεπτικό.
Παράλληλα είναι η μόνη λύση που δεν χρειάζεται VBA.
Η λύση με VBA θα μπορούσε να είναι όπως φαίνεται παρακάτω.
Φιλικά
Τάσος
Option Compare Database
Option Explicit
Private Const Data_Error As Long = 2169
Private LatestValue As String, tmpValue As String
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.text1 = LatestValue Then
Me.Undo
Cancel = True
On Error Resume Next
DoCmd.GoToRecord acDataForm, Me.Name, acLast
End If
End Sub
Private Sub Form_Current()
If Me.NewRecord Then Me.text1 = GetLatestValue
End Sub
Private Sub Form_Error(DataErr As Integer, Response As Integer)
' Η Access προσπαθεί να αποθηκεύσει τη νέα εγγραφή κατά το κλείσιμο η
' οποία ακυρώνεται από την Form_BeforeUpdate() και προκαλεί το σφάλμα 2169
If DataErr = Data_Error Then
Me.Undo
Response = acDataErrContinue
End If
End Sub
Private Sub Form_Load()
GetLatestValue
End Sub
Function GetLatestValue() As String
tmpValue = Nz(DLast("[Text1]", "tbl"), "???-???")
tmpValue = Left(tmpValue, Len(tmpValue) - Abs(Len(tmpValue) > 3) * 3)
If tmpValue <> LatestValue Then
LatestValue = tmpValue
End If
GetLatestValue = LatestValue
End Function
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |