Ein fortgeschrittener VBA-Leitfaden für MS Excel

Wenn Sie gerade erst mit VBA beginnen, sollten Sie damit beginnen, unseren VBA-Leitfaden für Anfänger(VBA guide for beginners) zu studieren . Aber wenn Sie ein erfahrener VBA- Experte sind und nach fortgeschritteneren Dingen suchen, die Sie mit VBA in Excel machen können, dann lesen Sie weiter.

Die Möglichkeit, VBA - Codierung in Excel zu verwenden , eröffnet eine ganze Welt der Automatisierung. Sie können Berechnungen in Excel(Excel) , Drucktasten und sogar E-Mails automatisieren . Es gibt mehr Möglichkeiten, Ihre tägliche Arbeit mit VBA zu automatisieren, als Sie vielleicht denken.

Erweiterter VBA-Leitfaden für Microsoft Excel(Advanced VBA Guide For Microsoft Excel)

Das Hauptziel des Schreibens von VBA -Code in Excel besteht darin, dass Sie Informationen aus einer Tabelle extrahieren, eine Vielzahl von Berechnungen damit durchführen und die Ergebnisse dann wieder in die Tabelle schreiben können

Im Folgenden sind die häufigsten Verwendungen von VBA in Excel aufgeführt(Excel) .

  • Importieren Sie(Import) Daten und führen Sie Berechnungen durch
  • Berechnen(Calculate) Sie Ergebnisse von einem Benutzer, der eine Schaltfläche drückt
  • Berechnungsergebnisse per E-Mail(Email) an jemanden senden

Mit diesen drei Beispielen sollten Sie in der Lage sein, eine Vielzahl Ihres eigenen erweiterten Excel-VBA -Codes zu schreiben.

Daten importieren und Berechnungen durchführen(Importing Data and Performing Calculations)

Eines der häufigsten Dinge, für die Menschen Excel verwenden , ist das Durchführen von Berechnungen mit Daten, die außerhalb von Excel vorhanden sind . Wenn Sie VBA(VBA) nicht verwenden , müssen Sie die Daten manuell importieren, die Berechnungen ausführen und diese Werte in einem anderen Blatt oder Bericht ausgeben.

Mit VBA können Sie den gesamten Prozess automatisieren. Wenn Sie beispielsweise jeden Montag eine neue (Monday)CSV -Datei in ein Verzeichnis auf Ihrem Computer heruntergeladen haben, können Sie Ihren VBA -Code so konfigurieren , dass er ausgeführt wird, wenn Sie Ihre Tabelle am Dienstagmorgen(Tuesday) zum ersten Mal öffnen .

Der folgende Importcode wird ausgeführt und importiert die CSV -Datei in Ihre Excel - Tabelle.

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

Öffnen Sie das Excel-VBA - Bearbeitungstool und wählen Sie das Sheet1- Objekt aus. Wählen Sie in den Dropdown-Feldern Objekt und Methode Worksheet und Activate aus . Dadurch wird der Code jedes Mal ausgeführt, wenn Sie die Tabelle öffnen.

Dadurch wird eine Funktion Sub Worksheet_Activate() erstellt . Fügen Sie den obigen Code in diese Funktion ein.

Dadurch wird das aktive Arbeitsblatt auf Sheet1 gesetzt(Sheet1) , das Blatt gelöscht, eine Verbindung zur Datei mithilfe des Dateipfads hergestellt, den Sie mit der Variable strFile definiert haben , und dann durchläuft die With -Schleife jede Zeile in der Datei und platziert die Daten beginnend bei Zelle A1 im Blatt .

Wenn Sie diesen Code ausführen, sehen Sie, dass die Daten der CSV -Datei in Ihre leere Tabelle in Sheet1 importiert werden .

Der Import ist nur der erste Schritt. Als Nächstes möchten Sie eine neue Kopfzeile für die Spalte erstellen, die Ihre Berechnungsergebnisse enthalten wird. Nehmen wir in diesem Beispiel an, Sie möchten die 5 % Steuern berechnen, die auf den Verkauf jedes Artikels gezahlt werden.

