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

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

Έχουμε μιλήσει σε προηγούμενο άρθρο τι είναι η 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, θα υπάρξει και επόμενο άρθρο με αρκετές ακόμα.

Μοιράσου το

Αφήστε μία απάντηση