• Keine Ergebnisse gefunden

Harun Kaplan. Excel VBA Arbeiten mit Excel Elementen. Excel VBA Programmierung Teil 2

N/A
N/A
Protected

Academic year: 2022

Aktie "Harun Kaplan. Excel VBA Arbeiten mit Excel Elementen. Excel VBA Programmierung Teil 2"

Copied!
83
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Excel VBA – Arbeiten mit Excel Elementen

Excel VBA Programmierung – Teil 2

(2)

HARUN KAPLAN

EXCEL VBA – ARBEITEN MIT EXCEL ELEMENTEN

EXCEL VBA PROGRAMMIERUNG –

TEIL 2

(3)

ISBN 978-87-403-2225-5

(4)

INHALT

Über den Autor: Harun Kaplan 5

Vorwort 7

1 Programmierung 8

1.1 Ereignisprozeduren 8

1.2 Arbeitsmappen – Excel Dateien - Workbooks 13

1.3 Tabellenblätter „Worksheets“ 22

1.4 Umgang mit Zellen und Bereichen „Range“ / „Cells“ 33

1.5 Zellen befüllen 47

1.6 Umgang mit der Methode „SpecialCells“ 59

1.7 Umgang mit Kommentaren 62

1.8 Zellen formatieren 65

1.9 Versetzen des Cursors 72

1.10 Zelle verlinken 73

1.11 Optimale Spaltenbreite und Zeilenhöhe einstellen 74 1.12 Druckbereich und Kopf-, Fußzeile definieren 76

1.13 Autofilter setzen 80

Literaturverzeichnis 83

aok.de/nordost Gesundheit in besten Händen

AOK-StarterBonus

Das Vorteilspaket für gesundheitsbewusste und aktive Berufsstarter, Azubis und Stu- dierende bringt bis zu 930 Euro Extra-Geld im Jahr. Gesund leben zahlt sich aus.

Ihre AOK Nordost informiert Sie gern.

(5)

ÜBER DEN AUTOR: HARUN KAPLAN

Harun Kaplan wurde am 25. März 1964 in Ankara – Türkei geboren. Dort verbrachte er seine Kindheit und besuchte die Haupt- und Mittelschule. Er lebte mit seiner Mutter, vier Geschwistern und seinem Großvater zusammen. Sein Taschengeld verdiente er sich an Bahnhöfen und Haltestellen durch Wasser verkaufen beziehungsweise Schuhe polieren.

Er wollte Offizier werden, scheiterte aber an der zweiten Aufnahmeprüfung in Istanbul.

Im Zuge der Familienzusammenführung kam er dann zu seinem Vater nach Deutschland.

Da seine Schulbildung in Deutschland nicht anerkannt wurde, holte er den Hauptschulabschluss nach und lernte parallel die deutsche Sprache. Während dessen fing er bei Daimler AG in Stuttgart in der Küche als Spüler zu arbeiten an. Zugleich half er seinen Freund als Verkäufer in der Markthalle.

Ein Jahr später bestand er die Aufnahmeprüfung für eine Ausbildungsstelle als Betriebsschlosser, heute Industriemechaniker, bei Daimler AG.

Schon während Ausbildungszeit entschloss er sich, weiter zu studieren. Dazu machte er parallel die Fachhochschulreife, um in die Hochschule gehen zu können. Nach der Ausbildung fing er als Transferstraßen-Bediener in der Fertigung an zu arbeiten. Dies war auch die notwendige Berufserfahrung für die Hochschule.

Er kaufte damals von einem älteren Kollegen sein ersten Rechner, ZX81 Sinclair mit 1KB Memory angeschlossen am Fernseher als Monitor, dann einen Commodore 64, dann Commodore 128 und dann endlich einen superschnellen PC mit 128 MB Arbeitsspeicher mit eigenem Monitor. So fing er an zu programmieren. Erst mit GW-Basic und später mit Turbo Pascal in der Technikerschule.

Nach seiner drei jährige Berufserfahrung, meldete er sich in der Robert-Bosch-Abend- Technikerschule in Zuffenhausen an. Sie dauerte vier lange Jahre. Er schloss sie im Jahr 1987 erfolgreich ab. Drei Jahre später, fing er in der Entwicklung im Messraum als Prüfstellenleiter an zu arbeiten. Das war für ihn eine Umstellung vom Arbeiter in Angestellte.

Im Jahr 1992 wechselte er in die Diesel-Motorenentwicklung. Dort entwickelte er unterschiedliche Bauteile. Dabei war eine Datenbank für seine Bauteile mit vielen Daten zu pflegen. Er lernte „learning by doing“ die Excel VBA-Programmierung. Hinzu kamen viele Excel-VBA-Fragen von seinen Kollegen, was seine VBA-Kenntnis weiter vertiefte.

(6)

Sein Traum war ein Buch in Bibliotheken von sich zu haben. Ein Buch, welches möglichst viele VBA-Fragen beantwortet, die sehr häufig gestellt werden.

Er ist Vater von drei Kindern.

Er war zwischen 1992-2000 EDV-Lehrer in der Volkhochschule in Stuttgart und an unterschiedlichen Kulturzentren.

Er trainierte bis vor zehn Jahren aktiv regelmäßig Kampfsport. Heute trainiert er nur um fit zu bleiben. Er hat den 1. Dan in Shotokan-Karate sowie in Ken-Jitsu-Karate und wurde im Jahr 1982 Süddeutscher-Vize-Meister, ein Jahr später Deutscher Meister im Kickboxen.

Heute arbeitet er bei Daimler AG als Entwicklungs-Ingenieur in Stuttgart.

VBA-Programmierung erleichtert sein tägliches Arbeiten sehr.

(7)

VORWORT

Im ersten Buch „Excel VBA - Einführung“ haben wir viele Allgemeininformationen, wie Editor-Umgebung und Sprachkonzept der VBA-Programmierung kennengelernt. Ab diesem Buch fangen wir mit dem Programmieren an. Die meiste Beispiele sind aus der Praxis.

Sie fangen mit einfachsten Elementen der VBA - Sprache an und werden mit steigendem Niveau aufgebaut.

Im zweiten Buch „Excel VBA - Arbeiten mit Excel Elementen“ geht es hauptsächlich um:

• Arbeitsmappen „Workbooks“,

• Tabellenblätter „Worksheets“,

• Umgang mit Zellen und Bereichen „Range“ / „Cells“,

• Umgang mit der Methode „SpecialCells“,

• Funktion / Formel einfügen,

• Umgang mit Kommentaren

Auch hier als Zielgruppe für das Buch wurde der Einsteiger bis hin zum fortgeschrittenen Anwender vorgesehen.

Harun Kaplan

(8)

1 PROGRAMMIERUNG

Wenn wir die VBA-Programmierung als ein Körper betrachten, die Themen bis jetzt waren dessen Hände und Füße. Ab jetzt fangen die Innereien des VBA-Körpers. Hier ist auch umfangreich, aber angenehm spannend. Wir werden von einem Thema zum Nächsten begleitet.

1.1 EREIGNISPROZEDUREN

Ein Ereignis ist ein Ist-Zustand. Das heißt, eine Prozedur wird nach bestimmten Zustand ausgeführt wird. Anders beschrieben, um eine Prozedur ausführen zu können, muss ein bestimmter Ist-Zustand zutreffen. Jede Datei, jede Tabelle wird in ereignisorientierte Programmiersprache als Objekt behandelt.

Die wichtigsten Objektereignissen sind:

• Workbook ruft alle Ereignisse einer Datei auf. Durch einem Doppelklick auf die

“Diese Arbeitsmappe” im Projektfenster, gelangen wir zu dessen Bereich. Dann rufen wir dazu passende Ereignisprozedur auf. Beispielsweise „Open“; „BeforClose“;

„BeforSave“; „Activate“.

• Worksheet ruft alle Ereignis einer Tabelle auf. Durch einem Doppelklick auf die gewünschte Tabelle im Projektfenster gelangen wir zu dessen Bereich. Beispielsweise

„SelectionChange“, „Activate“; “Change“.

Die Namen der Ereignisprozeduren sind fest bzw. starr definiert.

Diese setzt sich zusammen aus:

¾ Objektnamen

¾ Unterstrich „_“ und

¾ Ereignisnamen.

Beispielsweise: „Workbook_open“ oder „Worksheet_Change“.

(9)

1.1.1 EREIGNISSE DER ARBEITSMAPPE „WORKBOOK_“

Alle „Workbook“-Ereignisse sind in der Tabelle unten aufgelistet. Wir werden hier „Open“

und „BeforeClose“ besprechen.

Nun. Zum ersten Beispiel mit „open“: Wenn wir unsere Excel-Datei öffnen, soll sie mich mit „Hallo Kollege“ begrüßen. Dazu sieht unsere Prozedur mit passendem Ereignis, „open“

so aus:

Private Sub Workbook_Open() Worksheets(“VBA”).Select Range(“A1”).Select

MsgBox “Hallo Kollege”

End Sub

Um open-Ereignis einzufügen, gehen Sie wie folgt vor:

• Projekt-Explorer der VBA-Entwicklung aufrufen,

• Auf die „DieseArbeitsmappe“ per Doppelklick gelangen wir in die VBA-Editor,

• Aus dem linken Listenfeld den Eintrag „Workbook“ und im rechten Listenfeld ein passendes Ereignis, hier „open“ selektieren,

• Dann schreiben wir unsere Prozedur.

Abbildung 1: Arbeitsmappen-Open-Ereignis erstellen

(10)

Nächstes Beispiel mit „open“: Wenn wir die Exceldatei geöffnet haben, werden folgende Aktionen durchgeführt:

• Die Tabelle „Datenbank“ vorselektiert,

• Mit dem Befahl „Call“ wird „Menue_Aufrufen“ ausgeführt,

• Mit .OnKey wird zu Funktionstaste „F9“ „Diagramm_erstellen“ zugeteilt,

• Mit .OnTime TimeValue ab angegebene Uhrzeit „Datenbak_aktualisieren“ ausgeführt.

Private Sub Workbook_Open() Worksheets(“Datenbank”).Select Call Menue_Aufrufen

Application.OnKey „{F9}“, „Diagramm_erstellen“

