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/1775-aytomati-dimioyrgia-kai-onomasia-fillon.html)

Lefteris 06-04-12 14:23

Αυτόματη δημιουργία και ονομασία φύλλων.
 
Καλησπέρα σε όλους.

Κάθε μήνα, έχω ένα βιβλίο που περιλαμβάνει ένα κεντρικό φύλλο και τόσα φύλλα όσες είναι οι εργάσιμες ημέρες του μήνα, συν τόσα φύλλα, όσα τα Σάββατα του μήνα.

Η ερώτησή μου είναι η εξής:

Μπορώ να δημιουργώ, αυτόματα(να μην ανοίγω φύλλα ένα-ένα και να μην ονομάζω τα φύλλα, ένα-ένα) όσα φύλλα χρειάζομαι κάθε μήνα, δίνοντάς τους ταυτόχρονα την ονομασία της κάθε ημέρας;(020412,030412,040412 κλπ κλπ);

Όπως όλοι γνωρίζετε, είμαι τσακωμένος και δεν μιλάω με την VBA.:023:, για αυτό αδυνατώ να δημιουργήσω μόνος μου κάτι τέτοιο, που θεωρώ ότι δεν μπορεί να γίνει με συναρτήσεις.

Ή, κάνω λάθος;:wink:

Tasos 06-04-12 18:55

1 Συνημμένο(α)
Καλησπέρα φίλε μου!

Αφού δεν θέλεις να χρησιμοποιείς VBA, τότε χρησιμοποίησε VBS.

Κατέβασε το συνημμένο αρχείο, άλλαξε την κατάληξη του σε .vbs
και εκτέλεσε το κάνοντας διπλό κλικ πάνω του.

Θα σου δημιουργήσει ένα νέο αρχείο Excel με τόσα φύλλα όσες και οι ημέρες του μήνα που θα σου ζητηθεί (Εκτός τις Κυριακές).

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

Μπορείς να το ανοίξεις με Notepad για να δεις τον κώδικα που περιέχει.

Τα λέμε...

Τάσος

Spirosgr 06-04-12 21:14

1 Συνημμένο(α)
Καλησπέρα κι από 'μένα
Φίλε Λευτέρη αν και ασχολούμαι με VBA λίγο καιρό τώρα
και προσπαθώ να διαβάζω όποτε έχω χρόνο
Ρίξε μια ματιά να δεις ένα άλλο τρόπο πολύ εύκολο και χρηστικό ως προς τις επιλογές
των φύλλων που θα δημιουργηθούν
Τελικά η VBA είναι πολύ καλό εργαλείο...:thumbup1:
Ευχαριστώ τον Τάσο για τις οδηγίες του στο να μπω στο κλίμα της VBA και να την καταλάβω

Lefteris 06-04-12 22:32

Καλησπέρα σε όλους.

Συγνώμη, αλλά μετά από 15 ώρες στην δουλειά, δεν είμαι και στην καλύτερη δυνατή θέση, να κατανοήσω, σωστά...

Τάσο μου, τι σε κάνει να πιστεύεις ότι VBA ή VBE, κάνει γιά μένα διαφορά, Φίλε μου;;

Δεν καταλαβαίνω, ούτε τον κώδικα, ούτε που πρέπει(και πώς) να τον βάλω γιά να δουλέψει!!:icon_n1:

Βέβαια ...

Παράθεση:

..Με την ίδια μέθοδο (με κάποιες μικροαλλαγές στον κώδικα) μπορείς να ανοίξεις το βιβλίο που περιέχει το μορφοποιημένο φύλλο μιας ημέρας και να το αντιγράψεις όσες φορές χρειαστεί.
...μάλλον αυτό,θα είναι και το πιό ενδιαφέρον κομμάτι..! Να το δούμε;;

Φίλε Σπύρο.

Πρώτα από όλα, ευχαριστώ για το XLS....Μετά γιά την διάθεση, να δώσεις λύση.

