| Visual Basic for Applications (VBA) Ερωτήσεις / Απαντήσεις σε σχέση με τη χρήση της VBA. |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#1
| |||
| |||
|
Καλησπέρα σε όλους Θέλω να με βοηθήσετε στο πρόβλημα μου. Εχω σχεδιάσει μια φόρμα στο excel που αποτελείτε απο 4 στήλες και 12 κελιά. Τα κελιά περιέχουν άλλα δεδομένα και άλλα αποτελέσματα κάποιων συναρτήσεων. Πώς μπορώ να δίνω μια τιμή(αριθμιτική) σε ένα κελί και να μου φτιάχνει αυτη την φόρμα ανάλογα με την τιμή; Π.Χ. Αν δώσω την τιμη 2 να μου φτιάξει 2 φορές την φόρμα, άν 3 τρείς φορές κ.ο.κ. Ευχαριστώ εκ των προτέρων |
|
#2
|
|
Φίλε Αργύρη, καλώς όρισες στη παρέα μας. Για πες μας Θέλεις να αντιγράφεις το φύλλο ή την περιοχή των 4χ12 κελιών μόνο; Πες μας που θέλεις να είναι ο προορισμός: σε νέο βιβλίο, νέο φύλλο στο ίδιο βιβλίο ή στο ίδιο φύλλο και πού; Στις συναρτήσεις που λες ότι περιέχονται σε κάποια κελιά, τι είδους αναφορές χρησιμοποιείς σχετικές, απόλυτες, αναφορές στο ίδιο φύλλο/βιβλίο ή άλλο βιβλίο; Για δώσε μας τα φώτα σου στα παραπάνω και ένα παράδειγμα για να μπορέσουμε να σε βοηθήσουμε. Η παρακάτω γραμμή κώδικα Sheets(1).Copy Before:=Sheets(1) Δημιουργεί ένα αντίγραφο του πρώτου φύλλου του βιβλίου σου σαν νεο πρώτο φύλλο, άρα 3 φορές η εκτέλεσή του σου δίνει 3 αντιγραφα του πρώτου φύλλου. Τα λέμε Θανάσης |
|
#3
| |||
| |||
|
Φίλε Θανάση Σου στέλνω σαν συνημμένο αυτο που θέλω να αναπαράγω. Περιμένω νέα σου Φιλικά Αργύρης |
|
#4
|
|
Φίλε Αργύρη, ο παρακάτω κώδικας αντιγράφει (όπως ζήτησες) την περιοχή A5:K18 στο ίδιο φύλλο αρχίζοντας από το κελί Α25 (Δεν μας είπες τον προορισμό οπότε εγώ αυθαίρετα διάλεξα την περιοχή κάτω από τον υπάρχοντα πίνακα), τόσες φορές όσες δείχνει το κελί C3. Τα περιεχόμενα βέβαια στις στήλες P, R, T και V που περιέχουν οι συναρτήσεις σου, πρέπει να φροντίσεις να περιέχουν τις σωστές τιμές. Δεν είμαι σίγουρος ότι θα πρέπει να χρησιμοποιήσεις σχετικές αναφορές σε όλες σου τις συναρτήσεις, νομίζω θα πρέπει να τις ξαναδείς. ![]() Κώδικας: Sub Copy_Table()
Dim src As Range, NofTbls, i As Integer
Set src = Sheets("Φύλλο1").Range("A5:K18")
If WorksheetFunction.IsNumber(Sheets("Φύλλο1").Range("C3").Value) Then
NofTbls = Sheets("Φύλλο1").Range("C3").Value
Range("A20:K" & Range("K:K").Rows.Count).Clear
If NofTbls > 1 Then
For i = 1 To NofTbls
src.Copy Destination:=Cells(5 + i * 20, 1)
Next i
End If
End If
End Sub
Θανάσης |
|
#5
| |||
| |||
|
Φίλε Θανάση Σε ευχαριστώ πολύ. Πώς δουλεύει όμως αυτόματα χωρίς να πρέπει να τρέξω την μακροεντολή? Φιλικά Αργύρης |
|
#6
|
|
Αργύρη καλησπέρα! Μπορείς να δημιουργήσεις ένα κουμπί (στην καρτέλα του προγραμματιστη που μπορείς να εμφανίσεις από τις επιλογές του Excel). Σε οποιουςδήποτε αυτοματισμούς στο Excel, "ΑΠΑΓΟΡΕΥΟΝΤΑΙ" τα συγχωνευμένα κελιά αφού ανάλογα τον κώδικα μπορεί να δημιουργήσουν πρόβλημα στις αναφορές περιοχών του φύλλου. Όπως πολύ καλά είπε και ο Θανάσης βλέποντας τις αναφορές που περιέχει ο πίνακας σου, δεν είναι ξεκάθαρο το τοπίο... αλλά εσύ ξέρεις. Αν θέλεις δες την πρόταση μου στο συνημμένο παρακάτω. Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word Τελευταία επεξεργασία από το χρήστη Tasos : 28-01-11 στις 18:36. |
|
#7
| |
| Παράθεση:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$3" Then Call Copy_Table End If End Sub Αλλά δεν είμαι καθόλου σίγουρος ότι σου χρειάζεται κάτι τέτοιο. Νομίζω η λύση που σου πρότεινε ο Τάσος είναι πολύ πιο καλή. Θανάσης |
|
#8
| |||
| |||
|
Παιδιά ευχαριστώ πολύ Θα το δουλέψω και αν ξανακολλήσω εδώ είστε!!! Φιλικά Αργύρης |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| Εργαλεία Θεμάτων | |
| Τρόποι εμφάνισης | |
| |
Η ώρα είναι 12:16.





Αλλαγή σε γραμμικό τρόπο