Application.OnTime TimeValue(“08:01:00”), “Datenbank_aktualisieren”

End Sub

Mit „BeforeClose“ führt VBA welche Aktionen vor dem Beenden der Exceldatei aus.

Ein Beispiel mit „BeforClose“: Wir haben im vorherigen Beispiel „Menue_Aufrufen“

aufgeführt. Den Inhalt setzen wir beim Beenden der Exceldatei zurück. Detailinformationen dazu werden wir im Kapitel „Eigene Menüerstellung“ später genauer anschauen.

Private Sub Workbook_BeforClose()

Application.CommandBars(“Worksheet Menu Bar”).Controls(“Datenbank öffnen”).Delete Application.CommandBars(“Worksheet Menu Bar”).Controls(“Aktivitäten”).Delete

End Sub

In unterer Tabelle sind alle Ereignisse des Objektes „Workbook“ aufgelistet.

Ereignisse des „Workbook“-Objekts

Activate Nach dem Wechsel der Excel-Datei ausgeführt AddInstall Ausgeführt, wenn Excel-Datei als AddIn installiert AddUninstall Ausgeführt, wenn Excel-Datei als AddIn deinstalliert

BeforeClose Vor dem Beenden der Excel-Datei ausgeführt BeforePrint Vor dem Drucken der Excel-Datei ausgeführt BeforeSave Vor dem Speichern der Excel-Datei ausgeführt

Deactivate Nach dem Wechsel der Excel-Datei ausgeführt

(11)

NewSheet Beim Einfügen eines neuen Blattes ausgeführt Open Beim Öffnen der Excel-Datei ausgeführt

SheetActivate Beim Wechsel eines Blattes (Tabelle wird aktiviert) ausgeführt SheetBeforeDobleClick Beim einem Doppelklick auf die jeweilige Tabelle ausgeführt SheetBeforeRightClick Ausgeführt, wenn rechte Maustaste in die jeweilige Tabelle betätigt SheetCalculate Ausgeführt, wenn Bezüge oder Formeln neu berechnet werden SheetChange Ausgeführt, wenn mindesten in eine Zelle geändert

SheetDeactivate Beim Wechsel eines Blattes ausgeführt

SheetSelectionChage Bei der Markierungsänderung in einem Blatt ausgeführt WindowActivate Bei einem Fensterwechsel ausgeführt

WindowDeactivate Bei einem Fensterwechsel ausgeführt WindowResize Bei Fenstergrößenänderung ausgeführt Tabelle 1: Ereignisse des Workbooks_Objektes

1.1.2 EREIGNISSE DER TABELLENBLÄTTER „WORKSHEET_“

Ein Tabellenblatt-Ereignis wird mit Worksheet-Objekt definiert. Dieses Ereignis wird bei einer Aktivierung / Deaktivierung eines Tabellenblattes, bei einer Änderung einer Zelle oder auch Pivot-Tabelle aktiviert. Hier gehen wir genauso wie in vorherigem Kapitel vor.

Um ein Tabellenblatt-Ereignis, hier „Activate“, einzufügen, gehen Sie wie folgt vor:

• Projekt-Explorer der VBA-Entwicklung aufrufen,

• die betreffende Tabelle markieren, hier „Tabelle1(VBA)“,

• aus dem linken Listenfeld „Worksheet“ selektieren,

• aus dem rechten das gewünschte Ereignis selektieren, hier „Activate“.

(12)

Abbildung 2: Tabellenblätter-Ereignis erstellen

Erstes Beispiel mit „Activate“. Sobald die jeweilige Tabelle gewählt „Aktiviert“, soll eine Meldung erscheinen:

Private Sub Worksheet_Activate() MsgBox „ Ich wurde gewählt!“

End Sub

Zweites Beispiel soll die aktive beziehungsweise selektierte Zelle mit der Farbe “gelb”

befüllen. Diese passiert aber nur in der Tabelle „Tabelle1(VBA)“. In anderen Tabellen hat dieses Ereignis keine Funktion.

Nun zu unserem Beispiel. Im Rumpf dieses Ereignisses sind die Angaben (ByVal Target As Range), das heißt sinngemäß „Aktivitäten im Bereich der Zelle“.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Selection.Interior

.ColorIndex = 6 .Pattern = xlSolid

.PatternColorIndex = xlAutomatic End With

End Sub

In unterer Tabelle sind alle Ereignisse des Objektes „Worksheet“ aufgelistet.

(13)

Ereignisse des „Worksheet“-Objektes

Activate Nach dem Wechsel einer Tabelle ausgeführt

BeforDobbleClick Bei einem Doppelklick innerhalb einer Tabelle ausgeführt

BeforRightClick Ausgeführt, wenn mit der rechten Maustaste innerhalb einer Tabelle geklickt Calculate Ausgeführt, wenn Bezüge oder Formeln neu berechnet werden

Chage Ausgeführt, wenn mindesten in eine Zelle geändert

Deactivate Ausgeführt, wenn aus dem Blattes zu einem anderem wechselt FollowHyperlink

PivotTableUpdate

SelectionChange Ausgeführt, wenn sich die Markierung in der Tabelle ändert Tabelle 2: Ereignisse des Worksheet-Objektes

1.2 ARBEITSMAPPEN – EXCEL DATEIEN - WORKBOOKS

Wir erkennen eine Excel-Datei an ihrer xls*-Endung. . Solche Exceldateien werden auch als Arbeitsmappe genannt.

Beim Deklarieren werden sie als Workbook-Objekt definiert.

Beispielsweise: Dim <Variabelname> As Workbook.

Wir werden das Thema „Arbeitsmappen / Workbooks“ in folgenden Abschnitten behandeln:

• Erzeugen .Add

• Öffnen .Open

• Speichern .Save / .SaveAs / .Saved

• Schließen .Closed

• Auswählen .Activate

Jede Methode hat teilweise eine lange Argumentenliste. In folgenden Beispielen werden wir zu jede Methode nur die wichtigsten Argumenten anschauen. Ausführlichere Informationen können im Helptext gelesen werden. Und zwar Cursor auf die Methode positionieren, dann

„F1“-Taste drücken.

(14)

1.2.1 ARBEITSMAPPE ERZEUGEN

Eine leere Arbeitsmappe wird mit „Workbooks.Add“ temporär erzeugt. Vor dem Beenden des Excels sollten wir sie noch speichern. Wenn wir keinen festen Speicherort angegeben haben, wird sie im „Standard“-Verzeichnis, also in das Verzeichnis „Eigene Dateien“ gespeichert.

Dieses Verzeichnis kann unter Menü „Extras/Optionen“ im Register „Allgemein“ kontrolliert beziehungsweise neues Verzeichnis angeben werden.

Die Endung .xls* muss nicht explizit angegeben werden. Denn sie wird beim Speichern automatisch angehängt.

Nun sehen wir ein paar Beispiele, wie per VBA so eine Arbeitsmappe erzeugt wird:

Sub Arbeitsmappe_anlegen_ohne_Speicherung() Workbooks.Add

End Sub

Sub Arbeitsmappe_anlegen_1_mit_Speicherung()

Workbooks.Add.SaveAs („Harun_Test2“) ‚gespeichert unter Eigene Dateien End Sub

Sub Arbeitsmappe_anlegen_2_mit_Speicherung()

Workbooks.Add.SaveAs (“C:\Excel\Harun_Test”) ‘gespeichert unter “C:\Excel”

End Sub

Sub Arbeitsmappe_anlegen_2_mit_SET() Dim NeueMappe As Workbook

Set NeueMappe = Workbooks.Add

‚NeueMappe.SaveAs („Harun_Test“) ‚gespeichert unter Eigene Dateien NeueMappe.SaveAs („C:\Excel\Harun_Test“) ‚gespeichert unter „C:\Excel“

End Sub

Mit der SET-Anweisung können wir unsere Arbeit etwas vereinfachen. Damit wird eine Variable zu der Anweisung zugewiesen. Diese Variable, hier „wbNeueMappe“ sollte davor mit der DIM-Anweisung als Workbook dimensioniert werden.

Das untere Beispiel gibt es in der Hilfe des SaveAs (Speichern unter) in VBA. Diese Prozedur erstellt eine neue Arbeitsmappe und fordert dem Benutzer einen Dateiname einzugeben.

Dann wird sie unter neuen Namen gespeichert.

(15)

Sub Arbeitsmappe_anlegen_mit_Anforderung_speichern() Dim NeueMappe As Workbook

Dim Neuer_Name As String Set NeueMappe = Workbooks.Add Do

Neuer_Name = Application.GetSaveAsFilename Loop Until Neuer_Name <> False

newbook.SaveAs Filename:=Neuer_Name End Sub

1.2.2 ARBEITSMAPPE ERMITTELN

Der Dateiname oder der Dateiname mit dem Pfad kann mit diesen beiden Eigenschaften ermittelt:

¾ ThisWorkbook => die Datei, aus der die Prozedur ausgeführt wurde,

¾ ActiveWorkbook => die Datei, die im aktiven Fenster (das Fenster im Vordergrund).

NUR Dateiname: <Eigenschaft>.Name

Dateiname mit Pfad: <Eigenschaft>.FullName beziehungsweise .FullNameURLEncoded Unsere Datei heißt Arbeitsmappe.xls. Unser Beispiel „Arbeitsmappe“ befindet sich auch hier. Nun rufen wir eine zweite Datei „Datei_ThisWorkbook.xls“ auf. Dann führen wir unser Beispiel aus:

Sub Arbeitsmappe()

Dim Name, Vollername, VollernameURL As String Dim Name2, Vollername2, VollernameURL2 As String Name = ThisWorkbook.Name

Vollername = ThisWorkbook.FullName

VollernameURL = ThisWorkbook.FullNameURLEncoded Name2 = ActiveWorkbook.Name

Vollername2 = ActiveWorkbook.FullName

VollernameURL2 = ActiveWorkbook.FullNameURLEncoded MsgBox „Makro wurde ausgeführt aus der Datei : „ & _

vbLf & Name & vbLf & Fullname & vbLf & strFullnameURL & vbLf & _

“Aktive Datei ist “ & vbLf & strName2 & vbLf & strFullname2 & vbLf &

strFullnameURL2 End Sub

(16)

Unser Ergebnis sieht so aus:

