Ένας προηγμένος οδηγός VBA για MS Excel

Εάν μόλις ξεκινάτε με το VBA , τότε θα θέλετε να αρχίσετε να μελετάτε τον οδηγό μας VBA για αρχάριους(VBA guide for beginners) . Αλλά αν είστε έμπειρος ειδικός στο VBA και αναζητάτε πιο προηγμένα πράγματα που μπορείτε να κάνετε με το VBA στο Excel , τότε συνεχίστε να διαβάζετε.

Η δυνατότητα χρήσης κωδικοποίησης VBA στο (VBA)Excel ανοίγει έναν ολόκληρο κόσμο αυτοματισμού. Μπορείτε να αυτοματοποιήσετε τους υπολογισμούς στο Excel , με κουμπιά, ακόμη και να στείλετε email. Υπάρχουν περισσότερες δυνατότητες αυτοματοποίησης της καθημερινής εργασίας σας με το VBA από ό,τι φαντάζεστε.

Οδηγός για προχωρημένους VBA για Microsoft Excel(Advanced VBA Guide For Microsoft Excel)

Ο κύριος στόχος της σύνταξης κώδικα VBA στο (VBA)Excel είναι να μπορείτε να εξαγάγετε πληροφορίες από ένα υπολογιστικό φύλλο, να εκτελέσετε διάφορους υπολογισμούς σε αυτό και, στη συνέχεια, να γράψετε τα αποτελέσματα πίσω στο υπολογιστικό φύλλο

Ακολουθούν οι πιο συνηθισμένες χρήσεις του VBA στο Excel .

  • Εισαγάγετε(Import) δεδομένα και εκτελέστε υπολογισμούς
  • Υπολογίστε(Calculate) τα αποτελέσματα από το πάτημα ενός κουμπιού από έναν χρήστη
  • Αποτελέσματα υπολογισμού ηλεκτρονικού ταχυδρομείου(Email) σε κάποιον

Με αυτά τα τρία παραδείγματα, θα πρέπει να μπορείτε να γράψετε μια ποικιλία από τον δικό σας προηγμένο κώδικα Excel VBA .

Εισαγωγή δεδομένων και εκτέλεση υπολογισμών(Importing Data and Performing Calculations)

Ένα από τα πιο συνηθισμένα πράγματα για τα οποία οι άνθρωποι χρησιμοποιούν το Excel(Excel) είναι η εκτέλεση υπολογισμών σε δεδομένα που υπάρχουν εκτός του Excel . Εάν δεν χρησιμοποιείτε VBA , αυτό σημαίνει ότι πρέπει να εισαγάγετε μη αυτόματα τα δεδομένα, να εκτελέσετε τους υπολογισμούς και να εξάγετε αυτές τις τιμές σε άλλο φύλλο ή αναφορά.

Με το VBA , μπορείτε να αυτοματοποιήσετε ολόκληρη τη διαδικασία. Για παράδειγμα, εάν έχετε κατεβάσει ένα νέο αρχείο CSV(CSV) σε έναν κατάλογο στον υπολογιστή σας κάθε Δευτέρα(Monday) , μπορείτε να διαμορφώσετε τον κώδικα VBA ώστε να εκτελείται όταν ανοίγετε για πρώτη φορά το υπολογιστικό φύλλο σας την Τρίτη το(Tuesday) πρωί.

Ο παρακάτω κώδικας εισαγωγής θα εκτελεστεί και θα εισαγάγει το αρχείο CSV(CSV) στο υπολογιστικό φύλλο Excel .

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")
Cells.ClearContents

strFile = “c:\temp\purchases.csv”

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With

Ανοίξτε το εργαλείο επεξεργασίας Excel VBA και επιλέξτε το αντικείμενο Sheet1 . Από τα αναπτυσσόμενα πλαίσια αντικειμένου και μεθόδου, επιλέξτε Φύλλο εργασίας(Worksheet) και Ενεργοποίηση(Activate) . Αυτό θα εκτελεί τον κώδικα κάθε φορά που ανοίγετε το υπολογιστικό φύλλο.

Αυτό θα δημιουργήσει μια συνάρτηση Sub Worksheet_Activate() . Επικολλήστε τον παραπάνω κώδικα σε αυτήν τη συνάρτηση.

