andr40 Δημοσ. 2 Απριλίου 2007 Δημοσ. 2 Απριλίου 2007 Όποιος power user της VBA έχει την καλοσύνη ας βοηθήσει γιατί τα εχω κάνει σαλάτα ειδικα με το save as... Στο "WorkBook_Open" (VBA) ενός αρχείου του excel, ορίζω το κελί Α2 του Φύλλο40 να παίρνει την τιμή "Date", το Α1 την τιμή "Dateadd("d", -1, Date)" και το κελί Α3 την τιμή "Dateadd("d", 1, Date)". Συνεπώς, σήμερα ας πούμε, το Α1 δείχνει 30/3/2007, το Α2 δείχνει 31/3/2007 και το Α3 δείχνει 1/4/2007. Θέλω λοιπόν... 1ο) Τα κελιά Β1 έως Β3 με κάποιο τύπο, ή συνάρτηση ή συμπλήρωση του κώδικα στη VBA, να μου δείχνουν τις μέρες που αντιστοιχούν στα Α1 έως Α3, δηλαδή Β1=Παρασκευή, Β2=Σαββάτο, και Β3=Κυριακή. 2ο) Τα κελιά C1 έως C3 με κάποιο τύπο, ή συνάρτηση ή συμπλήρωση του κώδικα στη VBA, να μου δείχνουν το μήνα που αντιστοιχεί στα Α1 έως Α3, δηλαδή C1=Μάρτιος, C2=Μάρτιος, και C3=Απρίλιος. 3ο) Παρομοίως τα D1 έως D3 το έτος, δηλαδή 2007. 4ο) Στα Ε1 έως Ε3 να ενώνω τις C και D στήλες, δηλαδή Ε1=Μάρτιος 2007, Ε2=Μάρτιος 2007, και Ε3=Απρίλιος 2007 5ο και σημαντικότερο) Να συμπληρώσω τον κώδικα στο "WorkBook_BeforeClose" 'ωστε εκτός των άλλων που κάνει, να ελέγχει την τιμή στο Β3 και αν είναι Κυριακή"¨να κάνει copy μια περιοχή του φύλλου30 και paste special "τιμές" σε μια ίδια περιοχή του Φύλλο40 και επίσης να ελέγχει τις τιμές στα Ε2 και Ε3 και όσο τις βρίσκει ίδιες να κάνει saveas το αρχείο με όνομα την τιμή του κελιού Ε2 (πχ Μάρτιος 2007.xls) και αν πετάγεται και το μήνυμα των win που λέει "το αρχείο υπάρχει κλπ" να πατιέται και το "ναι" (ή να μην βγαίνει καθόλου το μηνυμα ακόμα καλύτερα..), και αν οι τιμές δεν είναι ίδιες ξέρω τι πρέπει να κάνει....(να κάνω κάτι και γω ;-))) Να σημειώσω ότι τα 1 έως 4 ερωτήματα προς το παρόν τα έχω κάνει βάζοντας σε όλη την περιοχή τα date και dateadd και μορφοποιώντας τα κελιά σαν ημερομηνία με μορφή ηηηη, μμμμ, εεεε και μμμμ_εεεε.... Με ενδιαφέρει αν γίνεται και με κάποια συνάρτηση ή ακόμα καλύτερα με κώδικα.... 6o) Με το άνοιγμα του αρχείου να γίνεται έλεγχος του κελιού D42 και if η ημερομηνία που έχει το κελί είναι περασμένη από την τρέχουσα του συστήματος, να κάνει copy μια περιοχή του "φύλλο0" και paste ως τιμες σε μια αντίστοιχη περιοχή του "φύλλο30", ενώ ταυτόχρονα 8α βάζει στο D42 του φύλλο0 την τρέχουσα ημερομηνία, else δεν 8α κάνει τίποτα.... ΤΙΑ
gsaous Δημοσ. 3 Απριλίου 2007 Δημοσ. 3 Απριλίου 2007 λοιπον φίλε μου, αν εξαιρεσεις το 6 που δεν καταλαβα τι ακριβως θελεις να κανεις, με τα υπολοιπα κατι εγινε... κατ'αρχην πηγαινε στο excelόφυλλο στα πεδια Β1 - Β3 και βαλε αυτόν τον τύπο =TEXT(A1;"ηηηη") για να σου βγαζει τις ημερες. το Α1 το αλλάζεις σε Α2 και Α3 στα αντιστοιχα κελια. απο εκει και περα ο κωδικας που θες ειναι αυτος (εγώ χρησιμοποιησα το φύλλο1 για να το δοκιμασω κι ολας, εσυ βαλε οτι θες, επισης τα range στα copy paste ειναι τυχαια, εγω εκανα copy το Α3-Ε3 στο Α5): φύλλο1.Cells(2, "A") = VBA.Date φύλλο1.Cells(3, "A") = φύλλο1.Cells(2, 1) + 1 φύλλο1.Cells(1, "A") = φύλλο1.Cells(2, 1) - 1 φύλλο1.Cells(2, "C") = Format(φύλλο1.Cells(2, 1), "mmmm") φύλλο1.Cells(3, "C") = Format(φύλλο1.Cells(3, 1), "mmmm") φύλλο1.Cells(1, "C") = Format(φύλλο1.Cells(1, 1), "mmmm") φύλλο1.Cells(2, "D") = Year(φύλλο1.Cells(2, 1)) φύλλο1.Cells(3, "D") = Year(φύλλο1.Cells(3, 1)) φύλλο1.Cells(1, "D") = Year(φύλλο1.Cells(1, 1)) φύλλο1.Cells(2, "E") = φύλλο1.Cells(2, 3) & " " & φύλλο1.Cells(2, 4) φύλλο1.Cells(3, "E") = φύλλο1.Cells(3, 3) & " " & φύλλο1.Cells(3, 4) φύλλο1.Cells(1, "E") = φύλλο1.Cells(1, 3) & " " & φύλλο1.Cells(1, 4) If φύλλο1.Range("B3") = "Κυριακή" Then φύλλο1.Range("A3:E3").Select Selection.Copy φύλλο1.Range("A5").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False End If If φύλλο1.Range("E3") = φύλλο1.Range("E2") Then Application.DisplayAlerts = False ThisWorkbook.SaveAs (Application.Path & "\" & φύλλο1.Range("E2") & ".XLS") Application.DisplayAlerts = True End If
andr40 Δημοσ. 4 Απριλίου 2007 Μέλος Δημοσ. 4 Απριλίου 2007 Ευχαριστώ πάαααρα πολύ για την βοήθειά σου gsaous... Στο 6 εννοούσα αυτό: WorkBook_Open() : If isdate(Sheets("Φύλλο30").cells(42,4)) then If cdate(Sheets("Φύλλο30").cells(42,4))<Date() Then 'Copy μπλα μπλα 'PasteSpecial μπλα μπλα Sheets("Φύλλο30").cells(42,4)=Date() Else 'Μην κάνεις τίποτε Εnd If End If Τώρα είναι όλα ΟΚ... και πάλι thanks..
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.