Die Reihenfolge der Aktionen, die Ihr Code ausführen sollte, ist:

  1. Erstellen Sie eine neue Ergebnisspalte namens steuern(taxes) .
  2. Durchlaufen Sie die Spalte „Verkaufte Einheiten(units sold) “ und berechnen Sie die Umsatzsteuer.
  3. Schreiben Sie die Berechnungsergebnisse in die entsprechende Zeile des Blattes.

Der folgende Code führt all diese Schritte aus.

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

Dieser Code findet die letzte Zeile in Ihrem Datenblatt und legt dann den Zellbereich (die Spalte mit den Verkaufspreisen) entsprechend der ersten und letzten Datenzeile fest. Dann durchläuft der Code jede dieser Zellen, führt die Steuerberechnung durch und schreibt die Ergebnisse in Ihre neue Spalte (Spalte 5).

Fügen Sie den obigen VBA -Code unter dem vorherigen Code ein und führen Sie das Skript aus. Die Ergebnisse werden in Spalte E angezeigt.

Jetzt wird jedes Mal, wenn Sie Ihr Excel -Arbeitsblatt öffnen, automatisch die neueste Kopie der Daten aus der CSV -Datei abgerufen. Dann führt es die Berechnungen durch und schreibt die Ergebnisse in das Blatt. Sie müssen nichts mehr manuell tun!

Berechnen Sie die Ergebnisse nach Tastendruck(Calculate Results From Button Press)

Wenn Sie lieber eine direktere Kontrolle darüber haben möchten, wann Berechnungen ausgeführt werden, anstatt automatisch ausgeführt zu werden, wenn das Blatt geöffnet wird, können Sie stattdessen eine Steuerschaltfläche verwenden.

Steuerschaltflächen(Control) sind nützlich, wenn Sie steuern möchten, welche Berechnungen verwendet werden. Was ist beispielsweise in demselben Fall wie oben, wenn Sie einen Steuersatz von 5 % für eine Region und einen Steuersatz von 7 % für eine andere verwenden möchten?

Sie könnten zulassen, dass derselbe CSV -Importcode automatisch ausgeführt wird, aber den Steuerberechnungscode ausführen lassen, wenn Sie auf die entsprechende Schaltfläche klicken.

Wählen Sie unter Verwendung derselben Tabelle wie oben die Registerkarte „ Entwickler “ und dann „ (Developer)Einfügen(Insert) “ aus der Gruppe „ Steuerelemente(Controls) “ im Menüband aus. Wählen Sie die Drucktaste (push button) ActiveX Control aus dem Dropdown-Menü aus.

Zeichnen Sie die Drucktaste auf einen beliebigen Teil des Blatts, weg von dem, wo Daten hinkommen.

Klicken Sie mit der rechten Maustaste auf die Schaltfläche und wählen Sie Eigenschaften(Properties) aus . Ändern Sie im Eigenschaftenfenster(Properties) die Beschriftung in das, was Sie dem Benutzer anzeigen möchten. In diesem Fall könnte es Calculate 5% Tax sein .

Dieser Text wird auf der Schaltfläche selbst angezeigt. Schließen Sie das Eigenschaftsfenster(properties) und doppelklicken Sie auf die Drucktaste selbst. Dadurch wird das Code-Editor-Fenster geöffnet, und Ihr Cursor befindet sich innerhalb der Funktion, die ausgeführt wird, wenn der Benutzer die Drucktaste drückt.

Fügen Sie den Steuerberechnungscode aus dem obigen Abschnitt in diese Funktion ein und belassen Sie den Steuersatzmultiplikator bei 0,05. Denken Sie daran, die folgenden 2 Zeilen einzuschließen, um das aktive Blatt zu definieren.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

Wiederholen Sie nun den Vorgang erneut und erstellen Sie einen zweiten Druckknopf. Machen Sie die Überschrift Calculate 7% Tax .

Doppelklicken Sie auf(Double-click) diese Schaltfläche und fügen Sie denselben Code ein, aber machen Sie den Steuermultiplikator zu 0,07.

Nun, je nachdem, welche Schaltfläche Sie drücken, wird die Steuerspalte entsprechend berechnet.