Αυτό ορίζει το ενεργό φύλλο εργασίας σε Sheet1 , διαγράφει το φύλλο, συνδέεται με το αρχείο χρησιμοποιώντας τη διαδρομή αρχείου που ορίσατε με τη μεταβλητή strFile και, στη συνέχεια, ο βρόχος With κυκλώνει σε κάθε γραμμή του αρχείου και τοποθετεί τα δεδομένα στο φύλλο ξεκινώντας από το κελί A1 .

Εάν εκτελέσετε αυτόν τον κώδικα, θα δείτε ότι τα δεδομένα του αρχείου CSV εισάγονται στο κενό υπολογιστικό φύλλο σας, στο Φύλλο1(Sheet1) .

Η εισαγωγή είναι μόνο το πρώτο βήμα. Στη συνέχεια, θέλετε να δημιουργήσετε μια νέα κεφαλίδα για τη στήλη που θα περιέχει τα αποτελέσματα των υπολογισμών σας. Σε αυτό το παράδειγμα, ας υποθέσουμε ότι θέλετε να υπολογίσετε τους φόρους 5% που καταβάλλονται για την πώληση κάθε είδους.

Η σειρά των ενεργειών που πρέπει να κάνει ο κωδικός σας είναι:

  1. Δημιουργήστε νέα στήλη αποτελεσμάτων που ονομάζεται φόροι(taxes) .
  2. Κάντε βρόχο στη στήλη πωληθέντων μονάδων(units sold) και υπολογίστε τον φόρο επί των πωλήσεων.
  3. Γράψτε τα αποτελέσματα υπολογισμού στην κατάλληλη σειρά του φύλλου.

Ο παρακάτω κώδικας θα ολοκληρώσει όλα αυτά τα βήματα.

Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
Cells(1, 5) = "taxes"

For Each cell In rng
fltTax = cell.Value * 0.05
Cells(rowCounter, 5) = fltTax
rowCounter = rowCounter + 1
Next cell

Αυτός ο κωδικός βρίσκει την τελευταία σειρά στο φύλλο δεδομένων σας και, στη συνέχεια, ορίζει το εύρος των κελιών (τη στήλη με τις τιμές πώλησης) σύμφωνα με την πρώτη και την τελευταία σειρά δεδομένων. Στη συνέχεια, ο κώδικας περνά μέσα από κάθε ένα από αυτά τα κελιά, εκτελεί τον υπολογισμό του φόρου και γράφει τα αποτελέσματα στη νέα σας στήλη (στήλη 5).

Επικολλήστε τον παραπάνω κώδικα VBA κάτω από τον προηγούμενο κώδικα και εκτελέστε το σενάριο. Θα δείτε τα αποτελέσματα να εμφανίζονται στη στήλη Ε.

Τώρα, κάθε φορά που ανοίγετε το φύλλο εργασίας του Excel , θα βγαίνει αυτόματα και θα λαμβάνει το πιο φρέσκο ​​αντίγραφο δεδομένων από το αρχείο CSV(CSV) . Στη συνέχεια, θα εκτελέσει τους υπολογισμούς και θα γράψει τα αποτελέσματα στο φύλλο. Δεν χρειάζεται πλέον να κάνετε τίποτα χειροκίνητα!

Υπολογισμός αποτελεσμάτων από το πάτημα του κουμπιού(Calculate Results From Button Press)

Εάν προτιμάτε να έχετε πιο άμεσο έλεγχο κατά την εκτέλεση των υπολογισμών, αντί να εκτελούνται αυτόματα όταν ανοίγει το φύλλο, μπορείτε να χρησιμοποιήσετε ένα κουμπί ελέγχου.

Τα κουμπιά ελέγχου(Control) είναι χρήσιμα εάν θέλετε να ελέγξετε ποιοι υπολογισμοί χρησιμοποιούνται. Για παράδειγμα, στην ίδια περίπτωση όπως παραπάνω, τι γίνεται αν θέλετε να χρησιμοποιήσετε φορολογικό συντελεστή 5% για μια περιοχή και φορολογικό συντελεστή 7% για μια άλλη;

Θα μπορούσατε να επιτρέψετε την αυτόματη εκτέλεση του ίδιου κωδικού εισαγωγής CSV , αλλά αφήστε τον κωδικό υπολογισμού φόρου να εκτελείται όταν πατήσετε το κατάλληλο κουμπί.

