View
215
Download
0
Category
Preview:
Citation preview
Regionales Rechenzentrum für Niedersachsen
VBA (Visual Basic for Application)
Austausch von Daten
OpenOffice | | Folie 2Access 2007 – VBA | 06.03.08 | Seite 2
Regionales Rechenzentrum für Niedersachsen
File - Dialogbox
... ist in der Office 2000-Version erstmalig implementiert. ... hat folgende Typen:
msoFileDialogFilePicker, um Dateien auszuwählen. msoFileDialogFolgerPicker, um Verzeichnisse auszuwählen. msoFileDialogOpen, um Dateien auszuwählen und zu öffnen. Dieser Typ wird
nicht von Access 2007 unterstützt. msoFileDialogSaveAs, um Dateien auszuwählen und zu speichern. Dieser Typ
wird nicht von Access 2007 unterstützt. ... benötigen einen Verweis auf die Microsoft Office xx Library. Dialogboxen können auch mit Hilfe der Windows API erstellt werden.
OpenOffice | | Folie 3Access 2007 – VBA | 06.03.08 | Seite 3
Regionales Rechenzentrum für Niedersachsen
Objektvariable deklarieren
Dim fd As Office.FileDialogSet fd = Application.FileDialog(msoFileDialogFilePicker)
Die Objektvariable hat den Datentyp Office.FileDialog. Die Objektvariable bekommt ein Verweis auf eine Dialogbox zur Auswahl
von Dateien übergeben.
OpenOffice | | Folie 4Access 2007 – VBA | 06.03.08 | Seite 4
Regionales Rechenzentrum für Niedersachsen
Aussehen der Dialogbox
Dim fd As Office.FileDialogSet fd = Application.FileDialog(msoFileDialogFilePicker)With fd
.Title = "Datei für die Anlage auswählen"
.ButtonName = "Auswählen"End With
Bezeichnung in der Titelleiste der Dialogbox.
Beschriftung des OK-Buttons.
OpenOffice | | Folie 5Access 2007 – VBA | 06.03.08 | Seite 5
Regionales Rechenzentrum für Niedersachsen
Dateiauswahl beeinflussen
Dim fd As Office.FileDialogSet fd = Application.FileDialog(msoFileDialogFilePicker)With fd
.AllowMultiSelect = False
.InitialFileName = "C:\"
.InitialView = msoFileDialogViewListEnd With
Mehrfachauswahl von Dateien?
Wie werden die Dateien und Ordner in dem
Dialogfenster angezeigt?
OpenOffice | | Folie 6Access 2007 – VBA | 06.03.08 | Seite 6
Regionales Rechenzentrum für Niedersachsen
Einstellungen für .InitialView
msoFileDialogViewSmallIcon zeigt den Dateinamen und ein kleines Icon an.
msoFileDialogViewList zeigt die Dateien als Liste an. msoFileDialogDetails zeigt die Dateinamen, Größe etc. an. msoFileDialogThumbnail zeigt die Dateien als Vorschaubilder an. Weitere Möglichkeiten werden in einer Liste zur Auswahl angezeigt.
OpenOffice | | Folie 7Access 2007 – VBA | 06.03.08 | Seite 7
Regionales Rechenzentrum für Niedersachsen
.InitialFileName
... legt das Standardverzeichnis für das Dialogfenster fest. ... nutzt als Standardeinstellung einen Dateinamen. In dem Dateinamen
können folgende Platzhalter genutzt werden: "C:\chart?.txt". Das Fragezeichen ersetzt ein beliebiges Zeichen. "C:\cha*.txt". Das Sternchen ersetzt ein beliebige Anzahl von Zeichen.
OpenOffice | | Folie 8Access 2007 – VBA | 06.03.08 | Seite 8
Regionales Rechenzentrum für Niedersachsen
Dateien filtern
Dim fd As Office.FileDialogSet fd = Application.FileDialog(msoFileDialogFilePicker)With fd .Filters.Clear .Filters.Add "PDF-Dokumente", "*.pdf; *.PDF", 1 .Filters.Add "JPEG-Bild", "*.jpg, *.jpeg", 2 .Filters.Add "Alle Dateien", "*.*", 3 .FilterIndex = 1End With
Das Kombinationsfeld Dateityp am unteren Rand des
Dialogfenster wird geleert.
Welche Dateitypen werden in dem Kombinationsfeld
angezeigt? Der Liste Dateityp werden die verschiedenen
Elemente hinzugefügt.Standardauswahl im Kombinationsfeld.
OpenOffice | | Folie 9Access 2007 – VBA | 06.03.08 | Seite 9
Regionales Rechenzentrum für Niedersachsen
Dialogbox anzeigen
Dim fd As Office.FileDialogSet fd = Application.FileDialog(msoFileDialogFilePicker)With fd If .Show = True Then For Each element In .SelectedItems chooseDatei = element Exit Function Next End IfEnd With
Mit Hilfe der Methode Show wird das Dialogfenster angezeigt.
Wenn der OK-Button gedrückt ist, wird true zurückgeliefert..
Die Auflistung enthält alle, in dem
Dialogfenster markierten Dateien.
OpenOffice | | Folie 10Access 2007 – VBA | 06.03.08 | Seite 10
Regionales Rechenzentrum für Niedersachsen
PDF-Dateien anzeigen
Private Sub cmdOpen_Click() Dim pfad As String pfad = attachText.Value Call ShellExecute(Me.hWnd, "open", _
pfad, "", "", SW_NORMAL)End Sub
ShellExceute ... ist eine API (Application programming interface)-Funktion. ... entspricht einem Doppelklick auf eine Datei.
Falls das Anwendungsprogamm Acrobat Reader oder Acrobat auf dem Zielrechner installiert ist, wird die Datei geöffnet.
OpenOffice | | Folie 11Access 2007 – VBA | 06.03.08 | Seite 11
Regionales Rechenzentrum für Niedersachsen
Windows API
A(pplication) P(rogrammers) I(nterface) ... ist eine Funktionsbibliothek, die aus vielen DLLs (Dynamic Link
Libraries) besteht. DLLs
... sind Schnittstellen zu Systemfunktionen von Windows. ... können von mehreren Anwendungen gleichzeitig genutzt werden.
Bevor Funktionen aus der Windows API genutzt werden können, muss die API-Funktion deklariert werden.
Informationen zur Windows API befindet sich im Windows SDK (http://msdn.microsoft.com/en-us/library/aa383750.aspx)
Eine Referenz der Funktionen finden Sie als Referenz auf der Webseite http://www.vbarchiv.net/api/index.php.
Ein Tool zur Anzeige der Funktionen finden Sie unter http://www.activevb.de/rubriken/apiviewer/index-apiviewer.html
OpenOffice | | Folie 12Access 2007 – VBA | 06.03.08 | Seite 12
Regionales Rechenzentrum für Niedersachsen
Deklaration der API-Funktion
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"() As Long
In Standardmodulen werden API-Funktionen immer als öffentliche Funktionen deklariert. In Klassenmodulen werden sie privat deklariert.
Dem Schlüsselwort Declare Function folgt der Funktionsname. Der Name muss korrekt geschrieben werden. Es wird Gross- und Kleinschreibung beachtet.
Dem Schlüsselwort Lib folgt der DLL-Name. Pfadangaben werden nicht benötigt.
Wenn der Funktionsname von dem DLL-Namen abweicht, muss ein Alias-Name gesetzt werden. Ein Alias-Name wird auch genutzt, wenn der Name der Funktion in VBA vorhanden ist.
OpenOffice | | Folie 13Access 2007 – VBA | 06.03.08 | Seite 13
Regionales Rechenzentrum für Niedersachsen
Argumente der ShellExecute-Funktion
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"
( ByVal hWnd As Long,_
ByVal lpOperation As String, _
ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _
ByVal nshowcmd As Long) As Long
OpenOffice | | Folie 14Access 2007 – VBA | 06.03.08 | Seite 14
Regionales Rechenzentrum für Niedersachsen
Erläuterung
ByVal hWnd As Long beschreibt das Handle des aufrufenden Fensters. Ein Handle ist ein positive Ganzzahl, die Windows für die Identifizierung eines Objekts nutzt.
ByVal lpOperation As String beschreibt welche Operation ausgeführt werden soll. Beispielsweise "print" für den Ausdruck oder "open" für das Öffnen einer Datei in dem damit verbundenen Anwendungsprogramm.
ByVal lpFile As String enthält den Verzeichnis- oder Dateinamen, welches zum Beispiel mit dem entsprechenden Anwendungsprogramm geöffnet werden soll.
ByVal lpParameters As String kann optional Aufruf-Parameter für das Anwendungsprogramm enthalten.
ByVal lpDirectory As String legt das Arbeitsverzeichnis fest. ByVal nshowcmd As Long legt mit Hilfe einer Konstanten das
Verhalten des Anwendungsfensters fest.
OpenOffice | | Folie 15Access 2007 – VBA | 06.03.08 | Seite 15
Regionales Rechenzentrum für Niedersachsen
Konstanten für das Verhalten der Anwendung
Public Const SW_HIDE = 0 Public Const SW_MAXIMIZE = 3 Public Const SW_MINIMIZE = 6 Public Const SW_NORMAL = 1Public Const SW_RESTORE = 9Public Const SW_SHOWMAXIMIZED = 3Public Const SW_SHOWMINIMIZED = 2Public Const SW_SHOWMINNOACTIVE = 7Public Const SW_SHOWNOACTIVATE = 4
OpenOffice | | Folie 16Access 2007 – VBA | 06.03.08 | Seite 16
Regionales Rechenzentrum für Niedersachsen
Rückgabewert untersuchen
Private Sub cmdOpen_Click() Dim pfad As String Dim result As Long pfad = attachText.Value result = ShellExecute(Me.hWnd, "open", _
pfad, "", "", SW_NORMAL) Select Case result Case SE_ERR_NOASSOC
MsgBox "Keine Verbindung zu einer Anwendung" Case SE_ERR_PNF MsgBox "Pfad wurde nicht gefunden"" Case SE_ERR_FNF MsgBox "Datei wurde nicht gefunden" End SelectEnd Sub
OpenOffice | | Folie 17Access 2007 – VBA | 06.03.08 | Seite 17
Regionales Rechenzentrum für Niedersachsen
Hinweise
Wenn kein Fehler auftritt, wird das Handle des geöffneten Anwendungsprogramms zurückgegeben.
Wenn ein Wert von 0 zurückgeben wird, reichen die Systemressourcen zur Ausführung der API-Funktion nicht aus.
Andere Rückgabewert beschreiben meist einen Fehler.
OpenOffice | | Folie 18Access 2007 – VBA | 06.03.08 | Seite 18
Regionales Rechenzentrum für Niedersachsen
Daten nach Excel transferien
Sub exportTransfer() Dim strSQL As String Dim qry As QueryDef Dim pfad As String Err.Clear On Error GoTo errMeldung
strSQL = "SELECT umsatz, quartal, jahr FROM tblBezirkUmsatz" strSQL = strSQL & " WHERE bezirk = " & lstBezirk.Value
Set qry = CurrentDb.CreateQueryDef("BezirkUmsatz", strSQL)
pfad = Application.CurrentProject.Path & "\umsatz.xls" DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9,_
"BezirkUmsatz", pfad, True
End Sub
OpenOffice | | Folie 19Access 2007 – VBA | 06.03.08 | Seite 19
Regionales Rechenzentrum für Niedersachsen
Abfrage erzeugen
Mit Hilfe von CreateQueryDefs wird eine Abfrage in der aktuellen Datenbank erzeugt. Als erster Parameter wird der Methode eine Bezeichnung übergeben. Unter
diesen Namen wird die Abfrage im Navigationsfenster angezeigt. Als zweiter Parameter wird eine SQL-Anweisung übergeben.
Falls die Abfrage vorhanden ist, wird die Fehlernummer 3012 gesendet. Der Fehler kann folgendermaßen behoben werden: Die Abfrage mit Hilfe der Anweisung DoCmd.DeleteObject acQuery, "BezirkUmsatz" gelöscht.
Mit Hilfe von CurrentDb.QueryDefs("BezirkUmsatz").SQL wird die Datenquelle der Abfrage an die Auswahl des Listenfeldes angepasst werden.
strSQL = "SELECT umdatz, quartal, jahr FROM tblBezirkUmsatz"strSQL = strSQL & " WHERE bezirk = " & lstBezirk.Value
Set qry = CurrentDb.CreateQueryDef("BezirkUmsatz", strSQL)
OpenOffice | | Folie 20Access 2007 – VBA | 06.03.08 | Seite 20
Regionales Rechenzentrum für Niedersachsen
Daten transferieren
DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9,_
"BezirkUmsatz", pfad,
True
Wie werden die Daten transferiert. Hier werden
die Daten exportiert.
In welches Format werden die Daten
transferiert?
Welche Daten sollen wohin transferiert
werden?
Spaltenüberschriften der Abfrage werden übernommen.
OpenOffice | | Folie 21Access 2007 – VBA | 06.03.08 | Seite 21
Regionales Rechenzentrum für Niedersachsen
Excel öffnen
Voraussetzung: Excel ist auf dem Zielrechner vorhanden. Mit Hilfe von Extras – Verweise ist der Verweis Microsoft Excel 12.0
Object Library aktiviert. Mit Hilfe von CreateObject wird ein Verweis auf eine Excel-Anwendung
erzeugt. Mit Hilfe der Eigenschaft .Visible wird die Anwendung eingeblendet. Mit Hilfe der Methode .Quit wird die Anwendung geschlossen.
Dim xlApp As Excel.Application
Set xlApp = CreateObject("Excel.Application")xlApp.Visible = True
xlApp.QuitSet xlApp = Nothing
OpenOffice | | Folie 22Access 2007 – VBA | 06.03.08 | Seite 22
Regionales Rechenzentrum für Niedersachsen
Neue Arbeitsmappe anlegen
Workbooks enthält alle Arbeitsmappen einer geöffneten Excel-Anwendung.
Mit Hilfe von .Add wird der Auflistung eine neue Arbeitsmappe hinzugefügt.
Mit Hilfe von .SaveAs wird die Arbeitsmappe unter einem Namen in einem bestimmten Verzeichnis gespeichert. Mit Hilfe von .Save werden Änderungen an der aktiven Arbeitsmappe gespeichert.
Dim xlWorkbook As Excel.Workbook
pfad = Application.CurrentProject.Path & "\umsatz.xlsx"
Set xlWorkbook = xlApp.Workbooks.AddxlWorkbook.SaveAs pfad
Set xlWorkbook = Nothing
OpenOffice | | Folie 23Access 2007 – VBA | 06.03.08 | Seite 23
Regionales Rechenzentrum für Niedersachsen
Arbeitsmappe öffnen
Mit Hilfe der Funktion Dir() wird überprüft, ob eine Datei in dem angegebenen Verzeichnis vorhanden ist. Falls die Datei vorhanden ist, wird die Bezeichnung zurückgeliefert, andernfalls ein leerer String.
xlApp.Workbooks.Open(pfad) öffnet die Excel-Datei und fügt sie der Auflistung hinzu.
Dim xlWorkbook As Excel.Workbook
pfad = Application.CurrentProject.Path & "\umsatz.xlsx"
If Dir(pfad) <> "" Then Set xlWorkbook = xlApp.Workbooks.Open(pfad)End If
OpenOffice | | Folie 24Access 2007 – VBA | 06.03.08 | Seite 24
Regionales Rechenzentrum für Niedersachsen
Arbeitsblätter
Worksheet bezeichnet ein Arbeitsblatt in einer Excel-Datei (Arbeitsmappe).
Die Auflistung .Sheets enthält alle in einer Arbeitsmappe vorhandenen Arbeitsblätter.
.Name hat als Wert die Bezeichnung des Arbeitsblattes. Standardmäßig hat ein Arbeitsblatt den Namen Tabelle und eine Nummer
von 1 bis n. Jeder Name beschreibt eindeutig ein Arbeitsblatt.
Jede Arbeitsmappe hat mindestens ein Arbeitsblatt.
Dim xlSheet As Excel.Worksheet
Set xlSheet = xlWorkbook.Sheets(1)xlSheet.Name = strSheetName
OpenOffice | | Folie 25Access 2007 – VBA | 06.03.08 | Seite 25
Regionales Rechenzentrum für Niedersachsen
Arbeitsblätter hinzufügen
Mit Hilfe von .Add wird ein neues Arbeitsblatt hinter dem aktiven Arbeitsblatt eingefügt.
Mit Hilfe dem Parameter Before kann ein Arbeitsblatt vor einem anderen Blatt eingefügt werden. Hier wird das Arbeitsblatt vor dem letzten Arbeitsblatt eingefügt.
Mit Hilfe dem Parameter After kann ein Arbeitsblatt nach einem anderen Blatt eingefügt werden. Hier wird das Arbeitsblatt nach dem Arbeitsblatt Tabelle1 eingefügt.
With xlWorkbookSet xlSheet01 = .Sheets.AddSet xlSheet02 = .Sheets.Add(Before:=.Worksheets(.Worksheets.Count))Set xlSheet03 = .Sheets.Add(After:=.Worksheets("Tabelle1")))
End With
OpenOffice | | Folie 26Access 2007 – VBA | 06.03.08 | Seite 26
Regionales Rechenzentrum für Niedersachsen
Daten einfügen
Die Daten des Recordsets werden in ein Arbeitsblatt von Excel kopiert. Cells beschreibt immer eine bestimmte Zelle. Wenn keine Angaben zur
Spalte und Zeile gemacht wird, wird Cells(1, 1); A1 als Ausgangspunkt angenommen. Die Daten werden, beginnend in der linken, oberen Ecke, eingefügt.
Range kann eine Zelle, ein Zellbereich, eine Spalte oder eine Zeile sein. In diesem Beispiel wird eine Zelle angegeben, ab der die Daten eingefügt werden sollen. Mit Hilfe von Range(Cells(Zeile, Spalte), Cells(Zeile, Spalte) wird ein Zellbereich festgelegt. Zuerst wird die linke, obere Ecke des Zellbereichs definiert und anschließend die rechte, untere Ecke.
xlSheet.Cells.CopyFromRecordset rsxlSheet.Range("A2").CopyFromRecordset rs
OpenOffice | | Folie 27Access 2007 – VBA | 06.03.08 | Seite 27
Regionales Rechenzentrum für Niedersachsen
Kopfzeilen einfügen
Cells(zeile, spalte) identifiziert eindeutig eine Zelle. .Value enthält den Wert der Zelle. In diese Zelle wird die Spaltenüberschrift aus dem Recordset
eingetragen.
For count = 0 To rs.Fields.count - 1 xlSheet.Cells(1, count + 1).Value = rs.Fields(count).Name Next count
OpenOffice | | Folie 28Access 2007 – VBA | 06.03.08 | Seite 28
Regionales Rechenzentrum für Niedersachsen
Formatierungen
Schriften: xlSheet.Range("A2").Font.Name legt die Schriftart fest. xlSheet.Range("A2").Font.Size legt die Größe fest. Fettschrift etc. kann mit Hilfe von boolschen Werten gesetzt werden.
Rahmen: xlSheet.Range("A2").Borders(Typ) legt fest, welcher Rahmen
formatiert werden soll. .Borders(xlEdgeRight) formatiert den rechten Rahmen.
.LineStyle, .Weight und .Color legt das Aussehen des Rahmens fest. .NumberFormat formatiert Zahlen in einer bestimmten Art und Weise.
.NumberFormat = "yyyy" interpretiert die Zahlen als vierstellige Jahreszahl.
.NumberFormat = "@" interpretiert die Zahlen als Text. .NumberFormat = "#.##0,00 €" interpretiert die Zahlen als Währung. In
diesem Fall wird das Euro-Zeichen genutzt. Die Zahl besteht aus mindestens einer Ziffer vor dem Komma und zwei Nachkommastellen. Ein Tausender-Zeichen wird angegeben.
OpenOffice | | Folie 29Access 2007 – VBA | 06.03.08 | Seite 29
Regionales Rechenzentrum für Niedersachsen
Word öffnen
Voraussetzung: Word ist auf dem Zielrechner vorhanden. Mit Hilfe von Extras – Verweise ist der Verweis Microsoft Word 12.0
Object Library aktiviert. Mit Hilfe von CreateObject wird ein Verweis auf die Word-Anwendung
erzeugt. Die Anwendung wird versteckt geöffnet. Mit Hilfe der Eigenschaft .Visible wird die Anwendung eingeblendet. Mit Hilfe der Methode .Quit wird die Anwendung geschlossen.
Dim wdApp As Word.Application
Set wdApp = CreateObject("Word.Application")wdApp.Visible = True
wdApp.QuitSet wdApp = Nothing
OpenOffice | | Folie 30Access 2007 – VBA | 06.03.08 | Seite 30
Regionales Rechenzentrum für Niedersachsen
Neue Dokument anlegen
Documents enthält alle geöffneten Dokumente und Vorlagen in Word. Mit Hilfe von Documents.Add wird ein neues Dokument der Auflistung
hinzugefügt. Standardmäßig wird die Vorlage (Template) Normal genutzt. Mit Hilfe des Parameters Visible wird das neue Dokument in angezeigt. Falls eine Vorlage gespeichert werden soll, wird der Parameter NewTemplate
auf True gesetzt. .Close schließt das Dokument.
Dim wdDoc As Word.Document
Set wdDoc = wdApp.Documents.Add(Template:=pathTemplate, _ Visible:=True)wdApp.Visible = True
wdDoc.CloseSet wdDoc = Nothing
OpenOffice | | Folie 31Access 2007 – VBA | 06.03.08 | Seite 31
Regionales Rechenzentrum für Niedersachsen
Neue Dokument anlegen
.SaveAs speichert ein Word-Dokument unter einem neuen Namen. Es können Angaben zum Format des Textes gemacht werden. Zum Beispiel FileFormat:=wdFormatRTF speichert den Text im RTF-Format.
Das Dokument kann mit einem Passwort zum Lesen oder Ändern des Dokuments versehen werden.
.Save speichert die Änderungen eines Dokuments.
Dim wdDoc As Word.Document
Set wdDoc = wdApp.Documents.Add(Template:=pathTemplate, _ Visible:=True)
wdDoc.SaveAs FileName:=pathBrief
wdDoc.CloseSet wdDoc = Nothing
OpenOffice | | Folie 32Access 2007 – VBA | 06.03.08 | Seite 32
Regionales Rechenzentrum für Niedersachsen
Mit Textmarken arbeiten
Die Auflistung Bookmarks enthält alle Textmarken, die in einem Word-Dokument existieren.
Die Methode .Exists liefert True, wenn die angegebene Textmarke existiert.
Dim wdRange As Word.Range
If wdDoc.Bookmarks.Exists("markAdress") ThenSet wdRange = wdDoc.Bookmarks("markAdress").Range
wdRange.Text = "RRZN" & vbCrLf & "Schloßwender Str. 5"End If
OpenOffice | | Folie 33Access 2007 – VBA | 06.03.08 | Seite 33
Regionales Rechenzentrum für Niedersachsen
Selection oder Range
.Selection ... ist immer nur einmal in einem Word-Dokument vorhanden. ... repräsentiert die aktuelle Markierung von Text. Falls kein Text oder Objekt ausgewählt ist, bezieht sich .Selection auf die
Einfügemarke. .Range
... stellt immer den Bereich dar, der bearbeitet werden soll. ... kann beliebig oft in einem Word-Dokument vorkommen. Die Größe wird durch eine Start- und Endposition festgelegt. ... kann nur durch die Einfügemarke definiert werden.
Mit Hilfe der Eigenschaft .Text ... kann vorhandener Text innerhalb des gewählten Bereichs ersetzt werden. ... Text an einer bestimmten Position eingefügt werden.
Recommended