Ψιλοζαλίστικα λίγο(όπως είπα, δεν είμαι καθόλου ξεκούραστος).

Ένα πράγμα πού μου έκανε,όμως εντύπωση, είναι ότι με τα βελάκια, αλλάζουν οι μήνες, τα χρόνια, δεν αλλάζουν.!

Τα υπόλοιπα(συγχωρήστε με), θα τα δούμε αύριο το πρωί.

Καλό βράδυ σε όλους.:byebye:

Spirosgr 06-04-12 23:12

Λευτέρη
το ξανά κατέβασα από το φόρουμ για να το δω και τα βελάκια δουλεύουν OK!
Σε κάθε περίπτωση κάνε ένα δεξί κλικ στο κουμπί και έλεγξε το πάλι
Καλή ξεκούραση τα λέμε το πρωί

Lefteris 07-04-12 10:20

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

Τάσο μου, αλήθεια δεν καταλαβαίνω(και δεν έχω κανένα πρόβλημα να το πώ), τίποτα.

Το αρχείο ανοίγει και στο σημειωματάριο, βλέπω τον κώδικα. Οκ! Μετά τι κάνω;

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

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

Άρα, ΔΕν χρειάζομαι δημιουργία κενών φύλλων, αλλά Μετανομασία των υπάρχοντων, ανάλογα με τον μήνα και το έτος που επιλέγω στο κεντρικό φύλλο(Π.χ, στο Α1)

Σπύρο, δεν ξέρω μήπως φταίει ο υπολογιστής μου, αλλά ξεκινώντας, αργεί πολύ να ανοίξει και μετά, γιά αρχή, παρατηρώ αυτα.

Δεν καταλαβαίνω πω΄ς επιλέγω ποια(ΚΕΛΙΆ) θέλω και ποια δεν θέλω
Πατώντας το Create sheet(Tα βελάκια με αλλαγή χρονιάς, δεν μου δουλεύουν-Επιμένω), εμφανίζεται αυτό το μήνυμα.
ActiveSheet.Name = cell.Value
Μετά,, έχει δημιουργήσει, ένα φύλλο…

Και βέβαια να πώ, πως σε καμία περίπτωση δεν θα ήθελα να κλέψω πολύτιμο δημιουργικό χρόνο, από κανέναν σας, προσπαθώντας να βοηθήσετε.

Γιά όποιον έχει χρόνο και θέλει να ασχοληθεί.

Άλλωστε θέμα βελτίωσης είναι.

Spirosgr 07-04-12 12:17

1 Συνημμένο(α)
Λευτέρη
κατέβασα το αρχείο και όλα δουλεύουν καλά στο δικό μου
χωρίς λάθος ή μηνύματα λάθους
δες πάλι τις σημειώσεις μέσα στο φύλλο:coffee2:

Lefteris 07-04-12 13:12

Σπύρο, άνοιξα το τελευταίο συνημμένο και πράγματι δουλεύει κανονικά. Το πρώτο ακόμη και τώρα κάνει τα ίδια.....

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

Σε ευχαριστώ πολύ για τον χρόνο και τον κόπο που διέθεσες.

Spirosgr 07-04-12 13:28

Να 'σαι καλά σ' ευχαριστώ κι εγώ

Tasos 07-04-12 14:59

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

Λευτέρη μου για να δημιουργήσεις οποιονδήποτε αυτοματισμό στην εφαρμογή σου θα χρειαστείς αναγκαστικά ένα πρόγραμμα.

Το πρόγραμμα αυτό μπορεί να είναι γραμμένο σε οποιαδήποτε γλώσσα προγραμματισμού που υποστηρίζει αντικείμενα COM.

Όπως είπε και ο Σπύρος, η VBA είναι πολύ καλή, σου λύνει τα χέρια και σε απαλλάσσει από τις χρονοβόρες εργασίες στα προγράμματα του Office.

