Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Δημιουργία φόρμας (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/3703-dimioyrgia-formas.html)

alterna 31-05-15 08:01

Δημιουργία φόρμας
 
1 Συνημμένο(α)
Καλημέρα,

Έχω το συνημμένο αρχείο και προσπαθώ να δημιουργήσω φόρμες αλλά τυγχάνω άσχετος.
Έχω 2 ερωτήσεις.
1.Ποιά εντολή πρέπει να δώσω ώστε μετά το πάτημα του οκ να αποθηκεύονται μεν τα δεδομένα εκεί που έχω ορίσει αλλά και να καθαρίζει η φόρμα για νέα συμπλήρωση και τα δεδομένα να καταχωρούνται στη δεύτερη γραμμή.
2.Πως μπορώ να δημιουργήσω σύνδεση ενός κελιού με μακροεντολή?
Δηλαδή πατώντας ο χρήστης πάνω σε ένα κελί να ανοίγει η φόρμα?

Ευχαριστώ εκ των προτέρων

Spirosgr 31-05-15 11:13

Καλημέρα
Για το ζητούμενο χρειάζονται δύο κώδικες:

Θεωρείται, ότι η γραμμή 1 του φύλλου, περιέχει κεφαλίδες.

Ο πρώτος κώδικας μπαίνει στο φύλλο και ενεργοποιήται αν
επιλέξουμε το πρώτο διαθέσιμο κενό κελί στην στήλη Α.
Υπάρχουν και κάποιοι έλεγχοι, ώστε να μην «τρέχει» αν
δεν επιλέξουμε το συγκεκριμένο κελί και μόνο.

Κώδικας:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Lr As Long
    If Target.Column <> 1 Then Exit Sub
    If Target.Row = 1 Then Exit Sub
    If Target.Columns.Count > 1 Then Exit Sub
    If Target.Rows.Count > 1 Then Exit Sub
    Lr = Cells(Rows.Count, 1).End(xlUp).Row + 1
    If UserForm1.Visible = True Then
        Exit Sub
    Else
        If Target.Row = Lr Then UserForm1.Show
    End If
End Sub

Ο δεύτερος, συνδέεται με το κουμπί OK της φόρμας και εισάγει
τα περιεχόμενα των text-boxes 1 και 2 στα κατάλληλα κελιά των στηλών Α και Β.
Ταυτόχρονα, «καθαρίζει» τα text-boxes 1 και 2 και επιλέγει το επόμενο, κενό κελί.

Κώδικας:

Private Sub CommandButton1_Click()
    Dim Lr As Long
    Lr = Cells(Rows.Count, 1).End(xlUp).Row + 1

    Cells(Lr, 1).Value = TextBox1.Value
    Cells(Lr, 2).Value = TextBox2.Value
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox1.SetFocus
    Cells(Lr + 1, 1).Activate
End Sub

Σημειώσεις:
1
Οι κώδικες είναι παραδειγματικοί και θα πρέπει,
να προσαρμοστούν στο ζητούμενο (αποτέλεσμα) του κάθε χρήστη,
αν οι συγκεκριμένες λειτουργίες, δεν καλύπτουν το 100% του αποτελέσματος.
2
Στις ιδιότητες της φόρμας, έχει επιτραπεί η επιλογή κελιών, ενώ η φόρμα είναι «ανοιχτή».

Παρατηρήσεις:
1
Το αυτοματοποιημένο άνοιγμα της φόρμας, για πολλούς λόγους
ένας εκ των οποίων είναι το Undo, ίσως θα έπρεπε να μην υπάρχει και να γίνεται με κουμπί.
2
Επειδή, δεν διευκρινίζεται το περιεχόμενο των text-boxes, ίσως θα έπρεπε να υπάρχει μια μικρή διόρθωση αν
είναι κείμενα, ακαίρεοι, δεκαδικοί, ημερομηνίες κλπ.
3
Επιλογή και διόρθωση, ήδη «γεμάτων» κελιών δεν υποστηρίζεται,
μέσω φόρμας, αφού δεν ζητήθηκε.