Abbildung 3: Arbeitsmappen Informationen in MsgBox

Ein Ergebnis mit einer Server-Angabe kann so aussehen:

Abbildung 4: Beispiel Fullname einer Datei

1.2.3 ARBEITSMAPPE ÖFFNEN

Zum Öffnen einer Arbeitsmappe ist „Workbooks.Open“ verantwortlich.

Wenn wir kein bestimmtes Verzeichnis angegeben haben, wird sie in dem Standardspeicherort gesucht.

Workbooks.Open („Harun_Test“) ‚geöffnet aus dem Standardspeicherort Beim nicht Finden wird eine Fehlermeldung ausgegeben.

Mit komplettem Verzeichnispfad sieht beispielsweise so aus:

Workbooks.Open („C:\Excel\Harun_Test“) ‚geöffnet aus dem Verzeichnis „C:\Excel“

Wenn welche Zellen aus der Tabelle Verknüpfungen haben, können sie zur Aktualisierung ein- oder ausgeschaltet werden. Diese wird mit „UpdateLinks:=1“ eingeschaltet oder mit

„UpdateLinks:=0“ ausgeschaltet.

(17)

Workbooks.Open („C:\Excel\Harun_Test“, UpdateLinks:=0, ReadOnly:=True) ‚geöffnet aus dem Verzeichnis „C:\Excel“, ohne Aktualisierung der Verknüpfungen, schreibgeschützt geöffnet Mit Passwort sieht wie folgt aus:

Workbooks.Open („C:\Excel\Harun_Test“, Password:=“Harun“) ‚Die Passwort geschützte Mappe aus dem Verzeichnis „C:\Excel“ zum Schreiben freigegeben.

Wir können auch eine Arbeitsmappe per Öffnen-Dialog selber auswählen. Dann könnte unser Beispiel so aussehen:

Sub Arbeitsmappe_Öffnen_Fenster_1() ‚aus dem Standardspeicherort Dim strDatei As String

‚Öffnen-Dialog aufrufen

strDatei = Application.GetOpenFilename(„Meine Excel-Dateien (*.xls*), *.xls*“)

‚Selektierte Arbeitsmappe öffnen

Workbooks.Open Filename:=strDatei End Sub

Sub Arbeitsmappe_Öffnen_Fenster() ‚aus dem vorgegebenem Verzeichnis Dim strZiel, strPfad As String

‚Pfad definieren

strPfad = „C:\KAPLAN“

ChDrive „C“

ChDir strPfad

‚Öffnen-Dialog aufrufen

strDatei = Application.GetOpenFilename(„Meine Excel-Dateien (*.xls*), *.xls*“)

‚Selektierte Arbeitsmappe öffnen

Workbooks.Open Filename:=strDatei End Sub

1.2.4 ARBEITSMAPPE SPEICHERN

Zum Schließen einer Arbeitsmappe ist Workbooks.Save verantwortlich. Zum Speichern der Arbeitsmappen gibt es folgende Eigenschaften und Methoden:

• SaveAs diese Methode speichert die Arbeitsmappe unter einem neuen Namen

• Save diese Methode speichert Änderungen in der angegebenen Arbeitsmappe

• Saved diese Eigenschaft prüft, ob eine Arbeitsmappe seit der letzten Änderung gespeichert wurde. Wenn ja Dann True.

(18)

Sub speichern_mit_saveas_1() ‘speichert die aktive Arbeitsmappe unter neuen Namen ab Workbook.SaveAs (“VBA.xlsx”)

End Sub

Sub speichern_mit_save_1() ‚speichert nur die aktive Arbeitsmappe ActiveWorkbook.Save

End Sub

Sub speichern_mit_save_2() ‚speichert alle offene Arbeitsmappe Dim AMappen As Workbook

For Each AMappen In Application.Workbooks AMappen.Save

Next AMappen End Sub

Mit dem nächsten Beispiel wird die Datei unter neuen Namen gespeichert, wenn sie seit letzter Änderung nicht gespeichert ist.

Grau ist alle Theorie.

Zeit für etwas Farbe.

kfw.de/karriere

(19)

Sub speichern_mit_saved() If ActiveWorkbook.Saved Then

MsgBox “Bereits gespeichert.”

Else

ActiveWorkbook.SaveAs (“Harun_TTest.xlsx”) End If

End Sub

1.2.5 ARBEITSMAPPE SCHLIESSEN

Zum Schließen einer Arbeitsmappe ist „Workbooks.Close“ verantwortlich. Alles was erstellt beziehungsweise geöffnet wurde, muss wieder geschlossen werden. Mit der Methode .Close wird eine Arbeitsmappe geschlossen. Wenn wir ohne Attributen, also nur mit der Close- Methode beenden und haben davor eine Änderung, dann bekommen wir eine „Speichern“- Meldung angezeigt.

Workbooks(„Harun_Test.xlsx“).Close ‚Die Arbeitsmappe wird geschlossen ActiveWorkbook.Close ‚Die aktive Arbeitsmappe wird geschlossen

ThisWorkbook.Close SaveChage:=True ‚Die Arbeitsmappe aus der Prozedur gestartet wurde, wird beendet mit Speichern.

Workbooks(„Harun_Test.xlsx“).Close SaveChanges:=True ‚Beenden mit Speichern Workbooks(„Harun_Test.xlsx“).Close SaveChanges:=False ‚Beenden ohne Speichern

Das folgende Beispiel beendet sämtliche Arbeitsmappen und speichert die darin vorgenommenen Änderungen, außer der Arbeitsmappe, aus der die Prozedur ausgeführt wird.

Sub beenden_alle_Dateien_Arbeitsmappen () For Each wb In Workbooks

If wb.Name <> ThisWorkbook.Name Then wb.Close SaveChange:=True

End If Next wb End Sub

(20)

1.2.6 DATEN IN DIE GESCHLOSSENE DATEI EINTRAGEN

Mit den beiden vorherigen Beispielen werden wir eine Prozedur so schreiben, dass damit einige Einträge in eine „geschlossene“ Datei eingetragen werden. Praktisch wird die Zieldatei im Hintergrund geöffnet, einzutragende Werte eingetragen und speichernd geschlossen.

Genauer Umgang mit Cells beziehungsweise mit Range werden wir später ausführlicher behandeln.

Sub SchreibeInEineExcelDatei() Dim strName, strVorname As String Dim intZelle As Integer

‚Bildschirmaktualliesierung deaktivieren Application.ScreenUpdating = False

‚Zieldatei wird im Hintergrund geöffnet

Workbooks.Open Filename:=”C:\Excel\Test_Harun.xls”

‚Letzte beschreibbare Zelle in der Zieldatei finden intZelle = Cells(Rows.Count, 1).End(xlUp).Row + 1

‚einzutragende Einträge strName = „Kaplan“

strVorname = „Harun“

‚Einträge

Cells(intZelle, 1).Value = strName Cells(intZelle, 2).Value = strVorname

‚Zieldatei speichernd schließen

ActiveWorkbook.Close SaveChanges:=True

‚Bildschirmaktualliesierung aktivieren Application.ScreenUpdating = True End Sub

Ich denke, unser Beispiel ist selbsterklärend. Deshalb machen wir weiter.

1.2.7 ANZAHL DER GEÖFFNETEN ARBEITSMAPPEN ERMITTELN

Mit der Funktion „Workbooks.Count“ können wir der Anzahl der geöffneten Arbeitsmappen ermitteln. Unser Beispiel dazu:

Sub AnzahlMappenErmitteln() Dim intAnzahl As Integer

intAnzahl = „Anzahl der geöffneten Arbeitsmappen: „ & Workbooks.Count MsgBox intAnzahl

End Sub

(21)

1.2.8 ARBEITSMAPPE / TABELLE SCHÜTZEN & SCHUTZ BEHEBEN

Selbstverständlich kann eine Arbeitsmappe beziehungsweise eine Tabelle geschützt und auch den Schutz behoben werden. Mit der Methode „Protect“ kann ein Arbeitsmappe / Arbeitsblatt vor Änderung geschützt beziehungsweise mit der Methode „Unprotect“ den Schutz behoben werden.

Das Beispiel dazu sieht wie folgt aus:

Sub Schützen_und_beheben() Dim strDateiname As String

strDateiname = ActiveWorkbook.Name

Workbooks(strDateiname).Protect ‚Arbeitsmappe Schutz aktiviert Workbooks(strDateiname).Unprotect ‚Arbeitsmappe Schutz deaktiviert End Sub

1.2.9 ZELLEN SCHÜTZEN / BEHEBEN

Bestimmte Zellen bei Bedarf mit der Methode „.Loced“ geschützt werden. Im ersten Beispiel wird der Bereich „C2:D5“ einer Tabelle mit der Methode „.Loced=True“ geschützt. Davor heben wir vom aktuellen Tabellenblatt mit der Methode „.Cells.Loced = False“ den Schutz auf.

Sub Bestimmter_Bereich_schützen() ActiveSheet.Unprotect „Harun“

ActiveSheet.Cells.Locked = False

ActiveSheet.Range(“C2:D5”).Locked = True ActiveSheet.Protect „Harun“

End Sub

Im nächsten Beispiel sehen wir gerade die Umkehrung des vorherigen Beispiels. Das heißt, das ganze Tabellenblatt wird mit der Methode „.Cells.Loced = True“ geschützt und bestimmter Bereich mit der Methode „.Loced = False“ Schutz aufgehoben.

Sub Bestimmter_Bereich_Schutz_aufheben() ActiveSheet.Unprotect “Harun”

ActiveSheet.Cells.Locked = True

ActiveSheet.Range(“C2:D5”).Locked = False ActiveSheet.Protect “Harun”

End Sub

(22)

1.3 TABELLENBLÄTTER „WORKSHEETS“

Im folgenden Kapitel behandeln wir die Möglichkeiten um Tabellenblätter per VBA – Code anzusprechen und nach unseren Wünschen anzupassen.

1.3.1 ZUGRIFF AUF TABELLENBLÄTTER

Für die Auswahl eines Tabellenblattes gibt es im VBA zwei Alternativen:

• Auswahl über den Index des Worksheets – Objekts Tabellenblatt

• Auswahl über den Namen des Worksheets – Objekts