Ή λοιπόν χρησιμοποιείς την VBA που παρέχεται στα προϊόντα του Microsoft Office, ή χρησιμοποιείς
VBScript ( VBS ) που έχει σαν βάση την VB με τη διαφορά ότι ο κώδικας της δεν χρειάζεται να ενσωματωθεί σε μια εφαρμογή για να εκτελεστεί.

Αρκεί να γράψει κανείς τον κώδικα σε ένα αρχείο κειμένου και να αλλάξει την κατάληξη του αρχείου από .txt σε .vbs

H VBScript υπάρχει σε κάθε κάθε υπολογιστή από την έκδοση Windows 1998.

Γενικές πληροφορίες για την VB Script μπορεί να δει κανείς εδώ: VBScript - Wikipedia, the free encyclopedia.

Πρότεινα αυτή τη λύση επειδή δεν χρειάζεται να ενσωματωθεί σε αρχείο για να εκτελεστεί.
Εσύ απλά θα πρέπει να μετονομάσεις το αρχείο από .txt σε .vbs για να μπορέσεις να το εκτελέσεις.
Έτσι διατηρείς το αρχείο σου "VBA - free".

Επισυνάπτω ένα παράδειγμα για με βάση το βιβλίο του Σπύρου.

Έχω μετονομάσει το φύλλο "ΚΕΝΤΡΙΚΟ" σε "template".

Αυτό το φύλλο θα περιέχει τις μορφοποιήσεις, τύπους, και τιμές που θα είναι κοινές
στα φύλλα που θα προστεθούν προγραμματιστικά στο βιβλίο και μπορεί να αποκρυφτεί.

Μπορεί λοιπόν κανείς να προσθέσει προγραμματιστικά τα φύλλα για τον μήνα και το έτος που θα του ζητηθούν που θα είναι αντίτυπα του φύλλου "template"
με χρήση του ενσωματωμένου κώδικα VBA ή με χρήση του αρχείου AddWorkSheetsToExcel.vbs (επισυνάπτεται).

Το δεύτερο για να λειτουργήσει, θα πρέπει να βρίσκεται στον ίδιο φάκελο με το αρχείο Main.xls (επισυνάπτεται).

Καλή συνέχεια!

Τάσος

Lefteris 07-04-12 18:45

Τάσο μου, ανοίγω το Excel, που περιέχει μόνο το φύλλο Τemplate, άδειο. Σωστά;

Προσπαθώντας, να ανοίξω τό άλλο αρχείο, παίρνω ένα μήνυμα, με τίτλο.

Windows Script Host.

Σφάλμα: Δεν ήταν δυνατήν η εύρεση του C/Documents and Settings/...Local....../Main.xls.

Eλέγξτε την ορθογραφία του......μπλά-μπλά-μπλά...........

Έσωσα το Main.xls.και σε άλλο φάκελλο, αλλά τα ίδια.

Τι κάνω λάθος;

Tasos 07-04-12 19:23

Λευτέρη,

το *.vbs πρέπει να βρίσκεται στον ίδιο φάκελο με το Main.xls για να λειτουργήσει.

Επίσης μέσα στο βιβλίο Main.xls υπάρχει ήδη κώδικας VBA που κάνει την ίδια δουλειά.

Για να εκτελέσεις αυτόν τον κώδικα VBA, άνοιξε το βιβλίο Main.xls, πάτησε ALT+F8 και στο διάλογο ου θα εμφανιστεί πάτησε το κουμπί "Εκτέλεση" για να εκτελέσεις τη μακροεντολή "CreateWorkSheets".

Το επίπεδο ασφάλειας των μακροεντολών της εφαρμογής πρέπει να είναι στο "μεσαίο" ή "χαμηλό" για να λειτουργήσει ο κώδικας VBA του βιβλίου.

Σε αντίθεση με την Excel, το *.vbs δεν επηρεάζεται από τη ρύθμιση ασφάλειας των μακροεντολών επειδή χρησιμοποιεί το αντικείμενο αυτοματισμού της Excel.

Δοκίμασε και τα λέμε.

Τάσος