Χρησιμοποιώντας το ίδιο υπολογιστικό φύλλο όπως παραπάνω, επιλέξτε την καρτέλα Προγραμματιστής(Developer) και επιλέξτε Εισαγωγή(Insert) από την ομάδα Στοιχεία ελέγχου(Controls) στην κορδέλα. Επιλέξτε το κουμπί (push button) ActiveX Control από το αναπτυσσόμενο μενού.

Τραβήξτε το κουμπί σε οποιοδήποτε μέρος του φύλλου μακριά από το σημείο όπου θα μεταφερθούν τυχόν δεδομένα.

Κάντε δεξί κλικ στο κουμπί ώθησης και επιλέξτε Ιδιότητες(Properties) . Στο παράθυρο Ιδιότητες(Properties) , αλλάξτε τη λεζάντα σε αυτό που θέλετε να εμφανίζεται στον χρήστη. Σε αυτήν την περίπτωση μπορεί να είναι Calculate 5% Tax .

Θα δείτε αυτό το κείμενο να αντικατοπτρίζεται στο ίδιο το κουμπί. Κλείστε το παράθυρο ιδιοτήτων(properties) και κάντε διπλό κλικ στο ίδιο το κουμπί. Αυτό θα ανοίξει το παράθυρο του επεξεργαστή κώδικα και ο κέρσορας σας θα βρίσκεται μέσα στη λειτουργία που θα εκτελείται όταν ο χρήστης πατήσει το κουμπί.

Επικολλήστε τον κωδικό υπολογισμού φόρου από την παραπάνω ενότητα σε αυτήν τη συνάρτηση, διατηρώντας τον πολλαπλασιαστή φορολογικού συντελεστή στο 0,05. Θυμηθείτε να συμπεριλάβετε τις ακόλουθες 2 γραμμές για να ορίσετε το ενεργό φύλλο.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

Τώρα, επαναλάβετε τη διαδικασία ξανά, δημιουργώντας ένα δεύτερο κουμπί. Δημιουργήστε τη λεζάντα Calculate 7% Tax .

Κάντε διπλό κλικ σε(Double-click) αυτό το κουμπί και επικολλήστε τον ίδιο κωδικό, αλλά κάντε τον φορολογικό πολλαπλασιαστή 0,07.

Τώρα, ανάλογα με το κουμπί που θα πατήσετε, η στήλη των φόρων θα υπολογιστεί ανάλογα.

Μόλις τελειώσετε, θα έχετε και τα δύο κουμπιά στο φύλλο σας. Κάθε ένα από αυτά θα ξεκινήσει έναν διαφορετικό υπολογισμό φόρου και θα γράψει διαφορετικά αποτελέσματα στη στήλη αποτελεσμάτων. 

Για να το στείλετε, επιλέξτε το μενού Προγραμματιστής(Developer) και επιλέξτε Λειτουργία σχεδίασης(Design Mode) από την ομάδα Στοιχεία ελέγχου(Controls) στην κορδέλα για να απενεργοποιήσετε τη Λειτουργία σχεδίασης(Design Mode) . Αυτό θα ενεργοποιήσει τα κουμπιά. 

Δοκιμάστε να επιλέξετε κάθε κουμπί για να δείτε πώς αλλάζει η στήλη αποτελεσμάτων "φόροι".

Αποτελέσματα υπολογισμού ηλεκτρονικού ταχυδρομείου σε κάποιον(Email Calculation Results to Someone)

Τι γίνεται αν θέλετε να στείλετε τα αποτελέσματα στο υπολογιστικό φύλλο σε κάποιον μέσω email;

Θα μπορούσατε να δημιουργήσετε ένα άλλο κουμπί που ονομάζεται Φύλλο ηλεκτρονικού ταχυδρομείου στο αφεντικό(Email Sheet to Boss) χρησιμοποιώντας την ίδια διαδικασία παραπάνω. Ο κώδικας για αυτό το κουμπί θα περιλαμβάνει τη χρήση του αντικειμένου CDO του Excel για τη διαμόρφωση των ρυθμίσεων email (Excel CDO)SMTP και την αποστολή των αποτελεσμάτων σε μορφή αναγνώσιμη από τον χρήστη.

Για να ενεργοποιήσετε αυτήν τη δυνατότητα, πρέπει να επιλέξετε Εργαλεία και αναφορές(Tools and References) . Κάντε κύλιση προς τα κάτω στη Βιβλιοθήκη Microsoft CDO για Windows 2000(Microsoft CDO for Windows 2000 Library) , ενεργοποιήστε την και επιλέξτε OK .