Sobald Sie fertig sind, haben Sie beide Drucktasten auf Ihrem Blatt. Jeder von ihnen initiiert eine andere Steuerberechnung und schreibt unterschiedliche Ergebnisse in die Ergebnisspalte. 

Um dies per SMS zu senden, wählen Sie das Menü „ Entwickler “ und dann „ (Developer)Designmodus(Design Mode) “ aus der Gruppe „ Steuerelemente(Controls) “ im Menüband aus, um den Designmodus zu deaktivieren(Design Mode) . Dadurch werden die Drucktasten aktiviert. 

Versuchen Sie, jede Schaltfläche auszuwählen, um zu sehen, wie sich die Ergebnisspalte „Steuern“ ändert.

Berechnungsergebnisse per E-Mail an jemanden senden(Email Calculation Results to Someone)

Was ist, wenn Sie die Ergebnisse in der Tabelle per E-Mail an jemanden senden möchten?

Sie könnten eine weitere Schaltfläche mit dem Namen E-Mail-Blatt an Chef(Email Sheet to Boss) erstellen, indem Sie dasselbe Verfahren wie oben verwenden. Der Code für diese Schaltfläche umfasst die Verwendung des Excel-CDO - Objekts zum Konfigurieren von SMTP -E-Mail-Einstellungen und das Versenden der Ergebnisse per E-Mail in einem für den Benutzer lesbaren Format.

Um diese Funktion zu aktivieren, müssen Sie Extras und Referenzen(Tools and References) auswählen . Scrollen Sie nach unten zu Microsoft CDO for Windows 2000 Library , aktivieren Sie es und wählen Sie OK .

Der Code, den Sie erstellen müssen, um eine E-Mail zu versenden und Tabellenergebnisse einzubetten, besteht aus drei Hauptabschnitten.

Die erste besteht darin, Variablen einzurichten, die den Betreff, die An- und Absenderadressen(From) und den E-Mail-Text enthalten.

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."

Natürlich muss der Hauptteil dynamisch sein, je nachdem, welche Ergebnisse sich im Blatt befinden, also müssen Sie hier eine Schleife hinzufügen, die den Bereich durchläuft, die Daten extrahiert und eine Zeile nach der anderen in den Hauptteil schreibt.

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

Im nächsten Abschnitt werden die SMTP -Einstellungen eingerichtet, damit Sie E-Mails über Ihren (SMTP)SMTP -Server senden können . Wenn Sie Gmail verwenden , sind dies normalerweise Ihre Gmail -E-Mail-Adresse, Ihr Gmail - Passwort und der Gmail-SMTP -Server (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

Ersetzen Sie [email protected] und das Passwort durch Ihre eigenen Kontodaten.

Um schließlich den E-Mail-Versand einzuleiten, fügen Sie den folgenden Code ein.

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

Hinweis(Note) : Wenn Sie beim Versuch, diesen Code auszuführen, einen Transportfehler sehen, liegt dies wahrscheinlich daran, dass Ihr Google - Konto die Ausführung „weniger sicherer Apps“ blockiert. Sie müssen die Einstellungsseite für weniger sichere Apps(less secure apps settings page) besuchen und diese Funktion aktivieren.

Nachdem dies aktiviert ist, wird Ihre E-Mail gesendet. So sieht es für die Person aus, die Ihre automatisch generierte Ergebnis-E-Mail erhält.

Wie Sie sehen können, gibt es eine Menge, die Sie mit Excel VBA automatisieren können . Versuchen Sie, mit den Codeausschnitten herumzuspielen, die Sie in diesem Artikel kennengelernt haben, und erstellen Sie Ihre eigenen einzigartigen VBA -Automatisierungen.



About the author

Ich bin Freeware-Softwareentwickler und Befürworter von Windows Vista/7. Ich habe mehrere hundert Artikel zu verschiedenen Themen rund um das Betriebssystem geschrieben, darunter Tipps und Tricks, Reparaturanleitungen und Best Practices. Über mein Unternehmen Help Desk Services biete ich auch bürobezogene Beratungsdienste an. Ich habe ein tiefes Verständnis dafür, wie Office 365 funktioniert, welche Funktionen es gibt und wie man sie am effektivsten einsetzt.



Related posts