Χρήσιμες VBA ρουτίνες στο Microsoft Excel (Part 1)
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle - 1 Νοέμβριος 2024
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
Έχουμε μιλήσει σε προηγούμενο άρθρο τι είναι η VBA (Visual Basic for Applications) και τι δυνατότητες έχει μέσα στο Microsoft Excel.
Σε αυτό το άρθρο θα δούμε μερικές ρουτίνες που έχω γράψει οι οποίες μπορούν να εκτελεστούν καλώντας τες σε κάποιο κουμπί ή μετά από κάποιο γεγονός όπως κατά το άνοιγμα του αρχείου.
Αποθήκευση σε καινούργιο αρχείο Excel
Με τη παρακάτω ρουτίνα έχουμε τη δυνατότητα να σώσουμε ένα αρχείο Excel σε ένα άλλο καινούργιο.
Οι παράμετροι:
- Filename:= ορίζουμε το όνομα του αρχείου με Format(Now()) έχουμε τη δυνατότητα να προσθέσουμε και τη τρέχουν ημερομηνία.
- ActiveWorkbook.Close μας δίνει την δυνατότητα να κλείσουμε το αρχείο Excel αφού ολοκληρωθεί η αποθήκευση του PDF.
- Application.Quit μας κλείνει το αρχικό Excel αρχείο χωρίς να προβεί σε αποθήκευση των αλλαγών του
Sub filesave() Application.DisplayAlerts = False Dim FileName As String FileName = ActiveWorkbook.Path & "\arxeio_" ActiveWorkbook.SaveAs (FileName & Format(Now(), "yyyyMMdd") & ".xlsx"), FileFormat:= _ xlOpenXMLWorkbook, CreateBackup:=False ActiveWorkbook.Close False Application.Quit Application.DisplayAlerts = True End Sub
Αποθήκευση του Excel σε PDF
Με τη παρακάτω ρουτίνα έχουμε τη δυνατότητα να σώσουμε ένα αρχείο Excel σε PDF.
Οι παράμετροι:
- .Oriantation ορίζουμε αν το αρχείο θα είναι Portrait ή Landscape
- .PrintArea ορίζουμε το κάδρο μας, δηλαδή πιο κομμάτι θέλουμε από το Excel να εμφανιστεί στο PDF.
- Filename:= ορίζουμε το όνομα του αρχείου με Format(Now()) έχουμε τη δυνατότητα να προσθέσουμε και τη τρέχουν ημερομηνία.
- ActiveWorkbook.Close μας δίνει την δυνατότητα να κλείσουμε το αρχείο Excel αφού ολοκληρωθεί η αποθήκευση του PDF.
Sub savepdf() Application.DisplayAlerts = False With ActiveSheet.PageSetup .Orientation = xlLandscape .PrintArea = "$A$1:$G$100" .PrintTitleRows = ActiveSheet.Rows(2).Address .Zoom = False .FitToPagesTall = False .FitToPagesWide = 1 End With ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ ("C:\Folder\arxeio_" & Format(Now(), "yyyyMMdd") & ".pdf"), Quality:=xlQualityStandard, _ IncludeDocProperties:=False, IgnorePrintAreas:=True, OpenAfterPublish:=False ActiveWorkbook.Close False Application.DisplayAlerts = True
Διαγραφή κολώνας
Με την παρακάτω ρουτίνα μπορούμε να σβήσουμε από ένα φύλλο, στη προκειμένη περίπτωση το “sheet1” μια συγκεκριμένη κολώνα π.χ. την “H”.
Sub deletecolumn() ActiveWorkbook.Sheets("sheet1").Range("H:H").EntireColumn.Delete End Sub
Διαγραφή φύλλου
Με την παρακάτω ρουτίνα μπορούμε να σβήσουμε φύλλα από το Excel που δεν χρειαζόμαστε πλέον, απλά ορίζοντας τα ονόματα τους.
Sub sheetdel() Application.DisplayAlerts = False ActiveWorkbook.Sheets("sheet2").Delete ActiveWorkbook.Sheets("sheet3").Delete ActiveWorkbook.Sheets("sheet4").Delete Application.DisplayAlerts = True End Sub
Μετατροπή των κελιών σε απλές τιμές
Πολλές φορές στο Excel χρησιμοποιούμε functions όπως π.χ. την SUM, αυτές όμως είναι δυναμικές που σημαίνει ότι αν αλλάξουν τα δεδομένα θα αλλάξουν και αυτές. Όταν θέλουμε λοιπόν να κρατήσουμε παγωμένες τις τιμές εξαφανίζοντας τις functions από τις οποίες πήρανε την τιμή τους μπορούμε να το κάνουμε και με την κάτωθι ρουτίνα.
Sub ValuesOnly() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.UsedRange.Value = ws.UsedRange.Value Next ws End Sub
Σβήσιμο κουμπιού
Αν θέλουμε να σβήσουμε το κουμπί με το οποίο καλούμε τις VBA ενέργειες μπορούμε να το κάνουμε με την κάτωθι VBA ρουτίνα.
Sub deletebutton() ActiveSheet.Shapes("onoma_koubiou").Delete End Sub
Αντιγραφή του περιεχομένου με γέμισμα σε όλη τη στήλη
Σε περίπτωση που θέλουμε να κάνουμε αντιγραφή ενός κελιού που μπορεί να περιέχει μια function ή κάποιο κείμενο σε ολόκληρη τη στήλη π.χ από το κελί “Α2” έως το “Α1000” όπως στο παράδειγμα, γίνεται με τη κάτωθι ρουτίνα.
Sub filldown() Worksheets("sheet1").Range("A2:A1000").filldown End Sub
Διαγραφή γραμμών που έχουμε μια συγκεκριμένη τιμή σε κάποια στήλη
Για να διαγράψουμε όποιες γραμμές περιέχουν μια συγκεκριμένη τιμή όπως στο παράδειγμα μας όποιες γραμμές έχουν στη στήλη “D” στο φύλο “sheet1” την τιμή 0. Χρησιμοποιούμε τη κάτωθι ρουτίνα.
Οι παράμετροι:
- Sheets(“…”).Select ορίζουμε το φίλο που μας αφορά.
- Set InputRng = Range(….) ορίζουμε που θα βρίσκεται η τιμή που θέλουμε να ελέγξουμε.
- DeleteStr ορίζουμε την τιμή που ψάχνουμε.
Sub DeleteERows() Application.DisplayAlerts = False Sheets("sheet1").Select Dim rng As Range Dim InputRng As Range Dim DeleteRng As Range Dim DeleteStr As String Set InputRng = Range("D3", "D1000") DeleteStr = 0 For Each rng In InputRng If rng.Value = DeleteStr Then If DeleteRng Is Nothing Then Set DeleteRng = rng Else Set DeleteRng = Application.Union(DeleteRng, rng) End If End If Next DeleteRng.EntireRow.Delete Application.DisplayAlerts = True End Sub
Πώς εκτελούνται
Όταν θα έχουμε τον κώδικα περασμένο στο Excel όπως είχαμε δει στον σύνδεσμο από το παλαιότερο άρθρο, τις καλούμε προσθέτοντας στον κώδικα κάποιο event π.χ. κατά το άνοιγμα του Excel ή τις καλούμε μέσα από τον κώδικα ενός κουμπιού όταν το κάνουμε κλικ.
Private Sub Koumpi_Click() Call deletebutton Call savepdf Call filesave End Sub
Αυτό ήτανε το πρώτο μέρος ρουτίνες VBA, θα υπάρξει και επόμενο άρθρο με αρκετές ακόμα.