![]() |
Επιλογή φόρμας Καλησπέρα σας! Έχω το εξής: Θέλω να πατάω ένα κουμπί και να μου εμφανίζει ένα MsgBox από το οποίο θα έχω 4 επιλογές (το κείμενο και δίπλα σε κάθε κείμενο ένα checkbox). Κάθε επιλογή αντιστοιχεί σε και σε μία φόρμα. Με το που επιλέγω ένα checkbox τότε θέλω το όνομα της αντίστοιχης φόρμας να αποθηκεύεται σε ένα string για παράδειγμα και έπειτα, αυτό το string να το χρησιμοποιήσω για το άνοιγμα της φόρμας. Ένα στο περίπου παράδειγμα είναι το εξής: 'public strInput As String 'Καταχώρηση ονόματος Private button_name_Click() Dim strInput1 As CheckBox 'Επιλογή 1ης φόρμας Dim strInput2 As CheckBox 'Επιλογή 2ης φόρμας Dim strInput3 As CheckBox 'Επιλογή 3ης φόρμας Dim strInput4 As CheckBox 'Επιλογή 4ης φόρμας φόρμας Dim strMsg As String Beep strMsg = "Παρακαλώ, επιλέξτε την φόρμα που θέλετε να ανοίξετε" MsgBox "Φόρμα1" & vbCrLf & vbLf & strInput1 & _ "Φόρμα2" & vbCrLf & vbLf & strInput2 & _ "Φόρμα3" & vbCrLf & vbLf & strInput3 & _ "Φόρμα4" & vbCrLf & vbLf & strInput4 & _ "", _ vbInformation, "Επιλογή φόρμας" strInput = InputBox(Prompt:=strMsg, title:="Επιλογή φόρμας στοιχείων") if me.strInput1.value= true then strInput = "Φόρμα1 & "'" else if me.strInput2.value= true then strInput = "Φόρμα2 & "'" else if me.strInput3.value= true then strInput = "Φόρμα3 & "'" else if me.strInput4.value= true then strInput = "Φόρμα4 & "'" end if end if end if end if end sub Άρα στην μεταβλητή strInput θα αποθηκεύεται κάθε φορά το όνομα της φόρμας που θέλω. Έπειτα όταν θέλω να την ανοίξω θα γράφω: DoCmd.OpenForm "strInput", , , , , , Γίνεται κάτι τέτοιο? Αν ναι, η σύνταξη του κώδικα που έχω γράψει είναι σωστή? Ευχαριστώ εκ των προτέρων |
1 Συνημμένο(α) Γεια σας! Αγαπητέ φίλε Παντελή, στο ζητούμενο σου θα σου πρότεινα μια διαφορετική προσέγγιση (βλ. συνημμένο). Με εκτίμηση Τάσος |
1 Συνημμένο(α) Καλησπέρα σε όλους. Φίλε Παντελή πιστεύω πως το συνημμένο αρχείο είναι αυτό που ψάχνεις. Υ.Γ. Θα πρέπει στον πίνακα Switchboard Items στην στήλη Argument να γράψεις το όνομα της φόρμας που θες να ανοίγει πατώντας την επιλογή αυτή. Φιλικά Μιχάλης. |
Αυτό που θέλω είναι, να έχω για παράδειγμα 5 επιλογές. Όταν επιλέγω την πρώτη, να αποθηκεύεται σε ένα Public string η ονομασία της φόρμας που επέλεξα και να μην ανοίγει επιτόπου. Θα ανοίγει όταν την καλώ μέσα σε συνάρτηση με εντολή: DoCmd.OpenForm "strInput", , , , , , όπου strInput Θα είναι η ονομασία της φόρμας που επέλεξα. Ουσιαστικά χρησιμοποιώ το DoCmd.OpenForm "name_of_form", , , , , , Θέλω να μην ανοίγει σταθερά μία φόρμα αλλά να μπορώ να αλλάξω το όνομα της φόρμας ανάλογα με αυτό που θέλω να κάνω κάθε φορά. Πιστεύω ότι ο κώδικας που έχω στο πρώτο post αντιπροσωπεύει αυτό που θέλω να κάνω. |
Δοκίμασα αυτό: Option Compare Database Dim strGeneralFormName As String Private Sub button_Click() On Error GoTo Err_button_Click Dim intFormNumber As Integer MsgBox "Για Δευτέρα πληκτρολογήστε το 1" & vbCrLf & vbLf & strInput1 & _ "Για Τρίτη πληκτρολογήστε το 2" & vbCrLf & vbLf & strInput2 & _ "Για Τετάρτη πληκτρολογήστε το 3" & vbCrLf & vbLf & strInput3 & _ "Για Πέμπτη πληκτρολογήστε το 4" & vbCrLf & vbLf & strInput4 & _ "", _ vbInformation, "Επιλογή φόρμας..." intFormNumber = InputBox("Παρακαλώ πληκτρολογήστε έγκυρο αριθμό από το 1-4") Select Case intFormNumber Case Is = 1 strGeneralFormName = "MON" Case Is = 2 strGeneralFormName = "TUS" Case Is = 3 strGeneralFormName = "WED" Case Is = 4 strGeneralFormName = "THU" End Select Exit_button_Click: Exit Sub Err_button_Click: MsgBox Err.Description Resume Exit_button_Click End Sub Επομένως πατώντας το κουμπί, θα αποθηκεύεται στην μεταβλητή strGeneralFormName το όνομα της φόρμας που επέλεξε ο χρήστης. Στη συνέχεια, θέλω η φόρμα που αποθηκεύτηκε σε αυτή τη μεταβλητή να ανοίγει στο after update του combobox από την εντολή: DoCMD.OpenForm strGeneralFormName, , , , , , Me.Name & ";" & Me.combobox αλλα μου βγάζει πρόβλημα ότι πρέπει να βάλω το όνομα κάποιας φόρμας στη θέση της μεταβλητής Σημείωση: Η σύνταξη της τελευταίας γραμμής κώδικα θέλω να παραμείνει. Δεν μπορώ δηλαδή να χρησιμοποιήσω απλά τον κώδικα: DoCmd.OpenForm strGeneralFormName Καμιά ιδέα? Ευχαριστώ εκ των προτέρων |
Κατα την γνωμη μου με αυτο τον "δρομο" που εχεις διαλεξει πρεπει να δημιουργησεις ενα πινακα που να εχει μεσα ολες τις παραμετρους σου και απο εκει να ανοιγεις της φορμες σου αναλογως με αυτο που θελεις. Καλη συνεχεια. |
1 Συνημμένο(α) Καλησπέρα σε όλους! Αγαπητέ Παντελή, Δες ακόμα μια πρόταση που κάνει αυτά που περιγράφεις. Με εκτίμηση Τάσος |
Μου εμφανίζει κάποιο πρόβλημα λάθους σε περαιτέρω κομμάτι κώδικα. Ο κώδικας είναι του στυλ forms!strFormName.combobox = me.textbox.value και μου βγάζει πρόβλημα ότι θέλει όνομα φόρμας στο forms!strFormName. Καμιά ιδέα? |
Παντελή, ο κώδικας που περιγράφεις δεν έχει καμία σχέση με το παράδειγμα μου. Προφανώς η μεταβλητή strFormName χρειάζεται να είναι Public όπως στο παράδειγμα μου ή αναφέρεσαι σε υποφόρμα οπότε θα πρέπει να το χειριστείς διαφορετικά. Διαφώτισε μας στο σημείο αυτό. Φιλικά Τάσος |
Ο τρόπος λειτουργίας είναι αυτός που περιγράφεται στο topic: http://www.ms-office.gr/forum/access...-se-forma.html μέχρι και το 5ο reply. Αυτό που προσπαθώ να κάνω είναι στο docmd.openform nameform κτλ αλλά και σε κώδικα του τύπου: Forms!frm2.text1 = Me.Name.Value να αναφέρομαι στην φόρμα ως μεταβλητή. Δηλαδή να επιλέγει ο χρήστης αρχικά το ποια φόρμα θα χρησιμοποιήσει και να χρησιμοποιείται πιο μετά σε σημεία τύπου: DoCMD.OpenForm "frm2" , , , , , , Me.Name & ";" & Me.cbox1 και Forms!frm2.text1 = Me.Name.Value έτσι ώστε εάν θέλω να επιλέξω άλλη φόρμα να ανοίξει να είναι ¨ευέλικτος¨ ο κώδικας και να προσαρμόζεται σε άλλη φόρμα. |
Στο παράδειγμα μου, οι φόρμες ανοίγουν με τη γραμμή: DoCmd.OpenForm strForname, , , , , , FormOpemArgs Η μεταβλητή FormOpemArgs αντιστοιχεί στο .OpenArgs της φόρμας που ανοίγει κάθε φορά. Με την ιδιότητα .OpenArgs μπορείς να περάσεις όποια πληροφορία θέλεις στη φόρμα που θέλεις να ανοίξεις. Σε κάθε μια από τις φόρμες του παραδείγματος, υπάρχει στο συμβάν Form_Load() o παρακάτω κώδικας που επεξεργάζεται (στην περίπτωση σου τη διασπά στα 2 συστατικά που της έχεις ορίσει) τη μεταβλητή FormOpemArgs και περνά τις τιμές στα πεδία απλά και μόνο για να γίνει κατανοητό το παράδειγμα: Κώδικας: Private Sub Form_Load()Φιλικά Τάσος |
1 Συνημμένο(α) Στο συνημμένο αρχείο είναι ένα δείγμα της εφαρμογής μου. Στην φόρμα "ΣΕΝΤΟΝΙ" στο after update του σύνθετου πλαισίου έχω δείγμα του κώδικα που χρησιμοποιούσα πριν, σε μορφή σχολίων και ο καινούργιος είναι από πάνω. Δεν μπορώ να καταλάβω πως θα μπορούσα να εφαρμόσω το .openArgs στο παράδειγμά μου. Είναι σαν να πρέπει να μεταφέρω όλο τον κώδικα από το after update του σύνθετου πλαισίου στο on load event της φόρμας που ανοίγει - κάτι που δεν βολεύει γιατί έχω πολλά σύνθετα πλαίσια. Συγχωρέστε με αν η λύση που μου πρότεινε ο Τάσος μου κάνει και δεν το κατάλαβα - αλλά δεν είμαι ειδικός στην VBA Ευχαριστώ για την βοήθεια! |
Καλημέρα Παντελή, DoCmd.OpenForm strForname, , , , , , FormOpemArgs Στη μεταβλητή FormOpemArgs την έχουμε περάσει σε προηγούμενη γραμμή του κώδικα με τις τιμές: Me.Επώνυμο & ";" & Me.Υπηρεσία1 (μετ. "ΜΠΟΥΔΑΛΑΚΗΣ;ΤΑΜ2") Δες τη βοήθεια της VBA στην Access σχετικά με το DoCmd.OpenForm Method (στον VBE κάνε κλικ πάνω στη λέξη "OpenForm" και πάτησε F1): Με άλλα λόγια, μπορούμε στο τελευταίο όρισμα της .OpenForm, το OpenArgs να περάσουμε τις πληροφορίες πού θέλουμε στη φόρμα που θα ανοιχτεί. Οι πληροφορίες αυτές με το άνοιγμα της φόρμας υπάρχουν ήδη εκεί στην ιδιότητα OpenArgs. Στην περίπτωση σου οι πληροφορίες αυτές αποστέλλονται στη φόρμα που θέλεις να ανοίξεις πχ. ΥΠ_ΣΑΒ και σε περιμένουν να τις επεξεργαστείς! Πως; Αυτό που πρέπει να κάνεις είναι να περάσεις τις πληροφορίες που έστειλες με τη μεταβλητή FormOpemArgs (μετ. "ΜΠΟΥΔΑΛΑΚΗΣ;ΤΑΜ2") στα πεδία της φόρμας ΥΠ_ΣΑΒ κατά το άνοιγμα της περνώντας της τον παρακάτω κώδικα: Κώδικας: Private Sub Form_Open()Τάσος |
Τάσο καλημέρα, Μου έδωσες να καταλάβω πολύ καλά πως δουλεύει η μεταβλητή του παραδείγματος! Συνειδητοποίησα ότι δεν χρειάζεται τελικά να περάσω δύο μεταβλητές στην φόρμα που ανοίγω αλλά μία - μόνο το Επώνυμο. Δηλαδή, θα έχω Docmd.openform form's_name, , , , , , Me.Επώνυμο & ";" Ουσιαστικά οι τιμές του σύνθετου πλαισίου της αρχικής φόρμας(ΣΕΝΤΟΝΙ) δεν συνδέονται με κάποιο στοιχείο της φόρμας που θα ανοίγει κάθε φορά. Στο afterupdate του σύνθετου πλαισίου της αρχικής φόρμας έχω πολλά if. Δηλαδή, εάν επιλεγεί μία συγκεκριμένη τιμή από το σύνθετο πλαίσιο, τότε το Επώνυμο της συγκεκριμένης εγγραφής θα περνάει σε διαφορετικό κάθε φορά textbox της φόρμας που ανοίγει. Άρα για να δουλέψει με τον συγκεκριμένο τρόπο, φαντάζομαι δεν θα χρειαστεί να κάνω split την OpemArgs, δηλαδή θα έχω Private Sub Form_Load() Dim MyValues() As String If Not IsNull(Me.OpenArgs) Then Me.txtArgs1 = MyValues(0) End If End Sub Στην περίπτωσή μου όμως το txtArgs1 δεν είναι το ίδιο κάθε φορά. Όσες επιλογές έχω στο σύνθετο πλαίσιο της αρχικής φόρμας, τόσα text boxes έχω στην φόρμα που ανοίγει και όπως ανέφερα η μεταφορά γίνεται με if γιατί δεν υπάρχει διασύνδεση textboxes με τις τιμές του σύνθετου πλαισίου. Συνεπώς, δεν θα δουλέψει το onLoad event γιατί θα ανοίγει αρχικά η εκάστοτε φόρμα αλλά θα περνάνε συνέχεια τιμές και μετά την φόρτωση. Άρα, φαντάζομαι θα χρησιμοποιήσω afterupdate event για την φόρμα που ανοίγει και θα βάλω εκεί μέσα τα if. Δηλαδή, Private Sub Form_After_Update() Dim MyValues() As String If Not IsNull(Me.OpenArgs) Then if forms!arxikh_forma.combobox_arxikhs_formas = ΤΑΜ1 then Me.k1= MyValues(0) End If else if forms!arxikh_forma.combobox_arxikhs_formas = ΤΑΜ2 then Me.k2= MyValues(0) End If κτλ End Sub Θα δουλέψει με αυτόν τον τρόπο? Ευχαριστώ πολύ |
Καλημέρα Παντελή! Στην αρχική φόρμα βάλε το εξής: Κώδικας: Private Sub Combo_AfterUpdate()Κώδικας: Private Sub Form_Load()Τάσος |
Απ' ότι κατάλαβα: Ο κώδικας του after_update στο combobox της αρχικής φόρμας αποθηκεύει στην μεταβλητή FormOpemArgs: - την τρέχουσα τιμή στο Επώνυμο, -την τιμή που αντιστοιχεί στην επιλογή του combobox, η οποία τιμή είναι ουσιαστικά το όνομα του textbox της φόρμας που ανοίγει, στο οποίο θέλω να μπει το Επώνυμο και -την τιμή του combobox.(Αν και δεν νομίζω να χρειάζεται). Στο onLoad της φόρμας που ανοίγει, διαχωρίζουμε τις τιμές της FormOpemArgs μέσω του κώδικα: MyValues = Split(Me.OpenArgs, ";") Το πεδίο eponymo του κώδικα: Me.eponymo = MyValues(0) δεν υπάρχει κάπου στην φόρμα που ανοίγει και δεν κατάλαβα πως λειτουργεί το me.controls ως εξής: Me.Controls(MyValues(1)) = MyValues(2) Η επιλογή που θα κάνω στο combobox δεν σχετίζεται με κάποιο δεδομένο. Απλά θέλω όταν επιλέξω πχ ΤΑΜ1 από το combobox στην αρχική φόρμα, να ανοίξει η φόρμα που είναι να ανοίξει και το τρέχον επώνυμο της αρχικής φόρμας να μπει στο textbox k1 της νέας φόρμας. Για ΤΑΜ2 αντιστοίχως στο k2 κτλ. Επομένως, έχουμε πχ στην φόρμα MON 4 textboxes με ονομασιές k1, k2, k3 και k4. Σε αυτά τα textboxes θα μπει στο καθένα ένα επώνυμο. Στην αρχική φόρμα, έχουμε βάλει για παράδειγμα όταν επιλέξω από το combo την τιμή ΤΑΜ1, να αποθηκευτούν στην FormOpemArgs πχ το Επώνυμο ΖΑΖΑΡΙΑΔΗΣ και το όνομα του textbox στο οποίο πρέπει να μπει - δηλαδή το k1. Όταν ανοίγει η φόρμα MON, θα πρέπει να γράψω για παράδειγμα MyValues = Split(Me.OpenArgs, ";") και μετά να ανιχνευτεί το που βρίσκεται το k1 στη νέα φόρμα και να περαστεί το Επώνυμο ΖΑΖΑΡΙΑΔΗΣ σε αυτό το πεδίο. Συνεπώς, μήπως έπρεπε να αποθηκεύω σε μία μεταβλητή το όνομα του textbox που μεταφέρω στην μεταβλητή myValues(1) και να το βάλω ίσο με το myValues(0) που είναι το επώνυμο? Δηλαδή dim strCombobx as string strCombobx = myValues(1) me.strCombobx = myValues(0) ? |
Παντελή, αν κατάλαβα καλά τότε στην αρχική φόρμα βάζεις: Κώδικας: Private Sub Combo_AfterUpdate()Κώδικας: Private Sub Form_Load()και MyValues(1) = Eponymo Τάσος |
1 Συνημμένο(α) Νομίζω πως είναι πιο ευέλικτο να διαχειρίζεται η ίδια η φόρμα/στόχος τα χειριστήριά της και όχι η αρχική. Στο παράδειγμα που ανεβάζω, η αρχική φόρμα περνάει στην OpenArgs της φόρμας/στόχος το ListIndex του Combobox και το επώνυμο Κώδικας: Private Sub cmbCash_AfterUpdate()Για παράδειγμα, ο κώδικας της φόρμας της Δευτέρας έχει ως εξής: Κώδικας: Private Sub Form_Load()Κώδικας: strCtrl = Array("Tus1", "Tus2", "Tus3", "Tus4")(astrArgs(0))Γιάννης Υ.Γ. Μια ακόμα καλύτερη-κατά τη γνώμη μου-μέθοδο θα ήταν η δημιουργία διαδικασιών ιδιοτήτων στην αρχική φόρμα από τις οποίες θα διάβαζαν οι φόρμες/στόχοι τα ορίσματα, ανανεωμένα και οποιαδήποτε στιγμή. |
Λειτουργεί μια χαρά σύμφωνα με την προ-τελευταία απάντηση, αλλά λειτουργεί μόνο για την πρώτη τιμή - δηλαδή μόνο για το πρώτο afterupdate. Για το update που κάνω στο επόμενο combobox δεν περνάει η τιμή. Υποθέτω ότι φταίει το ότι ο κώδικας είναι στο onLoad event της φόρμας. Περνάει την πρώτη τιμή στη φόρτωση αλλά μετά έχει ήδη φορτώσει και δεν περνάει τις επόμενες. Καμιά πρόταση για να τοποθετηθεί ο κώδικας σε άλλο event της φόρμας? Και μία άλλη ερώτηση.. Μερικές τιμές από την αρχική φόρμα θέλω να τις κάνω add item σε μερικές λίστες. Πως θα μπορούσα να δουλέψω με αυτή την περίπτωση? Θα μπορούσα ας πούμε να βάλω: Case "TAM5" TargetTextBoxName = "k5" & "." & "AddItem" ? |
Καλησπέρα! Η αρχή λειτουργίας είναι απλή. Περνάς όσες τιμές θέλεις στην OpenArgs και κατόπιν αφου τις περάσεις στο Array MyValues() στη φόρμα προορισμού, μπορείς να τις κατανείμεις στα πεδία που θέλεις. Τάσος |
Μου φαίνεται ότι κατάλαβα πλήρως τον τρόπο με τον οποίο δουλεύει. Πέτυχα και αυτό με την προσθήκη τιμής σε λίστα. Αν κατάλαβα καλά όμως, οι μεταβλητές περνιούνται στο 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 Δες και αυτό Γιώργος |
| Η ώρα είναι 11:46. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.