Προς το περιεχόμενο

VBA και EXCEL


andr40

Προτεινόμενες αναρτήσεις

Δημοσ.

Όποιος 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α κάνει τίποτα....

ΤΙΑ

Δημοσ.

λοιπον φίλε μου, αν εξαιρεσεις το 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

Δημοσ.

Ευχαριστώ πάαααρα πολύ για την βοήθειά σου 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

'Μην κάνεις τίποτε :P

Εnd If

End If

Τώρα είναι όλα ΟΚ... και πάλι thanks..

Αρχειοθετημένο

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

  • Δημιουργία νέου...