Lefteris 08-04-12 01:29

Καλησπέρα-Καλημέρα.

Παράθεση:

...το *.vbs πρέπει να βρίσκεται στον ίδιο φάκελο με το Main.xls για να λειτουργήσει.....
Ναι Τάσο, αλλά γιά να τα βάλω στον ίδιο φάκελλο, πρέπει να τα ανοίξω πρώτα και μετά να τα αποθηκεύσω στον φάκελλο που θέλω. Σωστά, ή κάτι μου ξεφεύγει;

Λέω λοιπόν πως δεν μου ανοίγει καθόλου το αρχείο και μου βγάζει το λάθος που είπα στο προηγούμενο μήνυμά μου.

Spirosgr 08-04-12 09:07

1 Συνημμένο(α)
Καλημέρα στην παρέα
Όπως είπα στην αρχή τώρα μαθαίνω τα "τερτίπια" της VBA
Μία λέξη έπρεπε να αλλάξει στον κώδικα για να απαλλαγούμε από όλους αυτούς τους βασανιστικούς υπολογισμούς στο φύλλο ( αντί Value Έγινε Text)
Έτσι έχουμε την τελική έκδοση απλή και χρηστική:icon_hihi:

kapetang 08-04-12 10:34

Καλημέρα στην παρέα

Σπύρο, σε συγχαίρω για τα πετυχημένα βήματα στην VBA.

Αν θέλουμε τα προστιθέμενα φύλλα να είναι ίδια με το «ΚΕΝΤΡΙΚΟ» θα μπορούσε να χρησιμοποιηθεί παρόμοιος κώδικας, όπως:

Κώδικας:

Sub sheetcreator2()
    Dim cell As Range
    Application.ScreenUpdating = False
    For Each cell In Selection
        Worksheets("ΚΕΝΤΡΙΚΟ").Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = cell.Text
    Next cell
    Application.ScreenUpdating = True
End Sub

Φιλικά/Γιώργος

Lefteris 08-04-12 10:37

Καλημέρα σε όλους.

Φιλε Σπύρο,
Παράθεση:

...Έτσι έχουμε την τελική έκδοση απλή και χρηστική
Ναί. Απλή,χρηστική και κατανοητή!

Μόνο μία ερώτηση γιά να μην έχω κενά!

Στο φύλλο Κεντρικό, τα στοιχεία Data στα κελιά και οι επικεφαλίδες με Column, Είναι για να γεμίσουμε απλά τα κελια και μόνον. Έτσι;

Σε ευχαριστώ και πάλι, πολύ για τον κόπο και τον χρόνο σου.

Lefteris 08-04-12 11:20

Αυτή είναι η απάντησή μου, στον Φίλο Σπύρο, στο Post#8 και είναι σωστή.

.
Παράθεση:

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

..Βλέποντας την απάντηση του Γιώργου, που ουσιαστικά είναι ίδια με αυτή του Τάσου στο post#2,

Παράθεση:

...Με την ίδια μέθοδο (με κάποιες μικροαλλαγές στον κώδικα) μπορείς να ανοίξεις το βιβλίο που περιέχει το μορφοποιημένο φύλλο μιας ημέρας και να το αντιγράψεις όσες φορές χρειαστεί.
..είναι κάτι που είναι πολύ ενδιαφέρον, κάτι που είχα πεί και στο Post μου #6.

Παράθεση:

...από μήνα σε μήνα η μορφοποίηση των φύλλων μου, είναι ίδια. Δηλαδή, υπάρχει έτοιμο βιβλίο(που χρησιμοποιείται σαν πρότυπο) και κάθε μήνα πρέπει να του αλλάζω το όνομα των φύλλων, δίνοντάς τους το όνομα της κάθε ημέρας, γιά να επικοινωνούνε, με το κεντρικό φύλλο, που βάσει της ημερομηνίας, παίρνω διάφορα στοιχεία.

