12.07.2015 Aufrufe

Workshop 6: VBA-Programmierung mit MS Excel - Dr. Volker ...

Workshop 6: VBA-Programmierung mit MS Excel - Dr. Volker ...

Workshop 6: VBA-Programmierung mit MS Excel - Dr. Volker ...

MEHR ANZEIGEN
WENIGER ANZEIGEN
  • Keine Tags gefunden...

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>1 Standardspeicherort für Arbeitsmappen ................................................................................. 12 Das Application-Objekt ............................................................................................................ 23 Mit Arbeitsmappen arbeiten .................................................................................................... 43.1 Zugriff auf Arbeitsmappen ................................................................................................ 43.2 Arbeitsmappen anlegen ................................................................................................... 43.3 Arbeitsmappen speichern ................................................................................................. 63.4 Arbeitsmappen öffnen ...................................................................................................... 63.5 Liste der geöffneten Arbeitsmappen beeinflussen .......................................................... 73.6 Mehrere Arbeitsmappen öffnen ........................................................................................ 73.7 Geöffnete Arbeitsmappen er<strong>mit</strong>teln ................................................................................. 83.8 Arbeitsmappe ohne Rückfrage schließen ........................................................................ 93.9 Arbeitsmappe schließen ohne zu speichern .................................................................... 93.10 Arbeitsmappe löschen .................................................................................................... 93.11 Arbeitsmappe schützen ................................................................................................ 114. Dokumenteneigenschaften .................................................................................................. 124.1 Dokumenteigenschaften auslesen ................................................................................. 124.2 Dokumenteigenschaften anzeigen ................................................................................. 134.3 Dokumenteigenschaften setzen ..................................................................................... 145 Externe Verknüpfungen ausgeben ....................................................................................... 146. Aufgaben .............................................................................................................................. 157. Lösungen .............................................................................................................................. 151 Standardspeicherort für ArbeitsmappenDer Standardspeicherort von Arbeitsmappen kann in <strong>Excel</strong> wie folgt festgelegt werden: auf die Office-Schaltfläche klicken,EXCEL-OPTIONEN auswählen,Rubrik SPEICHERN auswählen,den Standardspeicherort im dafür vorgesehenen Feld eingebenMit <strong>VBA</strong> kann der Standardspeicherort über das Direktfenster <strong>mit</strong> folgender Codezeile bestimmtwerden:Application.DefaultFilePath = "C:\MeinPfad\MeinOrdner"oder, etwas konkreterApplication.DefaultFilePath = "C:\Eigene Dateien\<strong>Excel</strong> Dateien"Für das Arbeiten <strong>mit</strong> Arbeitsmappen ist es vorteilhaft, dass der Standardspeicherort gesetztist. Probieren sie bitte folgende Prozedur aus:Sub Speichern_in_Standardordner()' Zum Standarspeicherort wechseln© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 1 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>ChDir Application.DefaultFilePath' Dialogfeld 'Speichern unter' aufrufenApplication.Dialogs(xlDialogSaveAs).ShowEnd Sub2 Das Application-ObjektMit dem Application-Objekt (quasi <strong>Excel</strong> selbst) kann nicht nur auf sogen. Auflistungenzugegriffen werden, sondern auch auf Objekte zur Programmsteuerung (z. B. integrierte Dialogfelder).Für verschiedene aktive Objekte, wie die aktive Arbeitsmappe, das aktive Tabellenblattoder die aktuell selektierte Zelle, sind verkürzte Zugriffswege vorhanden.Aufgabe der Prozedur MappeErstellen ist die Erstellung einer neuen Arbeitsmappe <strong>mit</strong> 52Tabellenblättern. Die Tabellenblätter sollen KW01, …, KW52 heißen. Die Spaltenköpfe derneu erstellten Tabellenblätter sollen <strong>mit</strong> Nord, Süd, Ost und West belegt werden. Zum Beschriftender Spaltenköpfe in den neuen Tabellenblättern ruft die Prozedur jeweils die UnterprozedurSpaltenKoepfeEinfügen auf.Sub MappeErstellen()Const conDateiname As String = "IchBinNeuHier"Const conKW As String = "KW"Dim objWkb As Workbook ' Objektvariable für ArbeitsmappeDim objSht As Worksheet ' Objektvariable für ArbeitsblattDim intWoche As Integer ' SchleifenzählerDim strPfadname As String ' Vollständiger PfadnameDim strExt As String ' Zusatz zum Dateinamen' Bei Fehler ...On Error GoTo Fehler' Dateizusatz in Abhängigkeit von der <strong>Excel</strong>-Version bestimmenIf Val(Application.Version) < 12 ThenstrExt = ".xls" ' <strong>Excel</strong> 2003 und früherElsestrExt = ".xlsx" ' <strong>Excel</strong> 2007End If' Vollständiger Pfadname = Standardspeicherort + Dateiname + DateinzusatzstrPfadname = Application.DefaultFilePath & "\" & conDateiname & strExtIf Dir(strPfadname) vbNullString Then' Datei ist vorhanden.If MsgBox(Prompt:="Datei '" & strPfadname & "' ist bereits vorhanden!" & _vbNewLine & "Datei löschen?", _Buttons:=vbCritical + vbYesNo, Title:="Löschen?") = vbYes ThenKill strPfadname ' Datei löschenElse' Datei nicht löschenGoTo Ausgang ' Prozedur verlassenEnd IfEnd If' Neue Arbeitsmappe erzeugen <strong>mit</strong> der Methode AddSet objWkb = Workbooks.Add' Neue Arbeitsmappe im Standardspeicherort speichernobjWkb.SaveAs Filename:=strPfadnameApplication.DisplayAlerts = False ' Warnungen ausschalten' Alle standardmäßig angelegten Tabellenblätter löschen' außer dem aktiven TabellenblatFor Each objSht In WorksheetsIf Not objSht Is ActiveSheet ThenobjSht.DeleteEnd If© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 2 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>Next objShtApplication.DisplayAlerts = True ' Warnungen wieder einschalten' Die Objektvariable 'objSht' referenziert d. aktuelle TabellenblattSet objSht = ActiveSheet' Das aktive Tabellenblatt wird benanntobjSht.Name = conKW & "01"' Spaltenüberschriften einfügen für das 1. TabellenblttCall SpaltenKoepfeEinfügen' Zählschleife 51 mal durchlaufenFor intWoche = 2 To 52' Neues Tabellenlatt nach dem aktiven einfügenSet objSht = Worksheets.Add(After:=ActiveSheet)' Neues Tabellenblatt benennenobjSht.Name = conKW & Format(intWoche, "00")' Spaltenüberschriften einfügen für das aktuelle TabellenblattCall SpaltenKoepfeEinfügenNext intWoche' Arbeitsmappe schließenobjWkb.Close TrueAusgang:' Objektvariablen freigebenSet objWkb = NothingSet objSht = NothingExit SubFehler:MsgBox Prompt:="Fehler # " & Err.Number & ": " & Err.Description, _Buttons:=vbCritical, Title:="Laufzeitfehler"Resume AusgangEnd SubSub SpaltenKoepfeEinfügen()Dim varRegion As VariantDim intSpalte As IntegervarRegion = Array("Nord", "Süd", "Ost", "West")For intSpalte = 1 To UBound(varRegion) + 1With ActiveSheet.Cells(1, intSpalte).Value = varRegion(intSpalte - 1)End WithNext intSpalteEnd SubIn der Hauptprozedur wird das Application-Objekt u.a. dazu genutzt, die aktuell eingesetzte<strong>Excel</strong>-Version zu bestimmen. In Abhängigkeit davon wird der Zusatz zum Dateinamen(xls bzw. xlsx). Ohne diese Bestimmung würde die Prozedur <strong>mit</strong> einem Laufzeitfehler abgebrochen.Einige <strong>Excel</strong>-Versionen sind in Tab. 1 zusammengestellt:NameVersion<strong>Excel</strong> 2007 12.0<strong>Excel</strong> 2003 11.0<strong>Excel</strong> XP 10.0<strong>Excel</strong> 2000 9.0<strong>Excel</strong> 97 8.0<strong>Excel</strong> 95 7.0Tabelle 1: <strong>Excel</strong>-Versionen© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 3 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>Haupt- und Unterprozedur sind ausführlich kommentiert. Nur noch ein Hinweis: Mit derSchleifen-Anweisung For Each shtNeu In Worksheets wird die Auflistung der Tabellenblätterin der neuen Arbeitsmappe durchlaufen, wobei shtNeu eine Objektvariable repräsentiert.Beim Löschen von Tabellenblättern ist darauf zu achten, dass mindestens einesbestehen bleibt. Sonst reagiert <strong>Excel</strong> <strong>mit</strong> einer Fehlermeldung.3 Mit Arbeitsmappen arbeiten3.1 Zugriff auf ArbeitsmappenDer Zugriff auf Arbeitsmappen kann auf verschieden Art und Weise erfolgen. In Tabelle 2sind die verschiedenen Möglichkeiten zusammengestellt:ActiveWorkbookThisWorkbookWorkbooks(1)Workbooks.Item(1)Workbooks("Name")Workbooks.Item("Name")Workbooks-ObjektvariableWorkbooks-AuflistungTabelle 1: Zugriffsmöglichkeiten auf ArbeitsmappenSie haben Zugriff auf die aktuelle Arbeitsmappe.Sie haben Zugriff auf die Arbeitsmappe, in der die aktuelleProzedur ausgeführt wird.Über ein Element der Workbooks-Auflistung oder eine Objektvariablevon Type Workbook besteht ebenfalls Zugriff auf einebestimmte ArbeitsmappeDa<strong>mit</strong> können Aktionen durchgeführt werden, die sich allgemeinauf die Verwaltung von Arbeitsmappen beziehen.In der folgenden Tabelle sind wichtige Eigenschaften und Methoden des Workbook-Objektszusammengestellt:EigenschaftMethodeFullName Vollständiger Dateiname Activate AktivierenName Dateiname Close SchließenTheme Design der Mappe Save / SaveAs SpeichernSaved Speicherstatus PrintOut AusdruckenSheets Auflistung aller Blätter Protect SchützenWorksheets Auflistung Arbeitsblätter Unprotect Schutz aufhebenCharts Auflistung Diagrammblätter ApplyTheme Design zuweisenTabelle 2: Ausgewählte Eigenschaften und Methoden des Workbook-Objekts3.2 Arbeitsmappen anlegenMit der Add-Methode kann eine neue Arbeitsmappe angelegt werden. Mit der EigenschaftSheetsInWorkbook wird die Zahl der zur Verfügung gestellten Arbeitsblätter bestimmt. DieProzedur NeueArbeitsmappe erstellt eine neue Arbeitsmappe <strong>mit</strong> sieben Tabellenblättern.Diese werden dabei auch gleich nach Wochentagen benannt. Zum Benennen der Tabellenblätterwird die eingebaute Textfunktion Choose angewandt. In der kopfgesteuerten SchleifeDo While Dir(strPfadname) vbNullString wird ein gültiger vollständiger Pfadname für<strong>mit</strong>hilfe der eingebauten Funktion Dir erzeugt.Sub NeueArbeitsmappe()' Erzeugt eine neue Arbeitsmappe <strong>mit</strong> 7 Tabellenblättern' (Montag, ..., Sonntag).Const conSheets As Integer = 7Dim intSht As Integer ' Zählnummer für Tabellenblätter© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 4 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>Dim intIdx As Integer ' intIdx zum DateinamenDim strPfadname As String ' Vollständiger PfadnameDim strDateiname As String ' DateinameDim strExt As String ' Zusatz zum DateinamenDim strName As String ' Name für Tabellenblatt' Bei Fehler ...On Error GoTo FehlerApplication.ScreenUpdating = False ' Bildschirmaktualisierung deaktivierenstrDateiname = "IchBinNeuHier"' Dateizusatz in Abhängigkeit von der <strong>Excel</strong>-Version bestimmenIf Val(Application.Version) < 12 ThenstrExt = ".xls" ' <strong>Excel</strong> 2003 und früherElsestrExt = ".xlsx" ' <strong>Excel</strong> 2007End If' Vollständiger Pfadname = Standardspeicherort + Dateiname + DateizusatzstrPfadname = Application.DefaultFilePath & "\" & strDateiname & strExtDo While Dir(strPfadname) vbNullString' Dateinamen ändernintIdx = intIdx + 1strDateiname = strDateiname & CStr(intIdx)' Vollständiger Pfadname = Standardspeicherort + Dateiname + DateizusatzstrPfadname = Application.DefaultFilePath & "\" & strDateiname & strExtLoopMsgBox Prompt:="Standardeinstellung für Zahl der Tabellenblätter" & _vbNewLine & _"in einer Arbeitsmappe: " & Application.SheetsInNewWorkbook, _Buttons:=vbInformation, Title:="Standardeinstellung"' Neue Arbeitsmappe hinzufügenWorkbooks.AddWith ActiveWorkbook' Die noch fehlende Anzahl Tabellenbätter hinzufügen.Sheets.Add Count:=conSheets - Worksheets.CountMsgBox Prompt:="Aktuelle Zahl der Tabellenblätter " & vbNewLine & _"in der neu angelegten Arbeitsmappe: " & _Application.Worksheets.Count, _Buttons:=vbInformation, Title:="Anzahl Tabellenblätter"' Zählschleife über alle neu eingefügten TabellenblätterFor intSht = 1 To .Worksheets.CountstrName = Choose(intSht, "Montag", "Dienstag", "Mittwoch", _"Donnerstag", "Freitag", "Samstag", "Sonntag")With .Worksheets(intSht).Name = strNameWith .[A1] 'Zelle A1 füllen und rot umranden.Value = strName.BorderAround LineStyle:=xlContinuous, _ColorIndex:=3, Weight:=xlMedium.Interior.ColorIndex = 6 ' gelbEnd WithEnd WithNext intSht.SaveAs Filename:=strPfadname.CloseEnd WithApplication.ScreenUpdating = True ' Bildschirmaktualisierung aktiviertAusgang:Exit SubFehler:MsgBox Prompt:="Fehler # " & Err.Number & ": " & Err.Description, _© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 5 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>Buttons:=vbCritical, Title:="Laufzeitfehler"Resume AusgangEnd Sub3.3 Arbeitsmappen speichernIn den beiden vorstehenden Codebeispielen wurde die neu angelegte Arbeitsmappe <strong>mit</strong> derSaveAs-Methode gespeichert. Dabei wurde das Argument FileName vorher <strong>mit</strong> der VariablenstrPfadName festgelegt.Bei Bedarf kann auch auf den integrierten Dialog Speichern unter zurückgegriffen werden,der <strong>mit</strong> der Methode Show ausgeführt wird.Sub SpeichernUnterDialog()' Anwendung des integriertes Dialogfelds 'Speichern unter'If Application.Dialogs(xlDialogSaveAs).Show = True ThenMsgBox Prompt:="Gespeichert!", Buttons:=vbInformation, _Title:="Speichern unter"End IfEnd SubDie Auflistung Dialogs enthält alle integrierten Dialoge von <strong>Excel</strong>. Die KonstantexlDialogSaveAs dient zum Aufrufen des Speichern unter-Dialogs von <strong>Excel</strong>.3.4 Arbeitsmappen öffnenZum Öffnen einer <strong>Excel</strong>-Arbeitsmappe muss bekannt sein, wie der vollständige Pfadnameheißt. Für das Öffnen wird die Methode Open angewandt. Die komplette Syntax der MethodeOpen kann in der Online-Hilfe nachgelesen werden. Besonders wichtig ist dabei das ArgumentUpdateLinks. Die Bedeutung der verschiedenen Werte enthält Tab. 1.KonstanteBedeutung1 xlUpdateLinksUserSetting Benutzer gibt an, wie Verknüpfungen aktualisiert werden.2 xlUpdateLinksNever Verknüpfungen für diese Arbeitsmappe werden beimÖffnen niemals aktualisiert.3 xlUpdateLinksAlways Verknüpfungen für diese Arbeitsmappe werden beimÖffnen immer aktualisiert.Quelle: <strong>Excel</strong>-Online-HilfeTabelle 1: Bedeutung der Konstante UpdateLinksDie folgende Prozedur öffnet die Datei IchBinNeuHier, die sich im Standardspeicherortbefindet. Falls das nicht zutrifft, sorgt die On Error-Anweisung dafür, dass zur Fehlerbehandlunggesprungen wird.Sub ArbeitsmappeOeffnen()Const conDateiname As String = "IchBinNeuHier"Dim strPfadname As String ' Vollständiger PfadnameDim strExtAs String ' Zusatz zum DateinamenOn Error GoTo Fehler' Dateizusatz in Abhängigkeit von der <strong>Excel</strong>-Version bestimmenIf Val(Application.Version) < 12 ThenstrExt = ".xls" ' <strong>Excel</strong> 2003 und früherElsestrExt = ".xlsx" ' <strong>Excel</strong> 2007© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 6 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>End IfstrPfadname = Application.DefaultFilePath & "\" & conDateiname & strExtApplication.Workbooks.Open Filename:=strPfadname, _UpdateLinks:=xlUpdateLinksNeverAusgang:Exit SubFehler:MsgBox Prompt:="Fehler # " & Err.Number & ": " & Err.Description, _Buttons:=vbCritical, Title:="Laufzeitfehler"Resume AusgangEnd SubZum Öffnen von <strong>Excel</strong>-Arbeitsmappen kann ebenfalls ein integrierter Dialog eingesetzt werden.Dabei kann auch schon der Pfadname <strong>mit</strong>gegeben werden, den der Öffnen-Dialog anzeigensoll. Die Prozedur dafür befindet sich im folgenden Code-Listing.Sub DialogOeffnenAnzeigen()Const conDateiname As String = "IchBinNeuHier"Const conExt As String = ".xlsx" ' oder ".xls"Dim strPfadname As String ' Vollständiger PfadnamestrPfadname = Application.DefaultFilePath & "\" & conDateiname & conExtApplication.Dialogs(xlDialogOpen).Show strPfadnameEnd Sub3.5 Liste der geöffneten Arbeitsmappen beeinflussenBeim Klick auf die Office-Schaltfläche werden die zuletzt verwendeten Dokumente angezeigt.Die Anzahl der angezeigten Arbeitsmappen kann wie folgt selbst bestimmt werden.Sub DateilisteManipulieren()' Liste der zuletzt geöffneten Dokumente beeinflussenOn Error Resume NextWith Application.DisplayRecentFiles = True.RecentFiles.Maximum = 9 ' Kann ein Wert von 0 bis 9 sein.End WithEnd SubMit DisplayRecentFiles = False wird die Liste der zuletzt verwendeten Dokumentedeaktiviert. Sie kann bis zu neun Listeneinträge umfassen.3.6 Mehrere Arbeitsmappen öffnenZum Öffnen mehrerer Arbeitsmappen auf einmal kann der integrierte Öffnen-Dialog von <strong>Excel</strong>verwendet werden. Die folgende Prozedur demonstriert, wie’s geht:Sub MehrereMappenOeffnen()Dim varBooks As Variant ' ArbeitsmappenDim strFilter As String ' DateifilterkriterienDim intWkb As Integer ' Zähler für ArbeitsmappenstrFilter = "<strong>Excel</strong> Dateien (*.xls;*.xlsx;*.xlsm;*.xlsb)" & _",*.xls;*.xlsx;*.xlsm;*.xlsb"varBooks = Application.GetOpenFilename(FileFilter:=strFilter, MultiSelect:=True)If IsArray(varBooks) ThenFor intWkb = LBound(varBooks) To UBound(varBooks)Workbooks.Open varBooks(intWkb)© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 7 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>Next intWkbElseWorkbooks.Open varBooksEnd IfEnd SubDas erste Argument FileFilter bestimmt, welche Dateien angezeigt werden sollen. DasArgument MultiSelect gibt an, ob eine Mehrfachauswahl von Arbeitsmappen möglich ist(True) oder nicht (False).3.7 Geöffnete Arbeitsmappen er<strong>mit</strong>telnDie Prozedur IstArbeitsmappeGeoeffnet öffnet eine Arbeitsmappe und prüft anschließen<strong>mit</strong> der Funktion IstArbeitsmappe, ob die Arbeitsmappe wirklich geöffnet wurde.Sub IstArbeitsmappeGeoeffnet()Const conDateiname As String = "IchBinNeuHier"Dim strPfadname As String ' Vollständiger PfadnameDim strExtAs String ' Zusatz zum DateinamenDim strMsgAs String ' MeldungOn Error GoTo Fehler' Dateizusatz in Abhängigkeit von der <strong>Excel</strong>-Version bestimmenIf Val(Application.Version) < 12 ThenstrExt = ".xls" ' <strong>Excel</strong> 2003 und früherElsestrExt = ".xlsx" ' <strong>Excel</strong> 2007End IfstrMsg = "Die Arbeitsmappe " & conDateiname & " ist "strPfadname = Application.DefaultFilePath & "\" & conDateiname & strExtApplication.Workbooks.Open Filename:=strPfadname, _UpdateLinks:=xlUpdateLinksNeverIf IstArbeitsmappe(conDateiname) ThenMsgBox Prompt:=strMsg & "geöffnet.", Buttons:=vbInformation, _Title:="Arbeitsmappe geöffnet."ElseMsgBox Prompt:=strMsg & "nicht geöffnet.", Buttons:=vbInformation, _Title:="Arbeitsmappe nicht geöffnet."End IfAusgang:Exit SubFehler:MsgBox Prompt:="Fehler # " & Err.Number & ": " & Err.Description, _Buttons:=vbCritical, Title:="Laufzeitfehler"Resume AusgangEnd SubFunction IstArbeitsmappe(strPfadname As String) As BooleanDim objWkb As Workbook ' ArbeitsmappeOn Error Resume NextSet objWkb = Workbooks(strPfadname)If Err = 0 And Not objWkb Is Nothing ThenIstArbeitsmappe = TrueEnd IfEnd FunctionMit der Prozedur GeoeffneteArbeitsmappenEr<strong>mit</strong>teln kann über das AuflistungsobjektWorkbooks festgestellt werden, welche Arbeitsmappen gerade geöffnet sind:© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 8 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>Sub GeoeffneteArbeitsmappenEr<strong>mit</strong>teln()Dim objWkb As Workbook ' ArbeitsmappeDim intWkb As Integer ' Zähler für ArbeitsmappenSheets.Add' Neues Tabellenblatt einfügenFor intWkb = 1 To Application.Workbooks.CountCells(intWkb, 1) = Workbooks(intWkb).NameNext intWkbEnd Sub3.8 Arbeitsmappe ohne Rückfrage schließenDie Prozedur MappeSchliessen schließt eine Arbeitsmappe ohne weitere Rückfrage.Sub MappeSchliessen()Application.DisplayAlerts = FalseActiveWorkbook.Close SaveChanges:=TrueApplication.DisplayAlerts = TruEnd Sub' Warnungen ausschalten' Mappe schließen und speichern' Warnungen einschalten3.9 Arbeitsmappe schließen ohne zu speichernWenn eine bearbeitete Arbeitsmappe geschlossen werden soll ohne die Änderungen zuspeichern, kann die Prozedur MappeSchliessenOhneSpeichern eingesetzt werden.Sub MappeSchliessenOhneSpeichern()With Application.DisplayAlerts = False ' Warnungen ausschaltenActiveWorkbook.Close ' Mappe schließen ohne zu speichern.DisplayAlerts = True ' Warnungen einschaltenEnd WithEnd Sub3.10 Arbeitsmappe löschenOhne Einsatz des Datei-Explorers von Windows kann eine Arbeitsmappe <strong>mit</strong> der AnweisungKill gelöscht werden. Die zu löschende Arbeitsmappe darf dabei nicht geöffnet sein. DasLöschen erfolgt ohne vorherige Warnung. Die Prozedur MappeLoeschen demonstriert dieVorgehensweise:© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 9 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>Sub MappeLoeschen()Const conDateiname As String = "IchBinNeuHier"Dim strPfadname As String ' Vollständiger PfadnameDim strExtAs String ' Zusatz zum DateinamenOn Error GoTo Fehler' Dateizusatz in Abhängigkeit von der <strong>Excel</strong>-Version bestimmenIf Val(Application.Version) < 12 ThenstrExt = ".xls" ' <strong>Excel</strong> 2003 und früherElsestrExt = ".xlsx" ' <strong>Excel</strong> 2007End If' Vollständiger PfadnamestrPfadname = Application.DefaultFilePath & "\" & conDateiname & strExtIf Dir(strPfadname) vbNullString ThenKill strPfadname ' Arbeitsmappe ohne Warnung löschenElseMsgBox Prompt:="Eine Arbeitmappen <strong>mit</strong> dem Namen " & vbNewLine & _conDateiname & strExt & vbNewLine & _"konnte nicht gefunden werden!", _Buttons:=vbExclamation, Title:="Arbeismappe loeschen"End IfAusgang:Exit SubFehler:MsgBox Prompt:="Fehler # " & Err.Number & ": " & Err.Description, _Buttons:=vbCritical, Title:="Laufzeitfehler"Resume AusgangEnd SubDie zusammengehörigen Prozeduren MappeAnlegen und MappeEntfernen demonstrierennochmals, wie die Arbeitsmappe LöschMich angelegt und danach wieder gelöschtwerden kann. Der zugehörige Pfad wird dem Standardspeicherort entnommen. Der Zusatzzum Dateinamen wird <strong>mit</strong>tels <strong>Excel</strong>-Version bestimmt.Sub MappeAnlegen()' Arbeismappe 'LöschMich' anlegenConst conDateiname As String = "LöschMich"Dim strPfadname As String ' Vollständiger PfadnameDim strExt As String ' Zusatz zum DateinamenOn Error GoTo FehlerApplication.ScreenUpdating = False ' Bildschirmaktualisierung deaktivieren' Dateizusatz in Abhängigkeit von der <strong>Excel</strong>-Version bestimmenIf Val(Application.Version) < 12 ThenstrExt = ".xls" ' <strong>Excel</strong> 2003 und früherElsestrExt = ".xlsx" ' <strong>Excel</strong> 2007End If' Vollständiger Pfadname = Standardspeicherort + Dateiname + DateizusatzstrPfadname = Application.DefaultFilePath & "\" & conDateiname & strExtIf Dir(strPfadname) = vbNullString ThenWorkbooks.Add' Angelegte Mappe schließen und SpeichernActiveWorkbook.SaveAs Filename:=strPfadnameActiveWorkbook.CloseElseMsgBox Prompt:="Die Arbeimappe '" & strPfadname & "' existiert bereits!", _Buttons:=vbCritical, Title:="Mappe anlegen"End If© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 10 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>Ausgang:Application.ScreenUpdating = True ' Bildschirmaktualisierung aktivierenExit SubFehler:MsgBox Prompt:="Fehler # " & Err.Number & ": " & Err.Description, _Buttons:=vbCritical, Title:="Laufzeitfehler"Resume AusgangEnd SubSub MappeEntfernen()' Arbeismappe 'LöschMich' löschenConst conDateiname As String = "LöschMich"Dim strPfadname As String ' Vollständiger PfadnameDim strExt As String ' Zusatz zum DateinamenOn Error GoTo Fehler' FehlerbehandlungApplication.ScreenUpdating = False ' Bildschirmaktualisierung deaktivieren' Dateizusatz in Abhängigkeit von der <strong>Excel</strong>-Version bestimmenIf Val(Application.Version) < 12 ThenstrExt = ".xls" ' <strong>Excel</strong> 2003 und früherElsestrExt = ".xlsx" ' <strong>Excel</strong> 2007End If' Vollständiger Pfadname = Standardspeicherort + Dateiname + DateizusatzstrPfadname = Application.DefaultFilePath & "\" & conDateiname & strExtIf Dir(strPfadname) vbNullString ThenKill strPfadname ' Mappe löschenMsgBox Prompt:="Die Arbeimappe '" & strPfadname & "' wurde gelöscht!", _Buttons:=vbInformation, Title:="Mappe löschen"ElseMsgBox Prompt:="Die Arbeimappe '" & strPfadname & "' existiert nicht!", _Buttons:=vbCritical, Title:="Mappe löschen"End IfAusgang:Application.ScreenUpdating = True ' Bildschirmaktualisierung aktivierenExit SubFehler:MsgBox Prompt:="Fehler # " & Err.Number & ": " & Err.Description, _Buttons:=vbCritical, Title:="Laufzeitfehler"Resume AusgangEnd Sub3.11 Arbeitsmappe schützenDie beiden folgenden Prozeduren demonstrieren, wie alle Blätter eine Arbeitsmappe geschütztbzw. wie der Blattschutz wieder aufgehoben werden kann. Für Protect existierenzahlreiche optionale Parameter, siehe <strong>Excel</strong>-Online-Hilfe.Blattschutz setzenSub BlattschutzSetzen()'Schutz vor Änderungen setzenDim objSht As WorksheetFor Each objSht In ActiveWorkbook.SheetsobjSht.ProtectNext objShtEnd SubBlattschutz aufhebenSub BlattSchutzAufheben()'Schutz vor Änderungen aufhebenDim objSht As WorksheetFor Each objSht In ActiveWorkbook.SheetsobjSht.UnprotectNext objShtEnd Sub© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 11 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>4. DokumenteneigenschaftenDie Dokumenteneigenschaften einer Arbeitsmappe können anzeigt und auch verändert werden,indem zunächst auf die Office-Schaltfläche geklickt wird. Über VORBEREITEN undEIGENSCHAFTEN gelangt man zu den Dokumenteigenschaften: Klicken Sie im Dokumentinformationsbereichauf den Pfeil neben Dokumenteigenschaften, um die Eigenschaftenauszuwählen, die Sie anzeigen möchten (z. B. Erweiterte Eigenschaften).Abb. 1: Dokumenteigenschaften einer Arbeitsmappe4.1 Dokumenteigenschaften auslesenMit Hilfe der Prozedur EigenschaftenAuslesen können die genauen Bezeichnungen der Felderdes Formular (vgl. Abb. 1) in die neue Arbeitsmappe DocProperties geschrieben werden.Sub EigenschaftenAuslesen()' Dokumenteigenschaften in Tabellenblatt schreibenConst conDateiname As String = "DocProperties"Dim objWkb As Workbook ' ArbeitsmappeDim intZeile As Integer ' ZeilennummerDim objPropAs DocumentProperty ' EigenschaftDim strPfadname As String ' Vollständiger PfadnameDim strExt As String ' Zusatz zum DateinamenOn Error GoTo FehlerApplication.ScreenUpdating = False ' Bildschirmaktualisierung deaktivieren' Dateizusatz in Abhängigkeit von der <strong>Excel</strong>-Version bestimmenIf Val(Application.Version) < 12 ThenstrExt = ".xls" ' <strong>Excel</strong> 2003 und früherElsestrExt = ".xlsx" ' <strong>Excel</strong> 2007End If' Vollständiger Pfadname = Standardspeicherort + Dateiname + DateizusatzstrPfadname = Application.DefaultFilePath & "\" & conDateiname & strExtIf Dir(strPfadname) vbNullString ThenKill strPfadnameEnd IfSet objWkb = Workbooks.AddWith objWkb© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 12 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>.Sheets(1).ActivateintZeile = 1For Each objProp In objWkb.BuiltinDocumentPropertiesWith objPropCells(intZeile, 1).Value = .NameOn Error Resume NextCells(intZeile, 2).Value = .ValueOn Error GoTo FehlerEnd WithintZeile = intZeile + 1Next objProp.SaveAs Filename:=strPfadnameEnd WithAusgang:Set objProp = NothingSet objWkb = NothingApplication.ScreenUpdating = True ' Bildschirmaktualisierung aktivierenExit SubFehler:MsgBox Prompt:="Fehler # " & Err.Number & ": " & Err.Description, _Buttons:=vbCritical, Title:="Laufzeitfehler"Resume AusgangEnd SubAbb. 2 : Dokumenteigenschaften der aktuellen Arbeitsmappe4.2 Dokumenteigenschaften anzeigenMit der Prozedur DisplayDocProperties lassen sich <strong>mit</strong>tels eingebautem Dialogfeld dieDokumenteigenschaften anzeigen und pflegen.Sub DisplayDocProperties()Dim dlg As Dialog ' Eingebauter DialogDim bolErgebnis As Boolean ' RückgabewertSet dlg = Application.Dialogs(xlDialogProperties)bolErgebnis = dlg.ShowEnd Sub© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 13 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>4.3 Dokumenteigenschaften setzenDie Prozedur SetDocProperties veranschaulicht, wie die Dokumenteigenschaften gesetztwerden können.Sub SetDocProperties()With ThisWorkbook.BuiltinDocumentProperties("Title").Value = "Titel" '.BuiltinDocumentProperties("Subject").Value = "Thema".BuiltinDocumentProperties("Author").Value = "Autor".BuiltinDocumentProperties("Manager").Value = "Manager".BuiltinDocumentProperties("Company").Value = "Firma".BuiltinDocumentProperties("Category").Value = "Kategorie".BuiltinDocumentProperties("Keywords").Value = "Stichwörter".BuiltinDocumentProperties("Comments").Value = "Kommentar".BuiltinDocumentProperties("Creation Date").Value = Date.BuiltinDocumentProperties("Last Save Time").Value = Date.BuiltinDocumentProperties("Content Status").Value = "Entwurf"End WithEnd Sub5 Externe Verknüpfungen ausgebenIn <strong>Excel</strong> besteht die Möglichkeit, mehrere Arbeitsmappen <strong>mit</strong>einander zu verknüpfen. Um zuer<strong>mit</strong>teln, welche Verknüpfungen eine Arbeitsmappe enthält, kann die ProzedurVerknuepfungenAuflisten eingesetzt werden. Die einzelnen Verknüpfungen werdennacheinander in ein neues Tabellenblatt geschrieben. Die eingesetzte MethodeLinkSources gibt <strong>mit</strong> der Konstanten xl<strong>Excel</strong>Links die Verknüpfungen zu einem <strong>Excel</strong>-Tabellenblatt zurück. Wenn keine Verknüpfungen vorhanden sind, wird Empty zurückgegeben.Sub VerknuepfungenAuflisten()' Die Namen verknüpfter Dokumente in einem Tabellenblatt ausgebenDim objWkb As Workbook ' ArbeitsmappeDim objSht As Worksheet ' TabellenblattDim varLink As Variant ' externe VerknüpfungDim intLink As Integer ' SchleifenzählerSet objWkb = ThisWorkbookWith objWkbvarLink = .LinkSources(xl<strong>Excel</strong>Links)' Wenn keine Verknüpfungen vorhanden sind, wird Empty zurückgegeben.If Not IsEmpty(varLink) ThenSet objSht = .Worksheets.Add ' Tabellenblatt hinzufügenFor intLink = 1 To UBound(varLink)objSht.Cells(intLink, 1) = varLink(intLink)Next intLinkElseMsgBox Prompt:="Diese Arbeitsmappe hat keine " & _"Verknüpfungen zu anderen Mappen!", _Buttons:=vbInformation, Title:="Externe Verknüpfungen"End IfEnd WithSet objWkb = NothingSet objSht = NothingEnd Sub© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 14 von 15