Υπάρχουν τρεις κύριες ενότητες στον κώδικα που πρέπει να δημιουργήσετε για να στείλετε ένα email και να ενσωματώσετε αποτελέσματα υπολογιστικού φύλλου.

Το πρώτο είναι να ρυθμίσετε μεταβλητές για να κρατήσετε το θέμα, τις διευθύνσεις Προς και Από(From) και το σώμα του email.

Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set ws = ActiveWorkbook.Sheets("Sheet1")
strSubject = "Taxes Paid This Quarter"
strFrom = "[email protected]"
strTo = "[email protected]"
strCc = ""
strBcc = ""
strBody = "The following is the breakdown of taxes paid on sales this quarter."

Φυσικά, το σώμα πρέπει να είναι δυναμικό ανάλογα με τα αποτελέσματα στο φύλλο, επομένως εδώ θα χρειαστεί να προσθέσετε έναν βρόχο που περνάει από το εύρος, εξάγει τα δεδομένα και γράφει μια γραμμή κάθε φορά στο σώμα.

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
strBody = strBody & vbCrLf

For Each cell In rng
     strBody = strBody & vbCrLf
     strBody = strBody & "We sold " & Cells(rowCounter, 3).Value & " of " & Cells(rowCounter, 1).Value _
     & " for " & Cells(rowCounter, 4).Value & " and paid taxes of " & Cells(rowCounter, 5).Value & "."
     rowCounter = rowCounter + 1
Next cell

Η επόμενη ενότητα περιλαμβάνει τη ρύθμιση των ρυθμίσεων SMTP έτσι ώστε να μπορείτε να στέλνετε email μέσω του διακομιστή SMTP σας . Εάν χρησιμοποιείτε το Gmail , αυτή είναι συνήθως η διεύθυνση email σας στο Gmail, ο κωδικός(Gmail) πρόσβασής σας στο Gmail και ο διακομιστής (Gmail)SMTP(Gmail SMTP) του Gmail (smtp.gmail.com).

Set CDO_Mail = CreateObject("CDO.Message") 
On Error GoTo Error_Handling
Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1
Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
 .Update
End With

With CDO_Mail
     Set .Configuration = CDO_Config
End With

Αντικαταστήστε [email protected] και τον κωδικό πρόσβασης με τα στοιχεία του λογαριασμού σας.

Τέλος, για να ξεκινήσει η αποστολή email, εισαγάγετε τον παρακάτω κωδικό.

CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send

Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description

Σημείωση(Note) : Εάν δείτε ένα σφάλμα μεταφοράς κατά την προσπάθεια εκτέλεσης αυτού του κωδικού, είναι πιθανό ότι ο Λογαριασμός σας Google αποκλείει την εκτέλεση «λιγότερο ασφαλών εφαρμογών». Θα χρειαστεί να επισκεφτείτε τη σελίδα ρυθμίσεων των λιγότερο ασφαλών εφαρμογών(less secure apps settings page) και να ενεργοποιήσετε αυτήν τη λειτουργία.

Αφού ενεργοποιηθεί, το email σας θα σταλεί. Αυτό είναι το πώς φαίνεται στο άτομο που λαμβάνει το email των αποτελεσμάτων που δημιουργούνται αυτόματα.

Όπως μπορείτε να δείτε, υπάρχουν πολλά που μπορείτε πραγματικά να αυτοματοποιήσετε με το Excel VBA(Excel VBA) . Δοκιμάστε να παίξετε με τα αποσπάσματα κώδικα που έχετε μάθει σε αυτό το άρθρο και δημιουργήστε τους δικούς σας μοναδικούς αυτοματισμούς VBA .



About the author

"Είμαι ανεξάρτητος ειδικός στα Windows και στο Office. Έχω πάνω από 10 χρόνια εμπειρίας στην εργασία με αυτά τα εργαλεία και μπορώ να σας βοηθήσω να αξιοποιήσετε στο έπακρο. Οι δεξιότητές μου περιλαμβάνουν: εργασία με Microsoft Word, Excel, PowerPoint και Outlook, δημιουργία ιστού σελίδες και εφαρμογές και βοηθώντας τους πελάτες να επιτύχουν τους επιχειρηματικούς τους στόχους."



Related posts