Άρα, ΔΕν χρειάζομαι δημιουργία κενών φύλλων, αλλά Μετανομασία των υπάρχοντων, ανάλογα με τον μήνα και το έτος που επιλέγω στο κεντρικό φύλλο(Π.χ, στο Α1)
Στην περίπτωσή μας λοιπόν, έχουμε το ΚΕΝΤΡΙΚΟΝ, που είναι αμετάβλητο και ένα φύλλο που περιέχει πολλά δεδομένα με συναρτήσεις, μορφοποιήσεις, και πολλά δεδομένα.και είναι ΙΔΙΟ γιά όλλες τις μέρες του μήνα.

Αυτό το φύλλο, λοιπόν είναι εκείνο που πρέπει να αντιγραφεί όσες φορές του ορίσουμε απο το Φύλλο, ΕΠΙΛΟΓΕΣ και τα φύλλα που δημιουργούνται να παίρνουν την ονομασία των ημερών, που έχουμε επιλέξει.

Μήπως εδώ που φτάσαμε,ελπίζω, χωρίς να κάνω κατάχρηση του χρόνου και του κόπου σας, μπορούμε να κάνουμε και αυτό;;

Spirosgr 08-04-12 15:23

Πως ονομάζεις το φύλλο που θέλεις να αντιγράφετε πολλές φορές
γράψε το όνομά του ακριβώς

Lefteris 08-04-12 15:30

Οκ!...Το πήρα το μήνυμα, Σπύρο μου.

Κουράστηκες....Δικαιολογημέ να...,νομίζω.

Ας το αφήσουμε καλύτερα....Σε ευχαριστώ πολύ. Βοήθησες πολύ.

Το θέμα, τελείωσε.

Καλό υπόλοιπο Κυριακής, σε όλους.

Spirosgr 08-04-12 15:35

Λευτέρη
το ακριβώς που έγραψα δεν υπονοεί κάτι
απλά πρέπει να είναι ακριβώς το όνομα του για να μην κάνει λάθος ο κώδικας
ακόμα κι ένας τόννος παίζει ρόλο ή ένα κόμμα κλπ
έλα πες δεν με κουράζεις...

kapetang 08-04-12 18:26

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

Λευτέρη το αρχείο που επισυνάπτω αποτελεί μια τροποποιημένη έκδοση της λύσης που πρότεινε ο Σπύρος.

Ονομάζεται «AddSheetstoWbFinal2.xls» και περιέχει μόνο ένα φύλλο το «ADD_SHEETS», που είναι σχεδόν ίδιο με αυτό που πρότεινε ο Σπύρος.

Το φύλλο αυτό περιέχει τον αναγκαίο κώδικα VBA για την προσθήκη φύλλων στο βιβλίο ίδιων με κάποιο υπάρχον (ΕΠΙΛΟΓΕΣ).

Για να μπορέσεις να το χρησιμοποιήσεις θα πρέπει να το μεταφέρεις στο βιβλίο που έχεις τα φύλλα «ΚΕΝΤΡΙΚΟ», «ΕΠΙΛΟΓΕΣ» και οποιαδήποτε άλλα, εκτός αυτών που θα προσθέτονται αυτόματα.

Αν υποθέσουμε ότι το βιβλίο σου ονομάζεται «ΛΕΥΤΕΡΗΣ.xls» η μεταφορά του φύλλου μπορεί να γίνει, με τα ακόλουθα βήματα:

1) Ανοίγουμε και τα δύο βιβλία (ΛΕΥΤΕΡΗΣ.xls, AddSheetstoWbFinal2.xls).

2) Με ενεργό το AddSheetstoWbFinal2.xls κάνουμε δεξί κλικ στην καρτέλα (Tab) του φύλλου «ADD_SHEETS» και κλικ στην επιλογή «Μετακίνηση ή Αντιγραφή» του μενού συντόμευσης.