<strong>Workshop</strong> 6: <strong>VBA</strong>-<strong>Programmierung</strong> <strong>mit</strong> <strong>MS</strong> <strong>Excel</strong>6. Aufgaben1. Wie wird die Anzahl der Tabellenblätter festgelegt, die bei Neuanlage einer Arbeitsmappeeingefügt werden?2. Welche Anweisung kommt zum Einsatz, um eine Arbeitsmappe zu löschen3. Wie kann eine Arbeitsmappe geschlossen werden, ohne das die vorgenommenen Änderungengespeichert werden?4. Welche Möglichkeiten bietet <strong>Excel</strong>, um eine Arbeitsmappe unter einem anderen Namenzu speichern?5. Wie kann der Name der zu öffnenden Arbeitsmappe zur Laufzeit vom Benutzer angefragtwerden?6. Wie kann erreicht werden, dass eine Arbeitsmappe nur eingesehen, aber nicht verändertwerden kann?7. Lösungen1. Mit Hilfe der Eigenschaft Application.SheetsInNewWorkbook wird bestimmt, wieviele Tabellenblätter in einer neuen Arbeitsmappen angelegt werden.2. Um eine Arbeitsmappe zu löschen, wird die Kill-Anweisung benutzt.3. Zum Schließen einer Arbeitsmappe ohne zu speichern wird die AnweisungActiveWorkbook.Close SaveChanges:=False eingesetzt.4. Dazu wird die Methode SaveAs <strong>mit</strong> dem Parameter FileName:= ... angewandt. Eineweitere Möglichkeit ist die Verwendung des Speichern unter-Dialogfelds in Verbindung<strong>mit</strong> der Show-Methode: Application.Dialogs(xlDialogSaveAS).Show5. Der Öffnen-Dialog des Application-Objekts kann dazu benutzt werden, um den Namender zu öffnenden Arbeitsmappe abzufragen:Application.Dialogs(xlDialogOpen).Show6. Sie müssen das betreffende Arbeitsblatt <strong>mit</strong> folgenden Parametern öffnen:Application.Workbooks.Open Filename:=..., ReadOnly:=True© 2011, <strong>Dr</strong>. <strong>Volker</strong> Thormählen Seite 15 von 15

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!