![]() |
Μου φαίνεται ότι κατάλαβα πλήρως τον τρόπο με τον οποίο δουλεύει. Πέτυχα και αυτό με την προσθήκη τιμής σε λίστα. Αν κατάλαβα καλά όμως, οι μεταβλητές περνιούνται στο onload event και απ'ότι διάβασα η φόρμα γίνεται load μόνο όταν ανοίγει. Άρα, πλην της τιμής του πρώτου combobox που περνιέται, οι τιμές των υπολοίπων comboboxes δεν περνιούνται. Πως μπορώ να κάνω με κάποιον τρόπο κάθε φορά, reload την φόρμα για να περνιούνται οι νέες τιμές? |
1 Συνημμένο(α) Καλησπέρα! Αγαπητέ Παντελή, δες ένα απλό παράδειγμα στο συνημμένο. Αν θέλεις κάτι άλλο, φτιάξε ένα αρχείο παράδειγμα μ αυτό ακριβώς που ζητάς για να το δούμε όλοι μαζί. Φιλικά Τάσος |
1 Συνημμένο(α) Αυτό που θέλω περιγράφεται από το δείγμα που βρίσκεται στο συνημμένο. Στην φόρμα ΣΕΝΤΟΝΙ ο χρήστης επιλέγει αρχικά ή το Καθημερινή ή το Σάββατο. Ουσιαστικά επιλέγει ποια μέρα θα ανοίξει(Σε πλήρη έκδοση έχει όλες τις μέρες και περισσότερες επιλογές στα combo boxes). Όταν πάει σε ένα combobox και επιλέξει κάτι, τότε ανοίγει η αντίστοιχη φόρμα και αποθηκεύεται η τιμή που θέλουμε. Αν πάμε όμως να επιλέξουμε για άλλο όνομα μία τιμή στο combobox αυτή η τιμή δεν μεταφέρεται στην φόρμα, γιατί ο κώδικας πίσω από την φόρμα είναι στο onLoad event. Έτσι την πρώτη φορά που φορτώνει περνά την μεταβλητή, αλλά τις επόμενες έχει ήδη φορτώσει και δεν περνάει τίποτα. Γι' αυτό έλεγα μήπως γινόταν κάπως να γίνεται κάτι σαν reload της φόρμας που ανοίγει |
Καλησπέρα και πάλι! Παντελή απ ότι κατάλαβα, θέλεις να περνάς περισσότερες τιμές στις φόρμες ΥΠ_ΣΑΒ και ΥΠ_ΚΑΘ που επιλέγεις από την αρχική φόρμα ΣΕΝΤΟΝΙ ανεξάρτητα από την τρέχουσα κατάσταση τους (ανοιχτές ή κλειστές). Τότε έτσι: Κώδικας: Private Sub Υπηρεσία1_AfterUpdate()Κώδικας: Forms(strForname).Controls(TargetTextBoxName) = Me.ΕπώνυμοΤάσος |
Κοινοποίηση και σύληψη δημόσιων συμβάντων φόρμας 1 Συνημμένο(α) Καλησπέρα guys! Ένας ακόμη τρόπος να γίνει το ζητούμενο είναι και η χρήση εξειδικευμένων συμβάντων (events). Δηλαδή στην ενότητα δηλώσεων της αρχικής φόρμας έχουμε την εξής δήλωση: Κώδικας: Option Compare DatabaseΚώδικας: Private Sub Υπηρεσία1_AfterUpdate()Κώδικας: Option Compare DatabaseΥ.Γ. Πάντως φίλε Παντελή, αν συνεχίσεις να δίνεις ελληνικά ονόματα στα αντικείμενα της Access, ...δεν θα τα πάμε καθόλου καλά! :hit: |
Όσον αφορά τη λύση του Τάσου μου λειτουργεί πολύ καλά! Απλά για να ξέρουν και οι αναγνώστες στη θέση του 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 και θα πω τις εντυπώσεις μου! Σας ευχαριστώ για τον χρόνο σας! |
Παντελή καλησπέρα! Σε καμία περίπτωση δεν θα δούλευε η IsOpen() αφού (δικό μου λάθος) παρέλειψα να συμπεριλάβω τη συνάρτηση αυτή στο μήνυμα! Αν θέλεις τη γνώμη μου αυτή η συνάρτηση είναι θεωρητικά τουλάχιστον σωστότερη αφού εκτός από την ύπαρξη της φόρμας εξετάζει και την τρέχουσα προβολή της , κάτι που δεν κάνει η ιδιότητα IsLoaded. Κώδικας: Function IsOpen(FormName$) As Boolean |
Καλημέρα στην κοινότητα! Έχω μία απορία - προέκταση του συγκεκριμένου θέματος. Θέλω όταν η φόρμα της ημέρας είναι κλειστή, να πατάω ένα κουμπί και να πηγαίνει σε όλες τις εγγραφές του πεδίου Υπηρεσία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 Καμιά ιδέα? Ευχαριστώ |
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 Δες και αυτό Γιώργος |
| Η ώρα είναι 13:07. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.