Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Τιμή σε κελί με checkbox (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/2334-timi-se-keli-me-checkbox.html)

manolis 08-02-13 20:51

Τιμή σε κελί με checkbox
 
Καλησπέρα σε όλη την παρέα

Το ερωτημα μου απόψε είναι σχετικό με το checkbox.

Αυτό που προσπαθώ να κάνω είναι όταν τσεκάρω το checkbox να παίρνει ένα κελί μια τιμή η οποία θα είναι κάποιος τύπος και όταν το ξετσεκάρω να σβήνει η τιμή

Για παράδειγμα αυτό που κατάφερα να φτιάξω είναι αυτό
Private Sub CheckBox1_Click()
Range("A1").FormulaR1C1 = "=TODAY()"
End Sub

Αλλα είτε το τσεκάρω ειτε το ξετσεκάρω παίρνει πάντα την τιμη

Προσπαθησα να βρω βοήθεια στο excel αλλα δεν τα κατάφερα

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

gr8styl 08-02-13 21:08

1 Συνημμένο(α)
Μανώλη αν σε εξυπηρετεί το check box από τα στοιχεία Φόρμας, δεν χρειάζεται VBA.
Δες το συνημμένο.

Θανάσης

manolis 08-02-13 21:52

Θανάση σε ευχαριστώ για την λύση που μου πρότεινες.
Με εξυπηρετεί και θα την χρησιμοποιήσω

Εχω δυο ερωτήσεις

Η πρώτη είναι εκτος να τα τσεκάρω και να ξετσεκάρω ενα-ενα ,αν μπορώ και όλα μαζί.

Και η δεύτερη επειδή εχω 50 εγγραφές προς το παρών αν μπορώ να τα δημιουργήσω ολα μαζί. Δοκίμασα να συρω το κελί που περιέχει το check box προς τα κάτω αλλα μου δίνει σε όλα τα κελιά συνδεση στο κελί $C$4 , επίσης δοκίμασα και $C4 και C4 αλλα τίποτα

manolis 08-02-13 21:54

1 Συνημμένο(α)
ξεχασα το αρχείο

gr8styl 09-02-13 01:30

Μανώλη ο παρακάτω κώδικας δημιουργεί 20 CheckBoxes στα κελιά Q1:Q20 (προσάρμοσέ την περιοχή στις ανάγκες σου) και καταχωρεί την τιμή FALSE δηλαδή όχι τσεκαρισμένα
Πατώντας το CheckBox που καλύπτει το Q3 αλλάζει το περιεχόμενο του κελιου Q3 από FALSE σε TRUE
Κάνοντας εισαγωγή κελιών ή γραμμών μεταξύ 5 και 6 τα check boxes μετατοπίζονται και προσαρμόζουν την σύνδεσή τους.

Κώδικας:

Sub Add_CheckBoxes()
Const Rng = "Q1:Q20"
Dim c As Range, b As OLEObject
Application.ScreenUpdating = False
ActiveSheet.Range(Rng).ColumnWidth = 1.5
For Each c In ActiveSheet.Range(Rng)
    c(, 1).Value = False
    Set b = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
            Left:=c.Left, Top:=c.Top, Width:=c.Width, Height:=c.Height)
    With b
        .Placement = xlMoveAndSize
        .LinkedCell = c(, 1).Address
        With .Object
            .BackStyle = fmBackStyleOpaque
            .Caption = ""
        End With
    End With
Next
Application.ScreenUpdating = True
End Sub


manolis 09-02-13 11:56

Θανάση σε ευχαριστώ πολύ για τις λύσεις που μου πρότεινες , με καλύπτουν απόλυτα.
Να είσαι πάντα καλά

Φιλικά

manolis 30-10-18 20:33

1 Συνημμένο(α)
Καλησπέρα σε όλη την παρέα.

Με την βοήθεια του Θανάση έφτιαξα το αρχείο που επισυνάπτω.

Σε αυτό θα ήθελα μια μικρή βοήθεια.

1. Επιλέγουμε την περιοχή που θέλουμε με την γραμμη του κώδικα Const Rng = "Q1:Q20".
Εαν θέλουμε να επιλέξουμε μαζί περισσοτερες περιοχές πχ B2:B10 , D2:D10 & F2:F10 πως μπορεί να γίνει ?

2. Oταν τικάρουμε παραπάνω απο 1 σε κάθε περιοχή (βαθμολογητης - επίπεδο) υπάρχει κάποιος τρόπος να μας ειδοποιεί πχ με Μορφοποίηση υπό όρους. ?

3. Κατα το άνοιγμα και το κλείσιμο του αρχείου υπάρχει κάποια καθυστέρηση.
Σε αυτό μπορεί να γίνει κάποια βελτίωση?


Ευχαριστώ

Spirosgr 30-10-18 22:40

1 Συνημμένο(α)
Γειά σου Μάνο.
Η καθυστέρηση υπάρχει λόγω των check boxes...

Είναι απαραίτητο να υπάρχουν;
Δες μια πρόταση, με διπλό κλικ, στις σκιασμένες στήλες.

Ο κώδικας, είναι σε πολύ αναλυτική μορφή, για να είναι κατανοητό το τι κάνει.

Βάζουμε στην αρχή στα consts, την γραμμή έναρξης (ισχύει για 1-255 ...εδώ 3)
και την γραμμή λήξης περιοχής (απεριόριστο ...εδώ 52)

Επεξήγηση:
Με το διπλό κλικ σε ένα κελί,
αν υπάρχει κενό, τότε βάζει ένα check,
μεταφέρει την τιμή και καθαρίζει όλα τα (υπόλοιπα) διπλανά κελιά.

Αν υπάρχει check, το καθαρίζει (διόρθωση για καταχώρηση εκ παραδρομής)

Σημείωση:
Στις στήλες f,h,j, χρησιμοποιήθηκε η γραμματοσειρά: Marlett με το γράμμα "a"
Μπορούμε να χρησιμοποιήσουμε και την: Wingdings 2 με το γράμμα "P" (Αγγλικό Πι, κεφαλαίο)
*Είναι πιο όμορφο...

kapetang 31-10-18 12:04

Καλησπέρα

Σπύρο, θα πρέπει να ξαναδείς τη γραμμή κώδικα:

If Target.Row < StartRow And Target.Row > End Row Then Exit Sub

Έχω τη γνώμη ότι το And θα πρέπει να γίνει Or

Spirosgr 31-10-18 12:16

Ναί θέλει Or.
Το And, μπήκε εκ παραδρομής...


Η ώρα είναι 15:48.

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


Search Engine Optimization by vBSEO 3.3.2