3) Στο πλαίσιο διαλόγου επιλέγουμε το βιβλίο «ΛΕΥΤΕΡΗΣ.xls» και το φύλλο του πριν από το οποίο θα μετακινηθεί (αντιγραφεί) το «ADD_SHEETS» και τσεκάρουμε και το πλαίσιο «Δημιουργία αντιγράφου».

4) Κάνουμε κλικ στο OK όσες φορές χρειαστεί για να κλείσουν τα πλαίσια διαλόγου.

5) Αποθηκεύουμε το αρχείο «ΛΕΥΤΕΡΗΣ.xls», που περιέχει και το φύλλο «ADD_SHEETS».

Μετά την προσθήκη του φύλλου «ADD_SHEETS» στο βιβλίο «ΛΕΥΤΕΡΗΣ.xls» όλη η εργασία θα γίνεται από αυτό.

Λευτέρη, αν αντιμετωπίσεις κάποιο πρόβλημα ανέβασε το αρχείο σου για να του προσθέσουμε τον αναγκαίο κώδικα.

Σπύρο ο κώδικας φαίνεται λίγο διαφορετικός επειδή πρόσθεσα κάποιους ελέγχους.

Φιλικά/Γιώργος

Lefteris 08-04-12 20:01

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

Βρισκόμενος συνήθως, στην αντίθετη πλευρά, αυτή εκείνου που απαντάει, κατανοώ και σέβομαι απόλυτα τον κόπο και τον χρόνο, τόσο τον δικό σου Γιώργο, όσον και εκείνο του Σπύρου και ξέρω πολύ καλά πως νοιώθει εκείνος που προσπαθεί να δώσει λύση σε κάποιον.

Αυτός είναι και ο λόγος που συνεχίζω το θέμα.

Αισθάνομαι ομολογουμένως, όμως, φοβερά άβολα.

Γιώργο, σωστά κατάλαβες το ζητούμενο. Αυτό είναι.

Δημιούργησα, ένα μικρό δείγμα, αυτού που θέλω και το επισυνάπτω.

Το μήνυμα, λάθους, που μου βγαίνει, λέει.

Παράθεση:

Σφάλμα εκτέλεσης "1004"

Η μέθοδος, "Indercect", του αντικειμένου "-Global" απέτυχε.
Τι κάνω, λάθος;;

kapetang 08-04-12 22:33

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

Λευτέρη πιστεύω ότι όλοι θέλουμε να βρεθεί λύση στο πρόβλημα, οπότε δεν υπάρχει λόγος να αισθάνεσαι άβολα.

Το αρχείο που ανέβασες δε λειτουργεί στον υπολογιστή μου και μάλιστα βγάζει ένα περίεργο μήνυμα ότι υπάρχει πρόβλημα στο φάκελο που είναι αποθηκευμένο.

Μετέφερα τα φύλλα για τα οποία ενδιαφέρεσαι στο αρχείο που περιέχει το φύλλο «ADD_SHEETS» και ονόμασα το νέο αρχείο «ΛΕΥΤΕΡΗΣ3.xls».

Είναι το αρχείο που επισυνάπτω.

Το αρχείο αυτό λειτουργεί κανονικά στον υπολογιστή μου.

Θα πρέπει να το δοκιμάσεις και στο δικό σου.

Πάντως στο φύλλο «Δείγμα», που θέλεις να αντιγράφεται δεν είδα τύπους.
Έτσι και αν ακόμα το αρχείο λειτουργεί στον υπολογιστή σου, μάλλον δε θα σου είναι χρήσιμο.

Φιλικά/Γιώργος

Lefteris 08-04-12 23:09

Γιώργο, πιθανά να υπάρχει πρόβλημα στον υπολογιστή μου.

Θα το τσεκάρω και αύριο το πρωί στη δουλειά.

Το αρχείο που μου έστειλες(το τελευταίο),ανοίγει κανονικα και δουλεύει, κανονικά.

Η σειρά μόνο, θέλω να είναι διαφορετική.

Δηλαδή, τα νέα φύλλα, να μπαίνουν μεταξύ του φύλλου Start και End και το Δείγμα στο τέλος(Μετά το End)