Es gibt drei Arten, um den Namen der Tabellenblätter anzusprechen:

1. Direktes Ansprachen

Worksheets(„Tabelle1“).Activate

2. Direkte Angabe mit genauer Zellenbezeichnung.

Diese kann unter Umständen lange Anweisungen erzeugen:

Worksheets(„Tabelle1“).Cells(3,5).Value = 233 Worksheets(„Tabelle1“).Range(“E3“).Value = 233

3. Über SET-Definition deklariertem Objektvariable : Sub Ansprache()

Dim wsTabellenName as Worksheet

Set wsTabellenName = Worksheets(„Tabelle1“) wsTabellenName.Cells(3,5).Value = 123 End Sub

(23)

Nun, in einer Arbeitsmappe, also in der Excel-Datei können mehrere Tabellenblätter geben.

Deshalb werden sie mit der VBA-Methode „Worksheets“, also Mehrzahl eingegeben und zum Deklarieren als Worksheet-Objekt definiert.

Wir möchten das Thema „Tabellenblätter / Worksheets“ in folgenden Abschnitten behandeln.

• Erzeugen .Add

• Auswählen .Activate / .Select

• Kopieren / Verschieben .Copy / .Move

• Drucken .Print / .PrintPreview

• Löschen .Delete

• Einblenden / Ausblenden .Visible

1.3.2 TABELLENBLATT ERZEUGEN

Mit der „Worksheets.Add“-Methode kann ein neues Tabellenblatt eingefügt werden. Die Syntax der Add-Methode sieht mit ihren Attributen wie folgt aus:

Abbildung 5: Attribute der Add-Methode

In unserem nächsten Beispiel sind die Zellen der „Tabelle 1“ mit folgenden Informationen befüllt:

A15=Apfel, A16=Melone und A18=Birne.

Nun sollen drei Tabellenblätter mit den Namen „Apfel, Melone und Birne“ vor der Tabelle

„Bücher“ erstellt werden. Die erstellten Tabellenblätternamen bekommen jeweils eine Hintergrundfarbe, hier rot, zugeteilt. Nun sieht unsere Listing wie folgt aus:

Sub Tabellenblätter_erzeugen() Dim x As Integer

Dim Name As Range For x = 1 To 3

Set Name = Worksheets(“Tabelle1”).Range(“A” & 14 + x)

Worksheets.Add Before:=Sheets(„Bücher“) ‚3 Tabellenblätter vor der Tabelle („Bücher“) eingefügt

ActiveSheet.Name = Name.Value ‚Als Name werden Zelleninhalte ab A15 umbenannt ActiveSheet.Tab.ColorIndex = 3 ‚Die Hintergrundfarbe des Tabellenblattes definiert. 3 = rot Next x

End Sub

(24)

Auflisten diese Tabellenblätter kann wie folgt funktionieren:

Sub Welche_Tabellenblätter_gibt_es() Dim Anzahl, x As Integer

Anzahl = Worksheets.Count For x = 1 To Anzahl

Debug.Print Sheets(x).Name Next x

End Sub

Am nächsten Beispiel kontrollieren wir, ob eine bestimmte Tabelle existiert. Wenn nicht, dann soll sie angelegt werden:

Sub Kontrolle_ob_bestimmte_Tabelle_gibt() Dim wsName As Worksheet

Dim stgesucht As String Stgesucht=“Neue Name“

For Each wsName In Worksheets

If wsName.Name = stgesucht Then ‚Aktuelle Tabelle wird mit der gesuchte Tabelle verglichen MsgBox wsName.Name & „Es gibt“

Exit Sub Else End If Next wsName

Worksheets.Add Before:=Sheets(“Bücher”) ActiveSheet.Name = stgesucht

End Sub

1.3.3 TABELLENBLATT AUSWÄHLEN

Mit den Methoden „Worksheets.Activate“ oder „Worksheets.Select“ können wir eine Tabelle von den anderen Tabellen hervorheben. Am jetzigen Beispiel wird die gesuchte Tabelle nach dem Finden hervorgehoben. Wenn nicht, wird sie angelegt.

Sub Kontrolle_ob_bestimmte_Tabelle_gibt() Dim wsName As Worksheet

Dim stgesucht As String stgesucht=“Neue Name“

For Each wsName In Worksheets

(25)

If wsName.Name = stgesucht Then ‚Aktuelle Tabelle wird mit der gesuchte Tabelle verglichen MsgBox wsName.Name & „Es gibt“

Worksheets(stgesucht).Select Exit Sub

Else End If Next wsName

Worksheets.Add Before:=Sheets(“Bücher”) ActiveSheet.Name = stgesucht

End Sub

1.3.4 TABELLENBLATT KOPIEREN

Alle erstellten Tabellenblätter können mit der Methode „Worksheets.Copy“ oder „Sheets.

Copy“ kopiert werden. Beim Kopieren handelt es um das Klonen eines Tabellenblattes.

Dieses Blatt kann mit den Attributen „Before = vor angegebener Tabelle“ oder „After = nach angegebener Tabelle“ platziert werden.

Nach diesem Vorgang gibt es zwei exakt gleiche Tabellenblätter. Wenn das neue Tabellenblatt nicht umbenannt wird, bekommt die gleiche Benennung mit einem Index als Zahl in Klammer. Beispielsweise „Tabelle2“ wird als „Tabelle2 (2)“ geklont. Deshalb geben Sie immer gleich einen neuen Name an.

Nun sieht unser Beispiel dazu wie folgt aus:

Wir werden das Tabellenblatt „Tabelle2“ vor dem Tabellenblatt „Melone“ kopieren und dann auf „Neuer Name“ umbenennen.

Sub Tabellenblatt_kopieren()

Sheets(“Tabelle2”).Copy Before:=Sheets(“Melone”) ActiveSheet.Name = “Neuer Name”

End Sub

Wenn das geklonte Tabellenblatt am Ende der Tabellenblätter eingeordnet wird, fragen wir vorher Anzahl der Tabellenblätter ab.

Sub ans_Ende_stellen() Dim Anzahl As Integer

Anzahl = ThisWorkbook.Sheets.Count ‚Anzahl der Tabellenblätter abgefragt

(26)

Sheets(„Melone“).Copy After:=Sheets(Anzahl) ‚Die Tabelle „Melone“ klonen und ans Ende stellen

ActiveSheet.Name = „Neuer Name“ ‚Es bekommt einen neuen Namen End Sub

Es kommt sicherlich vor, dass das geklonte Tabellenblatt nicht in die gleiche Arbeitsmappe sondern in eine neue Arbeitsmappe eingefügt wird. Dann wie folgt:

Sub Tabellenblatt_kopieren()

Sheets(„Tabelle2“).Copy ‚Das geklonte Tabellenblatt wird in eine neue Arbeitsmappe eingefügt ActiveSheet.Name = „Neuer Name“ ‚Wenn notwendig, kann auch umbenannt werden End Sub

Wir können auch mehrere Tabellenblätter gleichzeitig klonen. In unserem Beispiel werden drei Tabellenblätter geklont und vor dem ersten Tabellenblatt eingefügt. Somit werden sie automatisch Sheets(1), Sheets(2), Sheets(3). Dann kann ich sie auch sehr einfach umbenennen.

Sub mehrfach_kopieren_Tabellen_am_Anfang()

Sheets(Array(“Neuer Name”, “Bücher”, “Melone”)).Select

Sheets(Array(“Neuer Name”, “Bücher”, “Melone”)).Copy Before:=Sheets(1) Sheets(1).Name = “Muster_1”

Sheets(2).Name = “Muster_2”

Sheets(3).Name = „Muster_3“

End Sub

Was passiert, wenn sie an Ende eingefügt werden? Ändert sich nicht viel. Hier arbeiten wir mit der ermittelten Anzahl der Tabellenblätter.

Sub mehrfach_kopieren_Tabellen_am_Ende() Dim Anzahl As Integer

Anzahl = ThisWorkbook.Sheets.Count

Sheets(Array(“Neuer Name”, “Bücher”, “Melone”)).Select

Sheets(Array(“Neuer Name”, “Bücher”, “Melone”)).Copy After:=Sheets(Anzahl) Sheets(Anzahl + 1).Name = „Muster_1“

Sheets(Anzahl + 2).Name = „Muster_2“

Sheets(Anzahl + 3).Name = „Muster_3“

End Sub

(27)

1.3.5 TABELLENBLATT VERSCHIEBEN

Zum Verschieben ist die Methode „Worksheets.Move“ oder „Sheets.Move“ zuständig. Das Verschieben ist ähnlich wie das Klonen eines Tabellenblattes. Der Unterschied besteht darin, dass es von der alten Stelle „ausgeschnitten“ und an der neuen Stelle „eingepflanzt“ wird.

Wir nehmen das gleiche Beispiel von Copy und ersetzten einfach die Copy-Methode in Move-Methode.

Sub Tabellenblatt_verschieben()

Sheets(„Tabelle2“).Move Before:=Sheets(„Melone“) ‚“Tabelle2“ wird vor “Melone“ verschoben ActiveSheet.Name = „Neuer Name“ ‚wenn notwendig, kann es umbenannt werden End Sub

Es kann auch an das Ende verschoben werden:

Sub ans_Ende_verschieben() Dim Anzahl As Integer

Anzahl = ThisWorkbook.Sheets.Count ‚Anzahl der Tabellenblätter abgefragt

Sheets(„Melone“).Move After:=Sheets(Anzahl) ‚Die Tabelle „Melone“ wird ans Ende verschoben End Sub

1.3.6 TABELLENBLATT LÖSCHEN

Das Tabellenblatt wird mit der Methode „Worksheets.Delete“ oder „Sheets.Delete“

unwiderruflich gelöscht.

Mit dem ersten Beispiel löschen wir das Blatt „Muster_1“.

Sub Tabellenblatt_löschen() Sheets(„Muster_1“).Delete End Sub

Es ist auch mehrfache Löschung von Tabellenblättern möglich.

Sub mehrfach_löschen ()

Sheets(Array(“Muster_1”, “Muster_2”, “Muster_3”)).Select ActiveWindow.SelectedSheets.Delete

End Sub

(28)

1.3.7 TABELLENBLATT ALS DATEI SPEICHERN

