Χρήσιμες VBA ρουτίνες στο Microsoft Excel (Part 1)

- Πώς μπορούμε να συνδέσουμε SQL Server με άλλον SQL Server με τη χρήση Linked Server - 3 Νοέμβριος 2025
- Πώς απελευθερώνουμε δεσμευμένο χώρο από datafiles / tempfiles μίας βάσης δεδομένων της Oracle - 1 Σεπτέμβριος 2025
- Πώς μετατρέπουμε μια βάση δεδομένων από Physical Standby σε Logical Standby σε Oracle Data Guard - 2 Ιούνιος 2025
Έχουμε μιλήσει σε προηγούμενο άρθρο τι είναι η 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, θα υπάρξει και επόμενο άρθρο με αρκετές ακόμα.

