Όποιος 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α κάνει τίποτα....
ΤΙΑ
Εμφάνιση 1-15 από 21
Θέμα: VBA και EXCEL
-
02-04-07, 11:17 VBA και EXCEL #1
-
02-04-07, 11:58 Απάντηση: VBA και EXCEL #2
1. Μπορείς να χρησιμοποιήσεις είτε την Format είτε τις WeekdayName & Weekday (Monthname, Month)
ActiveSheet.Cells(1,2) = Format(ActiveSheet.Cells(1,1),"dddd")
ή
ActiveSheet.Cells(1,2) = WeekdayName(Weekday(ActiveSheet.Cells(1,1)))
2. Αντίστοιχα την Format(cell_value, "mmmm") ή την MonthName(Month(cell_value))
3. Format(cell_value, "yyyy") ή Year(cell_value)
4. ActiveSheet.Cells(4,1) = ActiveSheet.Cells(2,1) & " " & ActiveSheet.Cells(3,1)
5.
Κώδικας:If Sheets("Φύλλο30").cells(2,1)=WeekDayName(7) Then Sheets("Φύλλο30").Range("A1:A10").Copy Sheets("Φύλλο40").Range("A1:A10").PasteSpecial xlPasteValues End if If Sheets("Φύλλο30").cells(5,2)=If Sheets("Φύλλο30").cells(5,3) Then ActiveWorkBook.SaveAs Sheets("Φύλλο30").cells(5,2) & ".xls" Else ' ξέρεις τι πρέπει να κάνεις End If
Κώδικας: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 'Μην κάνεις τίποτε :p Εnd If End If
Υπόψη ότι τα περισσότερα είναι γραμμένα από μνήμης οπότε μπορεί να βρεις μικρολαθάκια.Τελευταία επεξεργασία από το μέλος yiapap : 02-04-07 στις 12:06.
Όσο πιο βαθιά βάζουν το χέρι οι εταίροι στις τσέπες μας, τόσο πιο κοντά φθάνουν στα @@ μας
-
02-04-07, 12:08 Απάντηση: VBA και EXCEL #3
Μερικές παρατηρήσεις για το παραπάνω:
- Χρησιμοποιώ την ActiveSheet στην αρχή και όχι συγκεκριμένο όνομα Sheet ώστε να είναι όσο το δυνατόν πιο προσαρμόσιμη η ρουτίνα δλδ να μπορεί να εφαρμοστεί σε οποιοδήποτε Φύλλο είναι ενεργό
- Όταν ψάχνεις, ελέγχεις, μεταβάλεις τιμές ενός κελιού καλό είναι να χρησιμοποιείς την κλάση Cells(row,column) αντί το Range. Δυστυχώς όμως η Cells δεν μπορεί να έχει την αλφαριθμητική σύνταξη για τη διεύθυνση (π.χ. A1, B42 κτλ) όπως η Range οπότε πρέπει να κάνεις μετατροπή. Από την άλλη αυτό κάνει πιο εύκολη τη χρήση της Cells μέσα σε ένα Loop (π.χ. For i=1 to 10: Cells(i,1)="blah": Next i)
- Μην κάνεις ελέγχους με σταθερές τιμές ειδικά σε ημερομηνίες. Π.χ. στο 5. Συγκρίνω το D42 με WeekDayName(7) και ΟΧΙ με "Κυριακή". Έτσι ο κώδικάς σου θα δουλέψει και σε Excel Που στα Regional Settings δεν έχουν Ελληνικά (αρκεί να έχουν βέβαια Weebstartday την Δευτέρα )
- Ψάξε την εντολή With (With ActiveSheet, With Sheets("Φύλλο30")) & End With. Θα σου γλυτώσουν πολύ πληκτρολόγηση!
Όσο πιο βαθιά βάζουν το χέρι οι εταίροι στις τσέπες μας, τόσο πιο κοντά φθάνουν στα @@ μας
-
03-04-07, 01:53 Απάντηση: VBA και EXCEL #4
Φίλε yiapap ευχαριστώ για την πολύτιμη βοήθειά σου αλλά και για τις υποδείξεις σου...
Με τη σειρά μου να σου πω για ένα πρόβλημα που προέκυψε με το saveas...
όπου συμβαίνει το εξής παράδοξο: Την πρώτη φορά που εκτελέστηκε ο κώδικας όλα πήγαν ρολόι...Το τρέχον αρχείο σώθηκε και δημιουργήθηκε και το backup στο τρέχον dir... Από κει και πέρα όσες φορές και αν ανοιγόκλεισε το αρχείο, ρε ως επανεκκίνηση του pc έκανα, μουλάρωσε και το saveas το κάνει στο \my documents kai oxi sto directory που βρίσκεται και το κανονικό αρχείο...Βάζοντας όμως το ChDir "E:\My Documents\Docs" (to path του κανονικού αρχείου) πριν τη γραμμή saveas το σώσιμο γίνεται κανονικά σε αυτό το dir...(Κοίταξα και το help της VBA για το saveas και λέει ότι γίνεται στο current folder... τι να πω...) και έτσι ο κώδικας πήρε περίπου αυτή τη μορφή...
--------------------
Κώδικας:MsgBox ("Closing κλπ...") If Sheets("30").cells(2,1)=WeekDayName(7) Then Sheets("30").Range("A1:A10").Copy Sheets("40").Range("A1:A10").PasteSpecial xlPasteValues End if If Sheets("30").cells(5,2)=Sheets("30").cells(5,3) Then Application.DisplayAlerts = False ActiveWorkbook.Save ChDir "E:\My Documents\Docs" ActiveWorkbook.saveas Filename:=Sheets("0").Cells(20, 1), FileFormat _ :=xlNormal, Password:="lalala", WriteResPassword:="", ReadOnlyRecommended:= _ False, CreateBackup:=False Else MsgBox ("ξέρω τι πρέπει να κάνω κλπ...") End If
Τεσπα, να ρωτήσω και κάτι άλλο...
Υπάρχει τρόπος ταυτόχρονα με το saveas να σβύνεται (ή να απενεργοποιείται κατά κάποιον τρόπο) όλος ο κώδικας και οι macros που μεταφέρονται από το κανονικό αρχείο και στο backup?
Θέλω το saveas αρχείο να μένει γυμνό, μόνο με ότι καταχωρήσεις υπάρχουνβ στα κελιά του, ώστε αν ανοιχτεί να μην γίνεται καμμία ενέργεια προερχόμενη από κώδικα or macro...
tyΤελευταία επεξεργασία από το μέλος amy : 03-04-07 στις 17:48. Αιτία: Add code tag
-
03-04-07, 10:15 Απάντηση: VBA και EXCEL #5
1. Απαγορεύονται τα Greeklish!
2. Ναι το SaveAs σώζει στο CurrentPath που μπορεί να είναι οποιοδήποτε (νομίζω ότι είναι αυτό που βλέπεις όταν κάνεις File->Open). Όμως στο filename αυτή τη στιγμή έχεις μόνο το όνομα αρχείου [Sheets("0").Cells(20, 1)]. Μπορείς να έχεις το full path δλδ
Filename:= "C:\blah\blahblah\" & Sheets("0").Cells(20, 1) & ".xls"
3. Xμ, χμ... Όχι απ' ότι ξέρω ευθέως. Μπορείς να διαγράψεις μόνο Modules όχι κώδικα που βρίσκεται στο ThisWorkook ή στα Sheets.
Μπορείς όμως να το κάνεις πλαγίως. Π.χ. Στο σωσμένο Excel να δώσεις ένα ειδικό όνομα όπως "Mάρτιος 2007_norun.xls"
Μετά στην Workbook.Open να προσθέσεις
If Instr(ActiveWorkBook.Name,"norun")>0 then Exit Sub
δλδ "Αν μέσα στο όνομα βρεις το string"norun" βγες από την ρουτίνα"
Προγραμματιστικά δεν είναι και ότι καλύτερο αλλά τη δουλειά σου την κάνει.
Μπορείς να κάνεις και το αντίστροφο δλδ να ονομάσεις τη "μήτρα" "General_Run.xls" και στον έλεγχο
If Instr(ActiveWorkBook.Name,"General_Run")=0 then Exit Sub
Δλδ αν στο όνομα αρχείου δεν υπάρχει το string "General_Run" τότε έξοδος
4. Πρόσεξε ότι στον κώδικά σου κάνεις 2 φορές Save. Μια κανονικά (overwrite) και μια με SaveAs. Αν δεν το κάνει συνειδητά βγάλε ένα από τα 2 save.Όσο πιο βαθιά βάζουν το χέρι οι εταίροι στις τσέπες μας, τόσο πιο κοντά φθάνουν στα @@ μας
-
03-04-07, 17:34 Απάντηση: VBA και EXCEL #6
1. σορρυ για τα γκρικλις φίλε μου...
2. ευχαριστώ για την σύνταξη του path
3. Thanks για την ευθεία συμβουλή της πλάγιας διαγραφής... Θα την εφαρμόσω... Τα modules όμως πως διαγράφονται οεο?
4. Θεωρώ ότι το πρώτο σκέτο save αφορά το αρχείο που δουλεύω, και το δεύτερο (το saveas) αφορά το αρχείο backup που δημιουργώ... Κάνω λάθος?
5ο και έσχατο (προς το παρόν) που ζητά και αυτό μια λύση είναι το εξής: Επειδή το κελί που παίρνει το όνομά του το saveas αρχείο έχει format ημερομηνίας-ώρας αυτό δημιουργεί την παρενέργεια το όνομα του σωζόμενου αρχείου αντί να είναι "Απριλίου2007.xls" να είναι "39175.xls" που όπως καταλαβαίνεις είναι ο αριθμός που χρησιμοποιεί το excel για την πρέχουσα ημερομηνία... Πως θα τον πηδήσουμε και αυτόν τον σκόπελο?
Και πάλι ευχαριστώ για τον χρόνο που μου διαθέτεις....
-
03-04-07, 19:24 Απάντηση: VBA και EXCEL #7
3. Googlισέ το!
4. Όχι δεν κάνεις λάθος. Απλά δεν θεώρησα ότι ήθελες να σώζεις τις αλλαγές και στη μήτρα
5.
Κώδικας:Dim sFilename As String sFilename=Format(Sheets("0").Cells(20, 1),"mmmm" & " " & Year(Sheets("0").Cells(20, 1)) sFilename="C:\blah\blahblah\" & sFilename & ".xls"
Όσο πιο βαθιά βάζουν το χέρι οι εταίροι στις τσέπες μας, τόσο πιο κοντά φθάνουν στα @@ μας
-
04-04-07, 22:50 Απάντηση: VBA και EXCEL #8
Ως επιμύθιον του project ευχαριστώ τα μάλα για την βοήθειά σου yiapap...
αν μου βγει τίποτε στην πορεία, (κάνα τσατσιλικι όμορφο εννοώ), θα προσπαθήσω να "ξαναεκμεταλλευτώ" την προθυμία σου να μοιραστείς τις γνώσεις σου...
Καλό Πάσχα
-
04-04-07, 23:02 Απάντηση: VBA και EXCEL #9
Καλό Πάρχα και ώς γνωστόν... σε κάποια φάση θα αρχίσεις (-ετε) να πληρώνεις (-ετε)
Όσο πιο βαθιά βάζουν το χέρι οι εταίροι στις τσέπες μας, τόσο πιο κοντά φθάνουν στα @@ μας
-
04-04-07, 23:24 Απάντηση: VBA και EXCEL #10
Λογική η παρατήρηση και απολύτως φυσιολογική η εξέλιξη...
-
12-04-07, 12:03 Απάντηση: VBA και EXCEL #11
Επειδή την ολοκλήρωσα την εφαρμογούλα και τελικά μ'αρέσει, αναρωτιόμουν αν υπάρχει τρόπος μέσω της VBA (στο open ας πούμε) να "εξαφανίζω" τις μπάρες με τα κουμπιά του excel καθώς επίσης και την γραμμή μενού, και να φορτώνω μια δικιά μου γραμμή εργαλείων που έχω φτιάξει και με καλύπτει...
Τι λες?
ΥΓ
Εννοείται ότι όταν ανοίγω γενικώς το excel για άλλες δουλειές θέλω να είναι με τα μενού του και τις μπάρες του όπως το έχει φτιάξει ο Bill...
ty
-
12-04-07, 12:10 Απάντηση: VBA και EXCEL #12Όσο πιο βαθιά βάζουν το χέρι οι εταίροι στις τσέπες μας, τόσο πιο κοντά φθάνουν στα @@ μας
-
12-04-07, 13:08 Απάντηση: VBA και EXCEL #13
-
13-04-07, 09:49 Απάντηση: VBA και EXCEL #14
Βρε yiapap (απευθύνομαι απ' ευθείας πια αφού απ' ότι φαίνεται με έχεις αναλάβει προσωπικά) είπα να βάλω μια δικλείδα ασφαλείας στην οποιαδήποτε αλλαγή κελιού και έβαλα ένα if στο change του sheet που ελέγχει τις τιμές δύο κελιών και αν είναι ίσες να επιτρέπει τις αλλαγές στο φύλλο και αν δεν είναι ίσες να βγάζει ένα μήνυμα προειδοποίησης και να μην επιτρέπει αλλαγές... Το πρόβλημα είναι ότι άσχετα από το μήνυμα οι αλλαγή στο κελί γίνεται και με το enter βγάζει την ειδοποίηση... Οπότε χρειάζεται αναίρεση μετά... Άρα στην πραγματικότητα αυτό που θέλω δεν είναι το "change", αλλά το "before_change", αλλά δεν έχει τέτοιο event στην λίστα του το worksheet....
Καμιά ιδέα?
-
16-04-07, 10:18 Απάντηση: VBA και EXCEL #15
Αυτό που θέλεις είναι το BeforeUpdate αλλά πραγματικά δεν υπάρχει τέτοιο event στο Excel
Για να καταφέρεις αυτό που θέλεις θα σου πρότεινα να χρησιμοποιήσεις την μέθοδο Protect/Unprotect του Worksheet object.
Εναλλακτικά μπορείς να κάνεις την εισαγωγή δεδομένων με μια UserForm (όπου στα textboxes υπάρχει BeforeUpdate) αλλά πάει μακριά η βαλίτσα.Όσο πιο βαθιά βάζουν το χέρι οι εταίροι στις τσέπες μας, τόσο πιο κοντά φθάνουν στα @@ μας
Παρόμοια Θέματα
-
C# και Excel Power point
Από nikos2027 στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 0Τελευταίο Μήνυμα: 07-07-08, 17:29 -
excel και σκορ
Από beto11 στο φόρουμ WindowsΜηνύματα: 4Τελευταίο Μήνυμα: 03-07-08, 17:41 -
Προώθηση εφαρμογής σε VB,VBA και κλειδώματα
Από Kthulhu στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 34Τελευταίο Μήνυμα: 19-02-08, 20:40 -
Πρόβλημα με κώδικα vba
Από sakis297 στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 3Τελευταίο Μήνυμα: 15-09-07, 15:38 -
Πρόβλημα σε Access με μακροεντολές και VBA
Από chal στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 5Τελευταίο Μήνυμα: 01-06-07, 18:09
Bookmarks