Βέβαια, πάνω από όλα είναι να καταφέρω στον υπολογιστή μου, να δημιουργήσω τα φύλλα μου, όπως μου περιέγραψες στο προηγούμενο Post σου.

Ευχαριστώ πολύ..

Spirosgr 09-04-12 03:50

1 Συνημμένο(α)
Καλημέρα
Αλλάζοντας κάτι ( τον τρόπο αντιγραφής) στον κώδικα του Γιώργου τώρα έχεις το ζητούμενο
Τα φύλλα που προστίθενται είναι αντίγραφα του "Δείγμα"
με ονομασία των ημερών που επιλέγεις
Και προστίθενται ανάμεσα στα "Start" & "End"
To Original "Δείγμα" παραμένει στο Τέλος.
Χρωμάτισα την ετικέτα του "Δείγμα" για να φανεί καλύτερα
Αν θες την αλλάζεις
Σημείωση
Τα αντεγραμμένα φύλλα έχουν όλες τις ιδιότητες του Original
που σημαίνει ότι ακόμα και το χρώμα τις ετικέτας του φύλλου θα αντιγραφεί
ΥΓ Ο κώδικας είναι πλέον σε Module και οχι στο Φύλλο

Lefteris 09-04-12 10:05

Καλημέρα σε όλους.

Σπύρο, άνοιξα το συνημμένο σου και δουλεύει ακριβώς:thumbup1: όπως ζήτησα.

Θα το τοποθετήσω και θα το τρέξω,στο κανονικό βιβλίο μου και θα σας ενημερώσω, οπωσδήποτε.

Ευχαριστώ πολύ και εσένα και τον Γιώργο, για την υπομονή σας, τον χρόνο και τον κόπο σας.

Ευχαριστώ φυσικά και τον Φίλο μου τον Τάσο, για τις προτάσεις του, που μακάρι να ήμουν ικανός να μπορούσα να τις "ανοίξω" και φυσικά να τις καταλάβω.

Tasos 09-04-12 11:41

1 Συνημμένο(α)
Καλημέρα Λευτέρη!

Η πρόταση μου δεν διαφέρει και πολύ από τις προτάσεις του Σπύρου και του Γιώργου ως προς το αποτέλεσμα.

Απλά δεν χρειάζεται να ενσωματωθεί σε βιβλίο Excel και μπορεί να χρησιμοποιηθεί για όποιο βιβλίο θελήσει κανείς.

Θα το κάνω όσο μπορώ πιο απλό για όποιον θελήσει κάτι αντίστοιχο περιγράφοντας τα βήματα δημιουργίας αυτής της πρότασης:
  • Ανοίγουμε ένα σημειωματάριο ( Notepad ) και επικολλούμε τον κώδικα που υπάρχει στο τέλος του μηνύματος.
  • Για να αποθηκευτεί το έγγραφο κειμένου με την κατάληξη *.vbs, επιλέγουμε το μενού Αρχείο>Αποθήκευση ως...
    Στο διάλογο που θα εμφανιστεί κάνουμε τις ρυθμίσεις όπως φαίνονται στην εικόνα παρακάτω:
Συνημμένο Αρχείο 2901


Εκτελούμε το αποθηκευμένο αρχείο με διπλό κλικ.

Κατά τη ροή του προγράμματος θα μας ζητηθούν τα παρακάτω:
  1. Επιλογή αρχείου Excel στο οποίο θα αντιγραφούν αυτόματα τα φύλλα
  2. Επιλογή του πρότυπου φύλλου προς αντιγραφή
  3. Επιλογή του μήνα και του έτους
Τα πρότυπο φύλλο αντιγράφεται τόσες φορές όσες οι μέρες του μήνα που θα επιλέξουμε ( Εκτός τις Κυριακές ).

Κώδικας:

Option Explicit