alterna 31-05-15 18:44

Ευχαριστώ για την άμεση απάντηση,
Το δεύτερο δουλεύει μια χαρά αλλά το πρώτο για να είμαι ειλικρινής δεν το κατάλαβα καθότι άσχετος.
Πως θα μπεί ο πρώτος κώδικας στο φύλλο?

Spirosgr 31-05-15 21:49

Στο κάτω μέρος της εφαρμογής, υπάρχουν οι εττικέτες των φύλλων.
Εκεί δηλ. που γράφουμε την ονομασία τους.
Στο φύλλο που θέλουμε να «περάσουμε» ένα κώδικα, (συμβάν),
κάνουμε δεξί κλικ και στο menu, επιλέγουμε «Προβολή κώδικα».
Στον «χώρο» που ανοίγει, βάζουμε τον κώδικα που θέλουμε.

Να επισημάνω και πάλι, ότι δεν θα έχεις Undo και καλύτερα, να χρησιμοποιήσεις κουμπί, στην εμφάνιση της φόρμας.

alterna 01-06-15 19:14

Ευχαριστώ Σπύρο για τις κατατοπιστικές απαντήσεις.
Αυτό με το undo δεν το κατάλαβα.

Spirosgr 01-06-15 20:12

Από την στιγμή που θα τρέξει ο κώδικας (τρέχει σε κάθε επιλογή - κλικ)
δεν υπάρχει επιστροφή, σε καμία προηγούμενη ενέργεια.

alterna 01-06-15 20:22

Και μια τελευταία ερώτηση :
Παράδειγμα : Στο πρώτο φύλλο θέλω όταν κάνω κλικ πχ στο A1 να ανοίγει το userform που έχω βάλει στο φύλλο2,και αντίστοιχα κλικ στο A2 του πρώτου φύλλου πάλι, να ανοίγει το userform του φύλλου3

Spirosgr 01-06-15 22:31

Οι φόρμες, δεν ανοίκουν αποκλειστικά σε κάποιο φύλλο.
Μπορούμε να ανοίξουμε μια φόρμα, όποτε θέλουμε και πολλές με όποια σειρά θέλουμε.
Οι παραπάνω κώδικες, δείχνουν την διαδικασία.
Αντοιστιχίζουμε, στο όποιο φύλλο, όποια φόρμα θέλουμε.

alterna 01-06-15 22:40

Ευχαριστώ,
Μπορείς να μου δώσεις μια λύση στο παράδειγμα που παράθεσα παραπάνω?

Spirosgr 02-06-15 09:51

Καλημέρα
Η απάντηση στο post #8, είναι σαφής.

Μπορείς να ανοίγεις, από όποιο φύλλο θέλεις, όποια φόρμα θέλεις ως εξής:

Παράδειγμα:

Έχεις, 5 φύλλα και 3 φόρμες.
Θέλεις, από το φύλλο1, να ανοίγει η UserForm2
από το φύλλο3, να ανοίγει η UserForm3
από το φύλλο5, να ανοίγει η UserForm1

Βάλε στα φύλλα, τον πρώτο κώδικα αντικαθιστόντας, το UserForm1 του παραδείγματος, με την φόρμα που θέλεις να ανοίγει από το συγκεκριμένο φύλλο.
Μετά σε κάθε κουμπί φόρμας, βάζουμε τον δεύτερο κώδικα.

Σημείωση:
Το αρχικό ερώτημα, δεν έκανε λόγο για πολλές φόρμες.
Η εκτέλεση ενός κώδικα, μπορεί να είναι «απλό» πράγμα.
Η σωστή και ασφαλής λειτουργία, είναι «άλλο» κεφάλαιο.
Κανονικά, θα πρέπει να ξέρει κανείς, πόσες φόρμες θα ανοίγουν, από που, να φτιάξει μοναδικά τις μεταβλητές όπου χρειάζεται, να ονομάσει μοναδικά τα Textboxes και κάποια άλλα πράγματα, που δεν είναι εύκολο να αναλυθούν εδώ.


Η ώρα είναι 10:54.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2