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

- Πώς επαναφέρουμε μία Oracle Database που βρίσκεται σε archive-log mode με RMAN Restore - 1 Δεκέμβριος 2025
- Πώς μπορούμε να συνδέσουμε SQL Server με άλλον SQL Server με τη χρήση Linked Server - 3 Νοέμβριος 2025
- Πώς απελευθερώνουμε δεσμευμένο χώρο από datafiles / tempfiles μίας βάσης δεδομένων της Oracle - 1 Σεπτέμβριος 2025
Σε συνέχεια του προηγούμενου άρθρου θα δούμε μερικές ακόμα ρουτίνες VBA (Visual Basic for Applications) που έχουμε τη δυνατότητα να χρησιμοποιήσουμε στο Microsoft Excel.
Οι ρουτίνες αυτές μπορούν να εκτελεστούν καλώντας τες σε κάποιο κουμπί ή μετά από κάποιο γεγονός όπως κατά το άνοιγμα του αρχείου.
Διαγραφή όσων γραμμών έχουν κενό ένα κελί
Με τη παρακάτω ρουτίνα μπορούμε να διαγράψουμε όσες γραμμές έχουν κενό το κελί σε μια συγκεκριμένη στήλη. Π.χ. Η στήλη “Α” στο φύλλο “sheet1”:
Sub DeleteERowsOther()
Sheets("sheet1").Select
Range("A3:A1000").Select
Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Εκτέλεση εντολών cmd (command prompt) / Putty μέσω του Excel
Με την παρακάτω ρουτίνα έχουμε τη δυνατότητα να εκτελέσουμε κάποιο αρχείο με εντολές ή να τρέξουμε απευθείας εντολές. Στο παράδειγμα καλούμε το plink.cmd(Putty) και μετά καλούμε να αποθηκεύσουμε ένα ping του Google σε έναν φάκελο. Με την παράμετρο /k μετά την εκτέλεση το παράθυρο θα παραμείνει ανοιχτό:
Sub callcmd() Application.DisplayAlerts = False Dim FileName As String FileName = ActiveWorkbook.Path & "\plink.cmd /c " 'gia ektelesi etoimou arxeiou Shell FileName Shell "cmd.exe /c ping google.com" & " && cd\Users\Username\Desktop" & " &&mkdir tester" 'gia apeutheias cmd commands 'me /k to parathiro cmd den tha kleisei Application.DisplayAlerts = True End Sub
Άμεση εκτέλεση αρχείου cmd (command prompt) μέσω του Excel
Μια πιο απλή προσέγγιση της προηγούμενης ρουτίνας για άμεση εκτέλεση ενός έτοιμου cmd αρχείου. Απλά θα πρέπει να βρίσκεται το αρχείο στο ίδιο path με το Excel και το μόνο που πρέπει να παραμετροποίησουμε είναι το όνομά στη παράμετρο shellCommand:
Sub runbat() Application.DisplayAlerts = False Dim folderPath As String Dim shellCommand As String folderPath = Application.ActiveWorkbook.Path shellCommand = """" & folderPath & "\" & "Arxeio.bat" & """" Call Shell(shellCommand, vbNormalFocus) End Sub
Εισαγωγή αρχείου κειμένου στα κελιά του Excel
Με την παρακάτω ρουτίνα μπορούμε να εισάγουμε ένα αρχείο txt σε ένα φύλλο του Excel.
Οι παράμετροι:
- Filename:= ορίζουμε το όνομα του αρχείου.
- Set wsI = wbI.Sheets(“…”) το όνομα του φύλλου που θα τοποθετηθούν τα δεδομένα.
- Set wbO = Workbooks.Open(FileName, Format:=3) τι delimiter (διαχωριστή) θα χρησιμοποιήσουμε με 3 είναι space και με 4 είναι semicolon.
Sub importtxt()
Dim wbI As Workbook, wbO As Workbook
Dim wsI As Worksheet
Dim FileName As String
FileName = ActiveWorkbook.Path & "\apotelesmata.txt"
Set wbI = ThisWorkbook
Set wsI = wbI.Sheets("apotelesmata") '<~~ To fyllo p tha topothetithoun
wsI.Range("A1:AT1000").Clear
'3 = space 4 = semicolon
Set wbO = Workbooks.Open(FileName, Format:=3)
wbO.Sheets(1).Cells.Copy wsI.Cells
wbO.Close SaveChanges:=False
End Sub
Παγώμα εκτέλεσης των επόμενων ρουτινών για χ χρόνο
Με την παρακάτω ρουτίνα μπορούμε να παγώσουμε την εκτέλεση των επόμενων ρουτινών για χ χρόνο. Μπορεί να θέλουμε ένα εύλογο χρονικό διάστημα ώστε να ολοκληρωθεί η προηγούμενη. Π.χ. όπως στο παράδειγμα 30 δευτερόλεπτα:
Sub WaitTimer()
Application.DisplayAlerts = False
Application.Wait (Now + TimeValue("0:00:30"))
Application.DisplayAlerts = True
End Sub
Διαγραφή γραμμών που έχουμε κενή τιμή σε κάποια στήλη
Έχουμε δει παρόμοια ρουτίνα που λειτουργεί όταν σε μια στήλη έχουμε μια συγκεκριμένη τιμή. Η παρακάτω ρουτίνα έχει φτιαχτεί για την περίπτωση που η τιμή είναι κενή
Οι παράμετροι:
- Sheets(“…”).Select ορίζουμε το φίλο που μας αφορά.
- Set InputRng = Range(….) ορίζουμε που θα βρίσκεται η τιμή που θέλουμε να ελέγξουμε.
- DeleteStr ορίζουμε την τιμή που ψάχνουμε.
Sub deleteifcolumnisEmpty()
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("g1", "g10000")
For Each rng In InputRng
If Len(rng.Value) = 0 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
Αντιγραφή σε δεδομένων από ένα φύλλο σε ένα άλλο
Με τη παρακάτω ρουτίνα μπορούμε να αντιγράψουμε τα δεδομένα από ένα φύλλο σε ένα άλλο και έπειτα να διαγράψουμε το αρχικό φύλλο:
Sub copyToanotherSheet()
Application.DisplayAlerts = False
Worksheets("TEMP_sheet").Range("A1:AA10000").Copy Destination:=Worksheets("sheet").Range("A5:AA10005")
Worksheets("TEMP_sheet").Delete
Application.DisplayAlerts = True
End Sub
Σύγκρισή δύο τιμών και εμφάνιση pop-up παραθύρου
Μπορούμε να συγκρίνουμε τιμές και αν δεν πληρεί τις προϋποθέσεις να εμφανιστεί pop-up παράθυρο με κάποιο μήνυμα.
Οι παράμετροι:
- Set Rng1 = Range(“…”) καλούμε την τιμή του κελιού.
- Value ορίζουμε την τιμή που ελέγχουμε αν ισχύει.
- Prompt ορίζουμε το κείμενο στο παράθυρο.
- Title ορίζουμε τον τίτλο του παραθύρου.
Sub Worksheet_Calculate()
Dim Rng1 As Range
Dim Value As String
Dim Prompt As String
Dim Title As String
Set Rng1 = Range("B1")
Value = "Swsto"
Prompt = "Lathos Katametrisi"
Title = "Error"
If Rng1.Value = Value Then
MsgBox Prompt, vbInformation, Title
End
End If
End Sub
Πώς εκτελούνται
Όπως αναφέραμε και στο πρώτο μέρος όταν θα έχουμε τον κώδικα περασμένο στο Excel, τις καλούμε προσθέτοντας στον κώδικα κάποιο event π.χ. κατά το άνοιγμα του Excel ή τις καλούμε μέσα από τον κώδικα ενός κουμπιού όταν το κάνουμε κλικ.