Ein gewünschtes oder aktuelles Tabellenblatt kann auch als eigenständige Excel-Datei gespeichert werden. Unser Beispiel dazu:

Sub Tabelle_abspeichern()

Dim strDateiName, strPfad As String strDateiName = ActiveSheet.Name strPfad = „C:\Kaplan\Kapitel_10\“

ActiveSheet.Copy

ActiveWorkbook.SaveAs Filename:=strPfad & strDateiName MsgBox „Die Datei befindet sich im Verzeichnis „ & vbLf & _

strPfad & vbLf & _

„wurde gespeichert als“ & vbLf & _ strDateiName & „.xlsx“

End Sub

Abbildung 6: Tabellenblatt als Datei abgespeichert

1.3.8 TABELLENBLATT EIN- /AUSBLENDEN

Die Tabellenblätter können mit den Methoden „Worksheets.Hidden“ und „Worksheets.

Visible“ ein- und ausgeblendet werden. Das Tabellenblatt wird aus der Excel-Oberfläche unsichtbar. Aber der Zugriff auf die vorhandenen Daten in ausgeblendetem Tabellenblatt weiterhin möglich.

Am unteren Beispiel wird die Tabelle „Harun“ erst ausgeblendet, die Zelle „A1“ ausgelesen, als MsgBox ausgegeben und sie wird wieder eingeblendet.

(29)

Sub aus_einblenden() Dim strInhalt As String

Worksheets(„Harun“).Visible = False ‚Die Tabelle Harun wird ausgeblendet

strInhalt = Worksheets(„Harun“).Range(„A1“).Value ‚Der Wert aus der Zelle A1 als String ausgelesen

MsgBox stInhalt ‚Ausgelesener Wert in MsgBox ausgegeben

Worksheets(„Harun“).Visible = True ‚Die Tabelle Harun wird wieder eingeblendet End Sub

Im folgenden Beispiel werden sämtliche Tabellenblätter der aktiven Arbeitsmappe erst aus- dann eingeblendet. Normalerweise soll ein Tabellenblatt bestehen bleiben. Wenn ich versuche alle Tabellenblätter auszublenden, bekomme ich beim letzten Tabellenblatt eine Fehlermeldung. Um diese Fehlermeldung zu umgehen, füge ich die On Error Resume Next – Anweisung ein. Nun unser Beispiel :

Sub AlleTabellenblätter_aus_einblenden() Dim wsName As Variant

On Error Resume Next ‚Fehlermeldung wird umgegangen

‚Alle Tabellenblätter ausblenden For Each wsName In Sheets

wsName.Visible = False Next wsName

‚Alle Tabellenblätter einblenden For Each wsName In Sheets

wsName.Visible = True Next wsName

End Sub

Nun machen wir etwas Einfaches. Und zwar Zeile „5“ und Spalte „F“ ausgeblendet und anschließend wieder eingeblendet werden.

Sub Zeile_Spalte_aus_einblenden () Rows(“5:5”).Select

With Selection

.EntireRow.Hidden = True .EntireRow.Hidden = False End With

Columns(“F:F”).Select With Selection

(30)

.EntireColumn.Hidden = True .EntireColumn.Hidden = False End With

End Sub

1.3.9 LISTEN ALLE TABELLENBLÄTTERNAMEN

Wenn wir die Tabellenblätternamen listen möchten, benötigen wir die Methode „Worksheets(x).

Name“.

Das nächste Beispiel listet uns alle vorhandene Sheets, auch ausgeblendete Sheets. Wir lassen erst Anzahl der vorhandenen Sheets mit der Eigenschaft Worksheets.Count feststellen und das Ergebnis zu „Anzahl“ zuweisen. Dann lassen wir „Anzahl“-mal durchlaufen.

Sub Welche_Tabellenblätter_gibt_es() Dim intAnzahl, x As Integer

intAnzahl = Worksheets.Count For x = 1 To intAnzahl

Debug.Print x & “.Tabelle : “ & Worksheets(x).Name Next x

End Sub

1.3.10 HINTERGRUNDFARBE TABELLENBLATTNAME ÄNDERN

Auch die Hintergrundfarbe kann, je nach Wunsch mit der Methode „.Tab.Colorindex“

geändert werden. Wenn wir die Tabellenblätter um 180° gedreht anschauen, sehen sie wie Register aus. Deshalb ist „.Tab“-Bezeichnung. Um die Hintergrundfarben dieser Tab’s zu ändern, benötigen wir „.Colorindex“.

Nun ein Beispiel dazu:

Sub Hintergrundfarbe()

Sheets(„Neuer Name“).Tab.ColorIndex = 3 End Sub

(31)

1.3.11 SORTIEREN DER TABELLENBLÄTTER

Wenn wir mal mehrere Tabellenblätter eingefügt haben, kann auch vorkommen, dass wir sie sortieren sollten. Dazu könnte unsere Listing wie folgt aussehen:

Die For-Next Schleife eignet sich sehr gut dazu um etwas zu sortieren. Auch die Tabellenblätter.

Wir können nach Wunsch aufsteigend oder absteigend sortieren.

Sub Blatter_Sortieren()

Dim Anzahl_Blätter, x, y As Integer

Anzahl_Blätter = ActiveWorkbook.Worksheets.Count For x = 1 To Anzahl_Blätter

For y = x To Anzahl_Blätter

If Worksheets(y).Name < Worksheets(x).Name Then Worksheets(y).Move Before:=Worksheets(x) End If

Next y Next x End Sub

1.3.12 LÖSCHBESTÄTIGUNG AUS- / EINSCHALTEN

Vor jedem Löschen eines Objektes (Tabelle, Zeile, Spalte, Zelle) werden wir sicherheitshalber befragt. Wenn diese Abfrage zu lästig sein sollte, kann sie mit dem Funktion .DisplayAlerts aus- dann wieder eingeschaltet werden.

Unser Beispiel dazu wie folgt aus:

Sub Tabellenblatt_löschen_ohne_Meldung()

Application.DisplayAlerts = False ‚Löschbestätigung ausschalten Sheets(„Muster_3“).Delete

Application.DisplayAlerts = True ‚Löschbestätigung wieder einschalten End Sub

Wenn wir sie ausgeschaltet haben, bitte am Ende der Listing wieder einschalten. Sonst werden alle Meldungen, die normalerweise am Bildschirm zu sehen sind, werden nicht mehr erscheinen. Diese kann unter Umständen gefährlich sein.

(32)

1.3.13 UNTERDRÜCKEN DER MELDUNG “VERKNÜPFUNG AKTUALISIEREN”

Wenn die zu öffnende Datei mindesten eine Verknüpfung beinhaltet, werden wir bei jedem Öffnen darauf hingewiesen, ob sie aktualisiert werden soll. Diese Meldung kann auch unterdrückt werden.

Abbildung 7: Meldung der Aktualisierungsabfrage

Wenn wir solche Tabellen per VBA öffnen und bearbeiten möchten, bleibt der Ablauf des Makros an dieser Stelle stehen. An solchen Fällen arbeiten wir entweder mit einer AskToUpdateLinks-Eigenschaft oder mit dem Parameter der Open-Methode UpdateLinks=0.

Der Unterschied besteht darin, dass AskToUpdateLinks-Eigenschaft die Aktualisierung ohne Abfrage durchführt und der Parameter UpdateLinks=0 nicht durchführt.

Sub Verknüpfungsmeldung_unterdrücken_Application() Application.AstToUpdateLinks=False

Workbooks.Open „C:\Excel\Beispiel_Verknüpfung.xls“

End Sub

Falls eine Verknüpfung ins Leere geht oder eine fehlerhafte Verknüpfung gibt, erscheint trotz obengenanntem Vorgang doch eine Abfrage am Monitor.

Abbildung 8: Meldung bei z.B. fehlerhafter Verknüpfung

Unser zweiter Weg ist ohne Aktualisierung der Verknüpfungen. Dazu ändern wir den UpdateLinks-Parameter auf null in der Open-Methode:

Sub Venknüpfungsmeldung_unterdrücken_Open()

Workbooks.Open „C:\Excel\Beispiel_Verknüpfung.xls“, UpdateLinks := 0 End Sub

(33)

1.4 UMGANG MIT ZELLEN UND BEREICHEN „RANGE“ / „CELLS“

Eine Zelle und ein Zellenbereich in VBA-Programmierung erfasst am größten Teil der Programmierung gegenüber Arbeitsmappen „Workbooks“ oder Tabellenblätter „Worksheets“.

Denn, wenn eine Zelle oder ein Bereich markiert ist, gibt es viele Möglichkeit sie zu formatieren. Das Markieren ist ein Selektion beziehungsweise das Ansprechen einer Zelle oder eines Bereiches.

Der Zugriff auf Zellen oder Zellbereiche ist nicht trivial, weil VBA mit zahlreichen, inhaltlich ähnlichen Begriffen und Objekten arbeitet. Wie man so schön sagt: „Viele Wege führen nach Rom.“ Viele Beispiele, die wir in diesem Buch gesehen und sehen werden, sind auch unterschiedlichen Wegen realisierbar.

Eine Zelle / ein Bereich wird selektiert zum:

• Bearbeiten

• Kopieren

• Ausschneiden

• Einfügen

• Umbenennen

• Formatieren nach

○ Ausrichtung

○ Schriftgestaltung

○ Rahmengestaltung

○ Farbfüllung

○ Schutz

○ Ein- und Ausblenden der Spalten / Zeile

○ Automatische Spaltenbreite und Zeilenhöhe

• Sortieren

• Auf null setzen

• Formel einfügen

• Druckbereich setzen

Die Zellen werden mit folgenden Möglichkeiten angesprochen:

• mit dem Range-Objekt

• mit dem Cells-Objekt

• ein Mix aus dem Beiden.

Das Range-Objekt wird mit der üblichen Zellenbezeichnung und das Cells-Objekt mit der Adressierung der Zellen- und Spaltennummern, angesprochen.

(34)

Beim Range-Objekt wird eine Zelle innerhalb zwei Klammern und Hochkommas geschrieben.

In der Reihenfolge werden erst die Spalte dann die Zeile geschrieben.

Beispielsweise („A1“) => Die Buchstabe „A“ gibt die Spalte an. Der Ziffer „1“ gibt die Zeile an.

