Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#21
| |||
| |||
Μου φαίνεται ότι κατάλαβα πλήρως τον τρόπο με τον οποίο δουλεύει. Πέτυχα και αυτό με την προσθήκη τιμής σε λίστα. Αν κατάλαβα καλά όμως, οι μεταβλητές περνιούνται στο onload event και απ'ότι διάβασα η φόρμα γίνεται load μόνο όταν ανοίγει. Άρα, πλην της τιμής του πρώτου combobox που περνιέται, οι τιμές των υπολοίπων comboboxes δεν περνιούνται. Πως μπορώ να κάνω με κάποιον τρόπο κάθε φορά, reload την φόρμα για να περνιούνται οι νέες τιμές? |
#22
| ||||
| ||||
Καλησπέρα! Αγαπητέ Παντελή, δες ένα απλό παράδειγμα στο συνημμένο. Αν θέλεις κάτι άλλο, φτιάξε ένα αρχείο παράδειγμα μ αυτό ακριβώς που ζητάς για να το δούμε όλοι μαζί. Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#23
| |||
| |||
Αυτό που θέλω περιγράφεται από το δείγμα που βρίσκεται στο συνημμένο. Στην φόρμα ΣΕΝΤΟΝΙ ο χρήστης επιλέγει αρχικά ή το Καθημερινή ή το Σάββατο. Ουσιαστικά επιλέγει ποια μέρα θα ανοίξει(Σε πλήρη έκδοση έχει όλες τις μέρες και περισσότερες επιλογές στα combo boxes). Όταν πάει σε ένα combobox και επιλέξει κάτι, τότε ανοίγει η αντίστοιχη φόρμα και αποθηκεύεται η τιμή που θέλουμε. Αν πάμε όμως να επιλέξουμε για άλλο όνομα μία τιμή στο combobox αυτή η τιμή δεν μεταφέρεται στην φόρμα, γιατί ο κώδικας πίσω από την φόρμα είναι στο onLoad event. Έτσι την πρώτη φορά που φορτώνει περνά την μεταβλητή, αλλά τις επόμενες έχει ήδη φορτώσει και δεν περνάει τίποτα. Γι' αυτό έλεγα μήπως γινόταν κάπως να γίνεται κάτι σαν reload της φόρμας που ανοίγει |
#24
| ||||
| ||||
Καλησπέρα και πάλι! Παντελή απ ότι κατάλαβα, θέλεις να περνάς περισσότερες τιμές στις φόρμες ΥΠ_ΣΑΒ και ΥΠ_ΚΑΘ που επιλέγεις από την αρχική φόρμα ΣΕΝΤΟΝΙ ανεξάρτητα από την τρέχουσα κατάσταση τους (ανοιχτές ή κλειστές). Τότε έτσι: Κώδικας: Private Sub Υπηρεσία1_AfterUpdate() Dim FormOpemArgs$, TargetTextBoxName$ If IsNull(Me.OptWeekDays) And Not IsNull(Me.Υπηρεσία1) Then Exit Sub Select Case Me.Υπηρεσία1 Case "ΤΑΜ1" TargetTextBoxName = "k1" Case "ΤΑΜ2" TargetTextBoxName = "k2" Case "ΤΑΜ3" TargetTextBoxName = "k3" End Select strForname = Choose(Me.OptWeekDays, "ΥΠ_ΚΑΘ", "ΥΠ_ΣΑΒ") If IsOpen(strForname) Then Forms(strForname).Controls(TargetTextBoxName) = Me.Επώνυμο Exit Sub Else FormOpemArgs = TargetTextBoxName & ";" & Me.Επώνυμο DoCmd.OpenForm strForname, , , , , , FormOpemArgs End If End Sub Function IsOpen(FormName$) As Boolean If SysCmd(10, 2, FormName) <> 0 Then If Forms(FormName).CurrentView = 1 Then IsOpen = True End If End Function Κώδικας: Forms(strForname).Controls(TargetTextBoxName) = Me.Επώνυμο Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών Τελευταία επεξεργασία από το χρήστη Tasos : 21-03-10 στις 21:10. |
#25
| ||||
| ||||
Κοινοποίηση και σύληψη δημόσιων συμβάντων φόρμας
Καλησπέρα guys! Ένας ακόμη τρόπος να γίνει το ζητούμενο είναι και η χρήση εξειδικευμένων συμβάντων (events). Δηλαδή στην ενότητα δηλώσεων της αρχικής φόρμας έχουμε την εξής δήλωση: Κώδικας: Option Compare Database Option Explicit Public Event CashAfterUpdate(ByVal FormName As String, _ ByVal ControlName As String, ByVal LastName As String) Κώδικας: Private Sub Υπηρεσία1_AfterUpdate() Dim strFormName As String Dim strCtrlName As String Dim strLastName As String If Not IsNull(Me.OptWeekDays) Then If Not IsNull(Me.Υπηρεσία1) Then strFormName = Choose(Me.OptWeekDays, "ΥΠ_ΚΑΘ", "ΥΠ_ΣΑΒ") strCtrlName = Array("k1", "k2", "k3")(Me.Υπηρεσία1.ListIndex) DoCmd.OpenForm strFormName RaiseEvent CashAfterUpdate(strFormName, strCtrlName, Me.Επώνυμο) Me.SetFocus End If End If End Sub Κώδικας: Option Compare Database Option Explicit Private WithEvents MainForm As Form_ΣΕΝΤΟΝΙ ' Private Sub Form_Load() Set MainForm = Forms("ΣΕΝΤΟΝΙ") End Sub Private Sub MainForm_CashAfterUpdate(ByVal FormName As String, _ ByVal ControlName As String, ByVal LastName As String) If Me.Name = FormName Then On Error Resume Next Me.Controls(ControlName) = LastName End If End Sub ' '...More code here... ' Υ.Γ. Πάντως φίλε Παντελή, αν συνεχίσεις να δίνεις ελληνικά ονόματα στα αντικείμενα της Access, ...δεν θα τα πάμε καθόλου καλά!
__________________ Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...! ----------------------------------------------- Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης. Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά! Τελευταία επεξεργασία από το χρήστη nisgia : 21-03-10 στις 18:58. |
#26
| |||
| |||
Όσον αφορά τη λύση του Τάσου μου λειτουργεί πολύ καλά! Απλά για να ξέρουν και οι αναγνώστες στη θέση του If IsOpen(strForname) Then χρησιμοποίησα το If CurrentProject.AllForms(strForname).IsLoaded Then Κατά τ'άλλα μια χαρά. Για την προσθήκη ενός Επωνύμου σε λίστα χρησιμοποιώ το: If TargetTextBoxName = "list1" Or TargetTextBoxName = "list2" Then Forms(strForname).Controls(TargetTextBoxName).AddI tem Me.Επώνυμο Else: Forms(strForname).Controls(TargetTextBoxName) = Me.Επώνυμο Και το αντίστοιχο στο onLoad της φόρμας που ανοίγει. Θα δοκιμάσω και τον κώδικα του nisgia και θα πω τις εντυπώσεις μου! Σας ευχαριστώ για τον χρόνο σας! |
#27
| ||||
| ||||
Παντελή καλησπέρα! Σε καμία περίπτωση δεν θα δούλευε η IsOpen() αφού (δικό μου λάθος) παρέλειψα να συμπεριλάβω τη συνάρτηση αυτή στο μήνυμα! Αν θέλεις τη γνώμη μου αυτή η συνάρτηση είναι θεωρητικά τουλάχιστον σωστότερη αφού εκτός από την ύπαρξη της φόρμας εξετάζει και την τρέχουσα προβολή της , κάτι που δεν κάνει η ιδιότητα IsLoaded. Κώδικας: Function IsOpen(FormName$) As Boolean If SysCmd(10, 2, FormName) <> 0 Then If Forms(FormName).CurrentView = 1 Then IsOpen = True End If End Function
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#28
| |||
| |||
Καλημέρα στην κοινότητα! Έχω μία απορία - προέκταση του συγκεκριμένου θέματος. Θέλω όταν η φόρμα της ημέρας είναι κλειστή, να πατάω ένα κουμπί και να πηγαίνει σε όλες τις εγγραφές του πεδίου Υπηρεσία1 της συνεχούς φόρμας και να κάνει ουσιαστικά requery τον παρακάτω κώδικα. DoCmd.GoToRecord , , acFirst Dim FormOpemArgs$, TargetTextBoxName$ If IsNull(Me.OptWeekDays) And Not IsNull(Me.Υπηρεσία1) Then Exit Sub Select Case Me.Υπηρεσία1 Case "ΤΑΜ1" TargetTextBoxName = "k1" Case "ΤΑΜ2" TargetTextBoxName = "k2" Case "ΤΑΜ3" TargetTextBoxName = "k3" End Select strForname = Choose(Me.OptWeekDays, "ΥΠ_ΚΑΘ", "ΥΠ_ΣΑΒ") ' Προυπόθεση είναι ότι η φόρμα είναι κλειστή Forms(strForname).Controls(TargetTextBoxName) = Me.Επώνυμο 'Η φόρμα έχει ήδη ανοίξει από την προηγούμενη γραμμή κώδικα Do While Me.CurrentRecord - 1 < Me.RecordsetClone.RecordCount FormOpemArgs = TargetTextBoxName & ";" & Me.Επώνυμο DoCmd.OpenForm strForname, , , , , , FormOpemArgs End If DoCmd.GoToRecord , , acNext Loop Επειδή οι εγγραφές που περνούν στην φόρμα που ανοίγει δεν αποθηκεύονται κάπου όταν αυτή κλείνει, σε περίπτωση λάθους που πρέπει να αλλάξει κάτι θέλω με το πάτημα ενός κουμπιού να περνιούνται όλα τα combo boxes Υπηρεσία1 και να εκτελείται ο κώδικας από πίσω τους έτσι ώστε να ανοίγει πρώτα η φόρμα για να περνάει η πρώτη εγγραφή και μετά εφόσον έχει ανοίξει να περνούν και οι υπόλοιπες. Το πρόβλημα είναι ότι μου βγάζει λάθος στο ότι δεν μπορεί να προχωρήσει στην επόμενη εγγραφή και περνά μόνο την πρώτη εγγραφή. Το πρόβλημα εμφανίζεται στην τελευταία γραμμή: DoCmd.GoToRecord , , acNext Καμιά ιδέα? Ευχαριστώ |
#29
| |||
| |||
Dim mnm As Variant Dim mnma As String Dim Minas As Integer, Etos As Integer mnma = "Καταχωρήστε:" & vbCrLf & vbCrLf & _ "1 = Εκτύπωση Φορμα1 " & vbCrLf & vbCrLf & _ "2 = Εκτύπωση Φορμα2" & vbCrLf & vbCrLf & _ "3 = Εκτύπωση Φορμα3" & vbCrLf & vbCrLf & _ "4 = Εκτύπωση Φορμα4" & vbCrLf & vbCrLf & _ "5 = Εκτύπωση Φορμα5" & vbCrLf & vbCrLf & _ "6 = Εκτύπωση Φορμα6" arxi: mnm = InputBox(mnma, "Επιλογές") If mnm = "" Then Exit Sub If IsNumeric(mnm) = False Then MsgBox "Εσφαλμένη καταχώρηση", vbInformation, "Σφάλμα" GoTo arxi End If If mnm > 6 Or mnm < 1 Then MsgBox "Εσφαλμένη καταχώρηση", vbInformation, "Σφάλμα" GoTo arxi End If If mnm = 1 Then DoCmd.OpenForm "Φορμα1", acNormal, "", "", acFormEdit, acWindowNormal If mnm = 2 Then DoCmd.OpenForm "Φορμα2", acNormal, "", "", acFormEdit, acWindowNormal If mnm = 3 Then DoCmd.OpenForm "Φορμα3", acNormal, "", "", acFormEdit, acWindowNormal If mnm = 4 Then DoCmd.OpenForm "Φορμα4", acNormal, "", "", acFormEdit, acWindowNormal If mnm = 5 Then DoCmd.OpenForm "Φορμα5", acNormal, "", "", acFormEdit, acWindowNormal If mnm = 6 Then DoCmd.OpenForm "Φορμα6", acNormal, "", "", acFormEdit, acWindowNormal Δες και αυτό Γιώργος |
Ετικέτες |
events, openargs, raiseevent, withevents, ορίσματα, συμβάντα |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[ Φόρμες ] Αντιγραφή αντικειμένου φόρμας σε αντικείμενο άλλης φόρμας | zinocrotale | Access - Ερωτήσεις / Απαντήσεις | 3 | 18-04-13 18:35 |
Ενημέρωση Πεδίου Δευτερεύουσας Φόρμας μέσω Βοηθητικής Φόρμας | Χρήστος | Access - Ερωτήσεις / Απαντήσεις | 1 | 17-04-12 19:18 |
Επιλογή "άκυρο" σε μήνυμα με το κλείσιμο της φόρμας Βackup | alex | Access - Ερωτήσεις / Απαντήσεις | 3 | 14-03-12 11:52 |
[Συναρτήσεις] Επιλογή αριθμών | gpentez | Excel - Ερωτήσεις / Απαντήσεις | 2 | 10-03-12 08:56 |
[ Active X Controls ] Επιλογή ημερομηνίας από Active X και αυτόματη ενημέρωση φόρμας | Χρήστος | Access - Ερωτήσεις / Απαντήσεις | 14 | 31-12-10 17:06 |
Η ώρα είναι 20:13.