Const ErrNoExcelInstalled = 429
Dim XL
Dim XlFileName
Dim WksFunc
Dim wb
Dim sh
Dim wks
Dim wksTemplateName
Dim TheMonth
Dim TheYear
Dim StartDate
Dim EndDate
Dim strDate
Dim i
Dim x
Dim UserResponse
Dim oShell

Function GoToExit()
        XL.ScreenUpdating = True
        XL.Quit
        Set XL = Nothing
        WScript.Quit
End Function

Function SetTheMonth()
    UserResponse = XL.InputBox("Συμπληρώστε το μήνα", "Εισαγωγή μήνα...", , , , , , 1)
    If VarType(UserResponse) = 11 Then
        GoToExit
    ElseIf UserResponse < 1 Or UserResponse > 12 Then
        MsgBox "Συμπληρώστε ένα μήνα ανάμεσα στο 1 και 12 για να συνεχίσετε", 64, "ms-office.gr"
        SetTheMonth
    End If
    SetTheMonth = UserResponse
End Function

Function SetTheYear()
    UserResponse = XL.InputBox("Συμπληρώστε το έτος", "Εισαγωγή έτους...", , , , , , 1)
    If VarType(UserResponse) = 11 Then
        GoToExit
    ElseIf UserResponse < 1900 Or UserResponse > 2099 Then
        MsgBox "Συμπληρώστε ένα έτος ανάμεσα στο 1900 και 2099 για να συνεχίσετε", 64, "ms-office.gr"
        SetTheYear
    End If
    SetTheYear = UserResponse
End Function

Function ThisWorksheetExists()
    ThisWorksheetExists = false
    For Each sh In wb.Sheets
        If sh.Name = strDate Then
            ThisWorksheetExists = True
            Exit function
        End If
    Next
End Function
On Error Resume Next
Set XL = CreateObject("Excel.Application")

If Err.Number  = ErrNoExcelInstalled Then
    MsgBox  "Δεν βρέθηκε εγκατεστημένη έκδοση Microsoft Excel στο σύστημα σας!", 48, "ms-office.gr"
    WScript.Quit
End If
 
On Error Goto 0

XlFileName = XL _
        .GetOpenFilename("Αρχεία Excel (*.xls), *.xls", 0, "Επιλέξτε το αρχείο όπου θα αντιγραφούν τα φύλλα...")
If XlFileName = False Then
    GoToExit
End If

Set wb = XL.Workbooks.Open(XlFileName)
XL.WindowState = -4137
XL.Visible = True

Set oShell = CreateObject("Wscript.Shell")

x = oShell.AppActivate(XL.Caption)

On Error Resume Next

Set UserResponse = XL.InputBox( _
"Επιλέξετε το πρότυπο φύλλο προς αντιγραφή και κάντε κλικ σε ένα κελί.", "Επιλογή πρότυπου φύλλου...", , , , , , 8)

If UserResponse Is Nothing Then
    GoToExit
Else
    wksTemplateName = UserResponse.Parent.Name
End If

On Error Goto 0

WScript.Sleep 200

TheMonth = SetTheMonth
WScript.Sleep 200
TheYear = SetTheYear

StartDate = DateSerial(TheYear, TheMonth, 1)
EndDate = DateSerial(TheYear, TheMonth + 1, 0)

Set WksFunc = XL.WorksheetFunction
XL.ScreenUpdating = False
XL.Calculation = -4135
For i = StartDate To EndDate
    If WksFunc.Weekday(i, 2) < 7 Then
          strDate = WksFunc.Text(i, "[$-408]ddd dd-mm-yy")
        If Not ThisWorksheetExists Then
            wb.Worksheets(wksTemplateName).Copy , wb.Sheets(wb.Sheets.Count) 'XL.ActiveSheet
            Set wks = XL.ActiveSheet
            wks.Name = strDate
        End If
    End If
Next
XL.Calculation = -4105
XL.ScreenUpdating = True
WScript.Quit

Τάσος


Η ώρα είναι 22:11.

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


Search Engine Optimization by vBSEO 3.3.2