Beim Cells-Objekt wird eine Zelle innerhalb offenem und geschlossenem Klammern geschrieben und mit einem Komma getrennt. In der Reihenfolge werden erst die Zeile dann die Spalte geschrieben.

Beispielsweise (3,4) => Die erste Ziffer (3) gibt die Zeile und die zweite Ziffer (4) gibt die Spalte-D an. Diese Schreibweise eignet sich besonders mit den Variablen zu arbeiten.

Range Cells

(“A1”) (1,1)

(“D3”) (3,4)

(“Z13”) (13,26)

Tabelle 3: Range / Cells

Bevor wir mit den Zellen und Bereichen anfangen, schauen wir kurz wie der Cursor in die Zelle positionieren werden kann.

Die Positionierung wird entweder mit den Methoden „Select“ oder „Activate“ gemacht.

Select-Methode markiert eine Zelle oder einen Zellenbereich.

Activate-Methode aktiviert eine einzelne Zelle, die sich innerhalb der aktuellen Markierung befindet.

Im folgendem Beispiel in der Tabelle „VBA“ ist der Bereich mit Range(„A1:C3“) markiert und mit Cells(1,1) die Zelle „A1“ aktiviert. Also der Cursor befindet sich in der Zelle „A1“.

Sub BspActivate_Select() Worksheets(„VBA“).Activate Range(“A1:C3”).Select Cells(1,1).Activate End Sub

(35)

Die folgenden Beispiele stellt die Schriftart in der Zelle A1 der Tabelle „VBA“ die blaue Farbe ein.

Nun Beispiele mit und ohne Select:

Sub MitActivate_Select() Worksheets(„VBA“).Activate Range(“A1”).Select

Selection.Font.Color = vbBlue End Sub

Jetzt etwas schneller in der Ausführung und weniger Tipparbeit:

Sub OhneActivate_Select()

Worksheets(“VBA”).Range(“A1”).Font.Color = vbBlue End Sub

Wenn wir in die Zelle etwas eintragen möchten, dann können wir OHNE Select bzw.

Activate-Methode arbeiten. Dadurch wird unsere Prozedur um einiges kürzer und schneller.

Hierzu ein Beispiel:

Sub Eintrag() Text = „Harun“

Range(„C1“).Activate Range(„C1“).Value = Text ActiveCell.Value = Text Cells(4, 3).Activate Cells(4, 3).Value = Text ActiveCell.Value = Text

Range(„B1“).Select ActiveCell.Value = Text Cells(3, 3).Select ActiveCell.Value = Text

Range(„A1“) = Text Cells(2, 3) = Text End Sub

(36)

1.4.1 KOMBINATIONEN VON CELLS UND RANGE

Es ist aber auch beide Schreibvarianten miteinander zu kombinieren.

Die Kombination mit den Cells und Range wird meistens in den Schleifen verwendet. Denn die Zellbereiche mittels berechneter Indizes besser adressierbar sind.

Das untere Beispiel füllt folgende Zellen mit errechneten Werten:

Anstelle jede Zeile zu erklären, bitte eintippen und mit „F8“ step-to-step laufenlassen.  Sub Kombination_Cells_Range()

Dim i As Integer For i = 2 To 4

Worksheets(“Tabelle1”).Range(Cells(2, 2), Cells(i + 2, i)).Value = 20 * i Next

End Sub

Oder wir markieren einen bestimmten Bereich:

Sub Bereich_markieren()

Worksheets(“Tabelle1”).Range(Cells(1, 2), Cells(1, 4)).Select ‚markiert B1:D1 End Sub

Oder mit Variablen:

Sub Kombination_Range_Cells() Dim Zeile, Spalte As Integer

Worksheets(„Tabelle1“).Activate Zeile=InputBox(„Anzahl Zeilen“) Spalte=InputBox(„Anzahl Spalte“)

Range(Cells(3, 3), Cells(2+Zeilen, 2+Spalten)).Activate End Sub

1.4.2 LETZTE BESCHRIEBENE ZELLE ERMITTELN

Die letzte beschriebene Zelle in der Tabelle mit folgenden Eigenschaften ermittelt:

Rows.Count letzte beschriebene Zelle in der Spalte und Columns.Count letzte beschriebene Zelle in der Zeile.

(37)

Abbildung 9: Letzte Zeile

Sub Letzte_beschriebene_Zelle_Spalte() ‚von oben nach unten gezählt Dim strLetzteZeile As String

strLetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row End Sub

ÖDas Ergebnis ist 4. “A4” ist zuletzt beschrieben!

Unser Beispiel dazu sieht wie folgt aus:

Sub Letzte_beschriebene_Zelle_Zeile() ‚ von links nach rechts gezählt Dim strLetzteSpalte As String

strLetzteSpalte = Cells(1, Columns.Count).End(xlToLeft).Column End Sub

ÖDas Ergebnis ist 2. “B1” ist zuletzt beschrieben! Das Ergebnis hierzu ist keine Buchstabe, sondern ein Zahl!

1.4.3 IN DIE LETZTE ZU BESCHREIBENDE ZELLE IN DER SPALTE EINTRAGEN Das kommt in der Praxis auch oft vor. Unterste beschreibbare Zelle wird wie folgt eingetragen:

Sub Letzte_zu_beschreibende_Zelle_befüllen_2() Dim strLetzteZeile As String

strLetzteZeile = Cells(Rows.Count, 3).End(xlUp).Row

Range(„C“ & strLetzteZeile).Offset(1, 0) = „Ich werde eingetragen“

End Sub

Abbildung 10: Letzte Spalte

(38)

1.4.4 AKTIVE ZEILE / SPALTE / ADRESSE ERMITTELN

Nun, ermitteln wir die aktive Zeile, aktive Spalte und die aktive Position des Cursors.

ActiveCell.Row gibt uns die Zeile als String an ActiveCell.Column gibt uns die Spalte als String an

ActiveCell.Address gibt uns die Adresse in Range-Format mit $-Zeichen davor.

Sub Aktive_Infos()

Zeile = ActiveCell.Row Spalte = ActiveCell.Column Adress = ActiveCell.Address

Adress_2 = ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False) MsgBox „Der Cursor befindet sich in „ & vbLf & _

„Zeile „ & Zeile & vbLf & _

„Spalte „ & Spalte & vbLf & _

„Adresse_1 „ & Adress & vbLf & _

„Adresse_2 „ & Adress_2 End Sub

Abbildung 11: Zelleninformationen

Um das Ergebnis ohne $-Zeichen zu bekommen, setzen wir die Attributen RowAbsolte:=False bzw.

ColumnAbsolute:=False ein.

(39)

In unserem Beispiel oben sah so aus:

ÖAdress_2 = ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False) Genug mit Zellen. Jetzt schauen wir die Tabellen an. 

1.4.5 AKTIVE TABELLE ERMITTELN

Folgende Eigenschaften mit der Anweisung „.Name“ ermitteln die Namen des aktiven Tabellenblattes:

• ActiveSheet.Name

• ActiveCell.Parent.Name Sub Aktiven_Tabellenname_ermitteln()

Dim strTabName_1, strTabName_2 As String strTabName_1 = ActiveSheet.Name ‚ Variante 1 strTabName_2 = ActiveCell.Parent.Name ‚ Variante 2 MsgBox strTabName_1 & vbLf & strTabName_2 End Sub

1.4.6 AKTIVE DATEI ERMITTELN

Jetzt kommen wir zur Ermittlung der aktiven Datei. Um der Name der aktiven Datei zu ermitteln, verwenden wir folgende Eigenschaft mit der „.Name“-Anweisung:

• ActiveWorkbook.Name

• ActiveSheet.Parent.Name Sub Aktive_Dateiname_ermitteln()

Dim strDateiName_1, strDateiName_2 As String strDateiName_1 = ActiveWorkbook.Name ‚ Variante 1 strDateiName_2 = ActiveSheet.Parent.Name ‚ Variante 2 MsgBox strDateiName_1 & vbLf & strDateiName_2 End Sub

(40)

1.4.7 AKTIVES FENSTER ERMITTELN

Wenn wir mehrere Excel-Dateien gleichzeitig geöffnet haben, diese Dateien sind dann praktisch „digital“ gestapelt. Wir können mit der „ActiveWindow“-Eigenschaft ermitteln, welches Fenster beziehungsweise welche Excel-Datei ganz oben ist. Das erreichen wir mit der „ActiveWindow“-Eigenschaft angehängt die „.Caption“-Eigenschaft.

Sub Aktives_Fenster_ermitteln() Dim strFenster As String

strFenster = ActiveWindow.Caption MsgBox strFenster

End Sub

Hier haben wir einige Befehle auf einem Haufen verwendet. Diese haben Funktionen wie folgt:

Befehl Aktivität

ActiveCell.Address Ermittelt die Adresse der aktiven Zelle ActiveCell.Row Ermittelt den Zeilennummer der aktiven Zelle ActiveCell.Column Ermittelt den Spaltennummer der aktiven Zelle ActiveCell.Parent.Name Ermittelt den Namen der Tabelle mit der aktiven Zelle ActiveSheet.Parent.Name Ermittelt den Namen der Arbeitsmappe

ActiveSheet.Name Gibt die Name des aktiven Tabellenblattes

ActiveWindow Gibt ein Window-Objekt zurück, das für das aktive Fenster steht ActiveWorkbook.Name Gibt die Name der aktiven Arbeitsmappe

Tabelle 4: Wichtige Active-Eigenschaften

1.4.8 SUCHEN UND ERSETZEN DER ZELLENINHALTEN

Das Suchen und Ersetzen nach bestimmten Inhalten in der Tabelle werden mit den folgenden Methoden realisiert:

• .Find Duchsucht den Bereich nach bestimmten Begriff.

• .Replace Duchsucht den Bereich und ersetzt mit anderem Begriff.

Als erstes schauen wir nach dem „Range.Find“ „Suchen“!

(41)

Wir lassen in bestimmten Bereichen nach einem Wert, hier „Harun“ suchen und davon die Adresse ausgeben.

Abbildung 12: Unser Suchbegriff

Die Listing dazu:

Sub Suchen_Adresse_ausgeben() Dim strAdresse As String

strAdresse = Range(“A1:C5”).Find(“Harun”).Address MsgBox strAdresse

End Sub

Und das Ergebnis:

Abbildung 13: Suchergebnis

Jetzt lassen wir mehrere gleiche Begriffe suchen und die Adresse dazu ausgeben:

Abbildung 14: Unsere Suchbegriffe

(42)

Die Listing dazu:

Sub Suchen_Adresse_ausgeben_2() Dim rgBereich As Range

Dim strAdresse, strBereiche As String Set rgBereich = Cells.Find(“Auto”) If Not rgBereich Is Nothing Then strAdresse = rgBereich.Address Do

Set rgBereich = Cells.FindNext(rgBereich)

strBereiche = rgBereich.Address & vbLf & strBereiche Loop Until (rgBereich.Address = strAdresse)

MsgBox strBereiche End If

End Sub

Abbildung 15: Suchergebnis

Nun lassen wir nach den Werten suchen, die dann dessen Zellen mit blauer Farbe befüllen.

Unsere Tabelle dazu sieht wie folgt aus:

Abbildung 16: Werte Suchmaske

(43)

Gesucht werden alle Zellen im bestimmten Bereich mit For Each nach nummerischen Werten die größer 20 sind. Beim Finden wird die jeweilige Zelle mit blauer Farbe befüllt.

Das Suchen nach Zellinhalten, die in mehreren Zellen auftreten können, ist am einfachsten über For Each-Schleife am einfachsten. Dazu setzen wir die „>“ Größer- / „<“ Kleiner- oder

„=“ das Gleichheitszeichen-Operator ein.

Sub Suchen_mit_Farbe_befuellen() Dim rngZelle As Range

For Each rngZelle In Range(“A1:C10”) If IsNumeric(rngZelle.Value) Then

If rngZelle.Value > 20 Then rngZelle.Interior.ColorIndex = 5 End If

End If Next End Sub

Abbildung 17: Farbbefüllte Zellen

1.4.9 ERSETZEN DER ZELLENINHALTEN

Aber jetzt sollten wir ein paar Beispiele mit dem Ersetzen machen. Das folgende Beispiel soll unsere Zellen, die „aut“ beinhalten mit dem „Mercedes Benz“ ersetzen. Auch hier setzen wir For Each-Schleife ein. Zusätzlich den „Like“-Operator ein, um Inhalte zu vergleichen.

Für die Suche nach Zelleninhalten benutzen wir die „Value“-Eigenschaft. Die Inhalte der Zellen können unterschiedlich sein. Also, sie können aus numerisch, alphanumerisch oder aus Formeln bestehen.

(44)

Sub Suchen_Ersetzen_1() Dim rngZelle As Range

For Each rngZelle In Range(“A1:C10”) If LCase(rngZelle.Value) Like “aut*” Then

rngZelle.Value = “Mercedes Benz”

End If Next End Sub

Oder auch mit Range.Replace-Methode:

Sub Suchen_Ersetzen_1()

Worksheets(“Tabelle1”).Range(“A1:C10”).Replace _ What:=”*aut*”, Replacement:=”Mercedes Benz”, _ SearchOrder:=xlByColumns, MatchCase:=True End Sub

Abbildung 18: Ergebnis Suchen_Ersetzen_1

Nun, alle Zellen, die *ben* beinhalten, sollen mit dem Doppelrahmen, mit der Farbe „27“

befüllt werden. Auch hier setzen wir For Each-Schleife ein. Zusätzlich den „Like“-Operator ein, um Inhalte zu vergleichen.

Sub Suche_Ersetzen_2() Dim rngZelle As Range

For Each rngZelle In Range(“A1:C10”) If LCase(rngZelle.Value) Like “*ben*” Then

rngZelle.Borders.LineStyle = xlDouble End If

Next End Sub

(45)

Abbildung 19: Ergebnis Suchen_Ersetzen_2

Alle Zellen, die mit blauer Farbe befüllt sind, werden mit punktiertem Rahmen, mit gelber Farbe und als Wert „Daimler“ ersetzt.

Sub Suche_Ersetzen_3() Dim rngZelle As Range

For Each rngZelle In Range(“A1:C10”) If Zelle.Interior.ColorIndex = 5 Then

With Zelle

.Borders.LineStyle = xlDot .Interior.ColorIndex = 27 .Value = “Daimler”

End With End If Next End Sub

Abbildung 20: Ergebnis Suchen_Ersetzen_3

(46)

1.4.10 LÖSCHEN VON ZELLINHALTEN UND ZEILEN

Zellen können Texte, Zahlen, Formeln oder auch Kommentare beinhalten. Wir können sie mit einer Rahmenart, mit bestimmter Füllfarbe oder auch mit einem Muster formatieren.

Alles, was zu einer Zelle eingegeben wurden, können einzeln oder auf einem Mal mit deren Formatierungen gelöscht werden.

Dazu sind folgende Methoden zuständig:

Löschfunktion Bedeutung

Clear Alle Einträge und Formatierungen eines Bereiches löschen ClearContents Nur Einträge eines Bereiches löschen

ClearComments Nur Kommentare eines Bereiches löschen ClearFormats Nur Format eines Bereiches löschen

Delete Zellen löschen

Tabelle 5: Löschmethoden

Sub Formatierung_löschen()

Worksheets(“Tabelle1”).Range(“A1”).Clear

Worksheets(“Tabelle1”).Range(“A2:C2”).ClearContents Worksheets(“Tabelle1”).Range(“A3”).ClearFormats

Worksheets(“Tabelle1”).Range(Cells(4, 1), Cells(4, 2)).ClearComments Worksheets(“Tabelle1”).Range(“A5”).Delete

ActiveCell.EntireRow.Clear ‘Spalte löschen

ActiveCell.EntireColumn.ClearContents ‘Zeile Löschen End Sub

Wenn wir gesamten Einträge der Tabelle löschen möchten, dann wie folgt:

Sub Zellinhalte_des_gesamten_Tabellenblattes_löschen()

Cells.ClearContents ‘ClearContents löscht die Inhalte und Formeln aus einem Bereich End Sub

Nun, Löschung mit allem, wie folgt:

Sub Gesamtes_Tabellenblatt_löschen() Cells.Delete

End Sub

(47)

1.5 ZELLEN BEFÜLLEN

Das Befüllen der Zellen oder Bereichen werden per VBA normalerweise mit der .Value- Eigenschaft gemacht. Das kann auch ohne.

¾ Diese Einträge sind in die jeweilige Zelle der aktiven Tabelle:

Range(“A20”).Value = “12345”

Range(“A20”) = “12345”

ActiveCell=”Harun Kaplan”

ActiveCell.Value=”Harun Kaplan”

¾ Dieser Eintrag ist explizit in die Zelle (A21) der Tabelle “VBA” eingetragen:

Worksheets(„VBA“).Cells(21, 1).Value = „12345“

¾ Dieser Eintrag ist in die umbenannte Zelle einer Tabelle eingetragen. Solche Beispiele sehen wir etwas später:

Range(„Umbenannt“) = „Auto“

Range(„Umbenannt“).Value = „Auto“

¾ Summe aus den Zellen der unterschiedlichen Tabellen:

WorksheetFunction.Sum(Worksheets(“Daten”).Range(“A12:A14”), _ Worksheets(“VBA”).Range(“A15”))

Sub Zellen_Befüllen() Dim Name, Obst As String Dim Wert1, Summe As Integer

‚Zuweisungen in Zellen schreiben ActiveCell = “Harun Kaplan”

Range(“A20”) = “12345”

Worksheets(„VBA“).Cells(21, 1).Value = „12345“

Range(„Umbenannt“) = „Auto“ ‚“B13“ in Tabelle „Auswertung“

‘Zellinhalte als Variable definieren Name = Range(“A1”)

Wert1 = Worksheets(“VBA”).Cells(21, 1).Value = “12345”

Obst = Cells(2, 1).Value

Summe = WorksheetFunction.Sum(Worksheets(“Daten”).Range(“A12:A14”), _ Worksheets(“VBA”).Range(“A15”))

(48)

MsgBox (“Name : “ & Name & Chr(10) & _

„Wert1 : „ & Wert1 & Chr(10) & _

„Obst : „ & Obst & Chr(10) & _

„Summe : „ & Summe) End Sub

Beim nächsten Beispiel werden die Zellen A10 bis A1 von 10 bis 1 rückwärts befüllt.

Sub Werte_einfügen_schleife() Dim i As Integer

For i = 10 To 1 Step -1

Range(Cells(1, i), Cells(1, i)).Value = i Next i

End Sub

1.5.1 FUNKTION / FORMEL EINFÜGEN

Als erstes tragen wir ein Ergebnis aus einer Berechnung, hier Summe von zwei Werten, in die bestimmte Zelle. Im ersten Beispiel wird jeder Wert zu einer Variablen zugeordnet.

Zweites Beispiel ohne Variablen, also direkt.

Sub Berechnung_VBA_Code_Variable()

Dim intZahl1, intZahl2, intErgebnis As Integer intZahl1= Range(“B1”).Value ‘erster Wert als Variable intZahl2= Range(“C1”).Value ‘ zweiter Wert als Variable

intErgebnis = intZahl1 + intZahl2 ‘Das Ergebnis von erstem und zweitem Wert als Variable Range(„A1“).Value = intErgebnis ‘Eintrag in die Zelle A1

End Sub

Hier ohne Variablen:

Sub Berechnung_VBA_Code_direkt()

Range(„A1“).Value = Range(„B1“).Value + Range(„C1“).Value End Sub

Es kann aber doch vorkommen, dass wir eine Formel direkt in die Zelle schreiben müssen.

Diese können wir mit der Formula-Eigenschaft im A1-Bezugssystem für die Tabellen- Makrosprache eintragen.

(49)

Am unteren Beispiel wird in die Zelle „A1“ der Tabelle „Tabelle1“ eine Formel eingefügt.

Der wiederum die Zellen „B1“ und „C1“ zusammenzählt.

Sub Formel_einfügen_1()

Worksheets(“Tabelle1”).Range(“A1”).Formula = “=$B$1+$C$1”

End Sub

Abbildung 21: Eingefügter Formel

Nächstes Beispiel fügt in die Zelle „B2“ an allen Tabellenblättern den Formel „=A1*0,5“

Sub Formel_einfügen_2() Dim intAnzahl As Integer

For intAnzahl = 1 To Worksheets.Count

Worksheets(intAnzahl ).Cells(2, 2).Formula = “=A1*0.5”

Next End Sub

INNOVATIVES COACHING FÜR SIE

Mit dem liveonline-Angebot unterstützt die AOK Sie im Schulalltag und bei Ihrer Karriereplanung durch erstklassige Vorträge und Kurse.

aok-on.de/liveonline

(50)

Das folgende Beispiel fügt eine Excel-Funktion in die Tabelle1 der aktuellen Datei in die Zelle „B16“ den Formel „=SVERWEIS(A16;‘[Beispieldatei.xlsx]Tabelle1“.

Sub Formel_einfügen_3()

ThisWorkbook.Worksheets(“Tabelle1”).Range(“b16”).FormulaLocal = _

„=SVERWEIS(A16;‘[Beispieldatei.xlsx]Tabelle1‘“

End Sub

1.5.2 KOPIEREN / AUSSCHNEIDEN / EINFÜGEN DER ZELLEN ODER BEREICHEN VBA-Syntax vom Kopieren und Ausschneiden von Zellen oder Bereichen fast gleich geschrieben. Zum Ausschneiden wird „.Cut“ und zum Kopieren „.Copy“ verwenden. Rest bleibt gleich.

In die Tabelle „Daten“ sind die Bereiche A1:B3 befüllt.

Abbildung 22: Beispiel Copy

Dieses Beispiel soll den Bereich „A1:B3“ kopieren und ab „D1“ einfügen:

Sub Bereiche_Copy_Paste_1()

Range(“A1:B3”).Copy Range(“D1”) End Sub

Gleiches Beispiel mit „.Cut“. Der Bereich wird ausgeschnitten und und ab „D1“ einfügen:

Sub Bereiche_Cut_Paste_1()

Range(“A1:B3”).Cut Range(“D1”) End Sub

(51)

Gleichen Bereich fügen wir in die Tabelle „Auswertung“ ab Zelle A1 ein:

Sub Bereiche_Copy_Paste_2()

Range(“A1:B3”).Copy Worksheets(“Auswertung”).Range(“A1”) End Sub

Der Bereich („A1:B3“) aus der Tabelle „Daten“ fügen wir in die Tabelle „Auswertung“ ab Zelle A1 ein:

Sub Bereiche_Copy_Paste_3()

Worksheets(“Daten”).Range(“A1:B3”).Copy _ Worksheets(“Auswertung”).Range(“A1”) End Sub

Der Bereich („A1:B3“) aus der Tabelle „Daten“ der Datei „Daten.xlxs“ fügen wir in die Tabelle „Auswertung“ der Datei „Auswertung.xlsx“ ab Zelle A1 ein:

Sub Bereiche_Copy_Paste_4()

Workbooks(“Daten.xlsx”).Worksheets(“Daten”).Range(“A1:B3”).Copy _ Workbooks(“Auswertung.xlsx”).Worksheets(“Auswertung”).Range(“A1”) End Sub

1.5.3 BEREICHE MARKIEREN MIT STRG+SHIFT+*

In Excel bzw. in VBA gibt es zwei Wege einen Bereich zu markieren:

Erster Weg:

Excel: Den Cursor am oberen Kante positionieren, dann ziehen wir zur diagonal gegenüber liegende Kante.

VBA: Range(“A11:D14”).Select Zweiter Weg:

Excel: Den Cursor irgendwo in jeweiligem Bereich positionieren, dann mit der Tastenkombination Strg+Shift+* markieren. Dieser elegante Weg kann auch per VBA wie folgt realisiert werden.

VBA: Selection.CurrentRegion.Copy Sub Bereiche_Copy_Paste_5()

Range(“A1”).Select

Selection.CurrentRegion.Copy Range(“D1”) End Sub

(52)

Bei so einem Feld, wie unten dargestellt, genügt die Maus irgendwo im Feld „A11:D14“ zu positionieren. Alle Felder, die mit der Kante oder mit den Ecken berühren, werden markiert.

Abbildung 23: Markierung mit „Strg+Shift+*“ in VBA -Code

Sub Bereiche_Copy_Paste_6() Range(“C1”).Select

Selection.CurrentRegion.Copy Worksheets(“Auswertung”).Range(“A11”) End Sub

1.5.4 BEREICHE MARKIEREN DURCH REFERIERUNG

Die Bereiche können auch mit der „Set“-Anweisung referiert werden:

Sub Bereiche_Copy_Paste_6() Dim rngQuelle As Range Dim rngZiel As Range

Set rngQuelle = Workbooks(“Daten.xls”).Worksheets(“Daten”).Range(“A1:B3”).Copy Set rngZiel = Workbooks(“Auswertung.xls”).Worksheets(“Auswertung”).Range(“A1”)

rngQuelle.Copy rngZiel Set rngQuelle = Nothing Set rngZiel = Nothing End Sub

1.5.5 EINE ZELLE / EINEN BEREICH UMBENENNEN

Ich möchte Ihnen eine sehr nützliche Möglichkeit zeigen. Wir haben hier ein paar Regeln zu beachten:

ÖEr darf pro Datei NUR einmal geben.

ÖEr darf auch nicht für Makro, Steuerelement vergeben werden.

(53)

Sonst springt der Cursor direkt in die vorhandene Zelle bzw. an das Makro oder zu jenem Steuerelement hinzu.

Abbildung 24: Zellenname

In der oberen Abbildung befindet sich der Cursor in Zelle „C4“.

In Excel haben alle Spalten, Zeilen und Zellen eigene Namen. Die Zeilen sind mit den Ziffern zwischen 1 – 1.048.576 und die Spalten sind mit den Buchstaben von A – XFD, benannt. Die Namen der Zellen einer Tabelle sind von A1 bis XFD1048576 bezeichnet.

Deshalb bei der Umbenennung werden alte und neue Namen angegeben. Wenn wir neuer Name vergeben haben, erscheint dann der neue Zellenname. Dieser neue Name kann dann später mit Range(“Neuer_Name“) angesprochen werden.

Script dazu sieht wie folgt aus:

ActiveWorkbook.Names.Add Name:=“Neuer_Name“ , RefersTo:=“zu der Zelle bzw. Bereich“

Sub Zelle_umbenennen_1() ActiveWorkbook.Names.Add _ Name:=”Obst”, _

RefersTo:=Worksheets(“Tabelle1”).Range(“A1”) Range(„Obst“).Select

End Sub

Abbildung 25: Umbenannte Zelle

(54)

Nun zu meinem ersten praxisnahem Beispiel:

Es kommt sehr oft vor, dass ein Teil aus irgendeine Quelle, kann auch Datenbank sein, in eine Zieldatei eingelesen werden müssen. So etwas könnte wie unten dargestellt aussehen.

Die Daten aus der aktiven Zeile aus der Datei „Quelle.xlsx“ soll in die „Ziel.xlsm“-Datei übertragen werden.

Zu unserem Beispiel lassen wir die Daten aus den Spalten „Name“; „Vorname“ und „Alter“

übertragen und wird dann weiter erweitert mit den Spalten „Beruf“ und „Einsatzbereich“.

In unserem Beispiel unten nach dem Ausführen der Prozedur o.g. Daten in richtiger Reihenfolge übertragen. Es funktioniert so lange bis wir keine neuen Spalten zwischen „A“

und „B“ oder zwischen „B“ und „C“ eingefügt haben. Sonst werden sie in faschen Spalten eingetragen.

Nun, in der Datei „Ziel.xlsx“ die Zellen sind wie folgt von Hand geändert:

„A1“ in „Ziel_Name“;

„B1“ in „Ziel_Vorname“ und

„C1“ in „Ziel_Alter“.

Wenn wir später nach Bedarf neuen Spalten einfügen, werden diese Informationen in die richtige Spalte eingetragen.

Wie stellen wir die richtige Spalte fest?

Mit der Range(„Ziel_Name“).Column wird die Spalte der Zelle von „Ziel_Name“ ermittelt.

Wir schrieben wir die Cells-Anweisung? Cells(Zeile, Spalte).

Uns fehlt noch die richtige Zeile:

letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row + 1 Nun, setzten wir sie wie folgt zusammen:

Cells(letzteZeile, Range(„Ziel_Name“).Column).Value

Die Übertragung funktioniert jetzt für immer mit folgender VBA-Syntax.

Cells(letzteZeile, Range(„Ziel_Name“).Column).Value = Ziel_Name

Referenzen

ÄHNLICHE DOKUMENTE

4.4 Arbeitsmappen anlegen 193 4.5 Arbeitsmappen zusammenführen 193 4.6 Arbeitsmappen entfernen 195 4.7 Die Dokumenteigenschaften 196 Dokumenteigenschaften auslesen

Es ist auch die wichtigste Gruppe zu erwähnen, die Studierenden, für die dieses Buch geschrieben wurde und die mitgewirkt haben, indem Sie sich – freiwillig oder auch unfreiwillig –

„2,7“ die beste Note im Vergleich zu den Restnoten, so wäre sie grün hinterlegt. Aus technischen Gründen ist es derzeit leider nicht möglich, die Ergebnisse auf- oder

Auf jeden Fall muss noch vor Beginn der Examen in Frankreich zuhause überprüft werden, ob die Ergebnisse mit der von Ihnen genutzten Excel-Version richtig berechnet

Dieses Training vermittelt die notwendigen Kompetenzen zur Erstellung und Verwaltung von Arbeitsblättern und Arbeitsmappen, zur Erstellung von Zellen und Bereichen, der Erstellung

Dieses Training vermittelt die notwendigen Kompetenzen zur Erstellung und Verwaltung von Arbeitsblättern und Arbeitsmappen, zur Erstellung von Zellen und Bereichen, der Erstellung

Dieses Training vermittelt die notwendigen Kompetenzen zur Erstellung und Verwaltung von Arbeitsblättern und Arbeitsmappen, zur Erstellung von Zellen und Bereichen, der Erstellung

Dieses Training vermittelt die notwendigen Kompetenzen zur Erstellung und Verwaltung von Arbeitsblättern und Arbeitsmappen, zur Erstellung von Zellen und Bereichen, der Erstellung