W14AccessMDB.Dotm Winword - AddIn Daniel Deckensattl Adresserfassung mit Access-DB mit Word 2010 [email protected] 1 Add-In für die Adresserfassung mit Access-DB 1.1 Einleitung Mit diesem AddIn erstellen wir eine neue leere Access-Datenbank für die Erfassung von Adressdaten, welche dann für einen Serienbrief verwendet werden können. Anstatt Excel kann auch dieses AddIn mit einer Access-Datenbank zum Einsatz kommen. Access wird hierbei nicht benötigt. Aufgerufen wird dieses AddIn entweder über das Wordmenü [Sendungen][Adressdialog] oder über das Kontextmenü im Text. Der Dialog selbst ist sehr intuitiv gehalten, sodass es im Prinzip nicht viel zu erklären gibt. Drücken Sie die Schaltfläche [Neuer Datensatz] zusammen mit der Umschalttaste, dann werden alle Eingabefelder für eine Neuerfassung gelöscht. Wird eine neue DB erstellt, wird eine alte Datenbank auf dem Datenträger gelöscht und eine neue in dem Ordner erstellt, den wir ausgewählt haben. Bei der ersten Benutzung wird der Ordner-Auswahldialog angezeit, wo wir das Verzeichnis der Datenbankablage angegeben können. D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx 29. Dezember 2014 – [ Seite 1 / 9 ] Zusatztool für Word 2010 1.2 W14AccessMDB.Dotm (AddIn) D.D. [2/9] - 29.12.14 Technische Beschreibung Die Installation des AddIns ist ganz einfach, man kopiert die Vorlage W14AccessMDB.Dotm ins STARTUP-Verzeichnis (C:\Users\BENUTZER\AppData\Roaming\Microsoft\Word\STARTUP) der OfficeInstallation des Anwenders und schon lässt sich dieses AddIn beim nächsten Neustart von Word benutzen. Menüeinträge anpassen Um diese Menüeinträge anzupassen, sprich das Kontextmenü und der Menübandaufruf zu verändern (zum Beispiel ein anderes Icon) benötigen wir das Gratis-Tool OfficeCustomUIEditorSetup.msi welches die XML-Datei in die W14AccessMDB.dotm-Datei integriert! Makrobeschreibung Das VBA-Projekt besteht aus drei Modulen, wovon das erste VBA-Makromodul [mdlAccessDB] nur die Aufruf-Prozedur enthält (plus die Kontextmenü-Prozedur), die den Hauptdialog (frmAccessDB) zur Anzeige bringt. Alle nötigen Funktionen und Prozeduren befinden sich in den zwei Modulen (frmAccessDB und clsAdresse). In der frmAccessDB wird zu Beginn die Initialisierungs-Prozedur aufgerufen, in welcher der DB-Pfad aus der Registry (VB and VBA Settings) gelesen wird. Fehlt dieser, was beim ersten Mal der Fall ist, erscheint ein Verzeichnis-Auswahldialog über welchen wir das DB-Verzeichnis angeben in welcher dann die Datenbank gespeichert wird. Am Schluss dieser Initialisierungsroutine wird dann geprüft, ob bei diesem Pfad auch eine Datenbank Namens Adressen.mdb vorhanden ist wenn ja werden die Daten eingelesen und wenn nicht eine neue erstellt. Das Erstellen der DB geschieht in der Sub-Prozedur DatenbankErstellen(), wo sogleich eine Tabelle angelegt wird in welcher ein Musterdatensatz eingefügt wird (dieser kann selbstverständlich gelöscht werden). Der weitere Ablauf ist mit Kommentaren soweit gut beschrieben,falls Sie die Datenbank um Felder erweitern möchten (muss auch in der Datenklasse ergänzt werden). D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx 29. Dezember 2014 – [ Seite 2 / 9 ] Zusatztool für Word 2010 2 D.D. [3/9] - 29.12.14 Inhaltsverzeichnis 1 1.1 1.2 2 2.1 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.1 W14AccessMDB.Dotm (AddIn) Add-In für die Adresserfassung mit Access-DB Einleitung Technische Beschreibung Inhaltsverzeichnis Updateinformationen VBA-Makrocode [VBA-Modul]: mdlAccessDB [VBA-Formmodul]: frmAccessDB [VBA-Klassenmodul]: ThisDocument [VBA-Klassenmodul]: clsAdresse 1 1 2 3 3 4 4 4 8 8 Updateinformationen Beschreibung der Anpassungen Updatedatum Projektdatei hochgeladen 29.12.2014 Inhaltsverzeichnis erstellt 29.12.2014 Grunddokumentation erstellt 29.12.2014 Programmcode eingefügt 29.12.2014 D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx 29. Dezember 2014 – [ Seite 3 / 9 ] Zusatztool für Word 2010 2.2 W14AccessMDB.Dotm (AddIn) D.D. [4/9] - 29.12.14 VBA-Makrocode 2.2.1 [VBA-Modul]: mdlAccessDB '/-------------------------------------------------------------------------------------------------'/ Autor: D. Deckensattl Erstelldatum: 29.12.14 ¦ '/ System: Windows 7 MS-Winword 2010 Update: 29.12.14 ¦ '/ ¦ '/ Zweck des AddIn: Dieses Word-VBA-AddIn erstellt eine Accessdatenbank und bietet eine Ein¦ '/ gabemaske an, über welche die Adressen verwaltet werden können. ¦ '/ ¦ '/ Dieses Projekt benötigt das Formmodul [frmAccessDB] und das Klassenmodul ¦ '/ [clsAdresse] und einen Verweis auf Microsoft ActiveX Data Objects 6.1 Lib- ¦ '/ rary. Aufgerufen wird das AddIn über das Wordmenu [Sendungen][Adressdialog].¦ '/-------------------------------------------------------------------------------------------------'/-- Tastenstatus ermitteln Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer '/-- Ordner-Anzeigedialog Private Type BROWSEINFO hwndOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpFn As Long lParam As String iImage As Long End Type Private Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" (ByRef lpbi As BROWSEINFO) As Long Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _ ByVal pszPath As String) As Long Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long) Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long Private Const MAX_PATH = 259 Private Private Private Private Const Const Const Const WM_USER As Long = &H400 BIF_RETURNONLYFSDIRS As Long = 1 BFFM_INITIALIZED As Long = 1 BFFM_SETSELECTION As Long = (WM_USER + 102) Public Sub AccessAdressen(control As IRibbonControl) AccessAdressenDialog End Sub ' Wird vom Wordmenü aufgerufen Public Sub AccessAdressenDialog() frmAccessDB.Show 0 End Sub '------------------------------------- Ordnerauswahl ---------------------------------------------Public Function GetFolderInternal(ByVal Caption As String, ByVal Default As String) As String Dim BI As BROWSEINFO Dim ListIdx As Long Dim Path As String With BI .lpszTitle = Caption .ulFlags = BIF_RETURNONLYFSDIRS .lpFn = MakeFktnPtr(AddressOf BrowseCallbackProc) .lParam = Default End With Path = String$(MAX_PATH + 1, vbNullChar) ListIdx = SHBrowseForFolder(BI) If SHGetPathFromIDList(ListIdx, Path) Then GetFolderInternal = Left$(Path, Instr(Path, vbNullChar) - 1) End If CoTaskMemFree ListIdx End Function Public Function BrowseCallbackProc(ByVal hwnd As Long, ByVal Msg As Long, _ ByVal lParam As Long, ByVal lpData As Long) As Long On Error Resume Next If Msg = BFFM_INITIALIZED Then SendMessage hwnd, BFFM_SETSELECTION, 1&, lpData End If End Function Private Function MakeFktnPtr(ByVal FktnPtr As Long) As Long MakeFktnPtr = FktnPtr End Function 2.2.2 [VBA-Formmodul]: frm AccessDB '/-------------------------------------------------------------------------------------------------'/ Autor: D. Deckensattl Erstelldatum: 29.12.14 ¦ '/ System: Windows 7 MS-Winword 2010 Update: 29.12.14 ¦ '/ ¦ '/ Zweck des AddIn: Dieses Word-VBA-AddIn erstellt eine Accessdatenbank und bietet eine Ein¦ '/ gabemaske an, über welche die Adressen verwaltet werden können. ¦ '/ ¦ D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx 29. Dezember 2014 – [ Seite 4 / 9 ] Zusatztool für Word 2010 W14AccessMDB.Dotm (AddIn) D.D. [5/9] - 29.12.14 '/ Dieses Projekt benötigt das Makromodul [mdlAccessDB] und das Klassenmodul ¦ '/ [clsAdresse] und einen Verweis auf Microsoft ActiveX Data Objects 6.1 Lib- ¦ '/ rary. Aufgerufen wird das AddIn über das Wordmenu [Sendungen][Adressdialog].¦ '/ ¦ '/ AdressId Nebenstehende Felder kommen zum Einsatz. Existiert die Datenbank nicht ¦ '/ Anrede wird eine neue DB angelegt mit dem Namen [Adressen.mdb] und In dem Ver¦ '/ Titel zeichnis abgelegt, welches mit dem Ordnerdialog angegeben wurde. Wird ¦ '/ Vorname kein Verzeichnis ausgewählt wird der aktuelle Vorlagenpfad verwender. ¦ '/ Nachname ¦ '/ Strasse Per SQL-Befehl werden alle Datensätze sortiert ausgelesen und dann In ¦ '/ PLZ Klassen verpackt und In ein Array verschoben [arrAdressen()]. ¦ '/ Ort ¦ '/ Email Der einmal ausgewählte Pfad wird In der Registry im VB And VBA Settings¦ '/ Telefon Abschnitt niedergeschrieben [VBAccessMDB\AppCFG\DBPath] und bei jedem Start ¦ '/ Zusatz neu eingelesen. ¦ '/ ¦ '/-------------------------------------------------------------------------------------------------Const Const Const Const Const dbVersion10 dbVersion11 dbVersion20 dbVersion30 dbVersion40 = = = = = 1 8 16 32 64 Private arrAdressen As Variant Private strDBName As String Private Sub UserForm_Initialize() ' Dialogform wird initialisiert strNewFolder = GetSetting("VBAccessMDB", "AppCFG", "DBPath") ' Pfad aus Registry lesen If strNewFolder = "" Then ' Wenn nicht vorhanden dann strExportOrdner = GetFolderInternal("Ordner auswählen", "C:\") ' Ornerauswahl-Dialog anzeigen If strExportOrdner = "" Then ' Bei Abbruch Vorlagenpfad verwenden strDBName = ActiveDocument.AttachedTemplate.Path & Application.PathSeparator & "Adressen.mdb" SaveSetting "VBAccessMDB", "AppCFG", "DBPath", ActiveDocument.Path ' Pfad In Registry sichern Else SaveSetting "VBAccessMDB", "AppCFG", "DBPath", strExportOrdner ' Hier wurde ein Ordner ausgestrDBName = strExportOrdner & Application.PathSeparator & "Adressen.mdb" ' wählt (sichern) End If Else strDBName = strNewFolder & Application.PathSeparator & "Adressen.mdb" ' Pfad aus Registry übernehmen End If If Dir(strDBName) <> "" Then Daten Else DatenbankErstellen End If End Sub ' Prüfen ob DB In Ordner liegt, wenn ja ' Daten einlesen und anzeigen Private Sub cmdDatensatzLoeschen_Click() Dim objDBank As Object Dim RSTABLE As Object On Error GoTo Abbruch ' Das Löschen eines Datensatzes mit ' dem SQL-Befehl DELETE ' ansonsten Neuerstellung Set objDBank = CreateObject("DAO.DBEngine.36").OpenDatabase(strDBName) SSQLSELECT = "DELETE * From tbAdressen WHERE tbAdressen.AdressId = " & TextBox1.Text objDBank.Execute (SSQLSELECT) TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" TextBox7.Text = "" TextBox8.Text = "" TextBox9.Text = "" TextBox10.Text = "" TextBox11.Text = "" Daten Abbruch: If Not objDBank Is Nothing Then objDBank.Close Set RSTABLE = Nothing Set objDBank = Nothing ' SQL-Befehl ausführen ' Anzeigen im Dialog löschen ' Daten neu einlesen und anzeigen ' Am Ende DB wieder schliessen ' Setze die Objektvariablen auf Nothing ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung If Err.Number <> 0 Then MsgBox "Error: " & Err.Number & " " & Err.Description End Sub Private Sub cmdDatenSpeichern_Click() Dim objDBank As Object Dim RSTABLE As Object On Error GoTo Abbruch ' Ein Datensatz Updaten Set objDBank = CreateObject("DAO.DBEngine.36").OpenDatabase(strDBName) SSQLSELECT = "Select Anrede,Titel,Vorname,Nachname,Strasse,PLZ,Ort,Email,Telefon,Zusatz From " SSQLSELECT = SSQLSELECT & "tbAdressen WHERE tbAdressen.AdressId = " & TextBox1.Text Set RSTABLE = objDBank.OpenRecordset(SSQLSELECT) RSTABLE.Edit RSTABLE("Anrede") = TextBox2.Text RSTABLE("Titel") = TextBox3.Text RSTABLE("Vorname") = TextBox4.Text RSTABLE("Nachname") = TextBox5.Text RSTABLE("Strasse") = TextBox6.Text RSTABLE("PLZ") = Val(TextBox7.Text) RSTABLE("Ort") = TextBox8.Text RSTABLE("Email") = TextBox9.Text D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx ' Zuerst Datensatz holen ' Werte abfüllen 29. Dezember 2014 – [ Seite 5 / 9 ] Zusatztool für Word 2010 W14AccessMDB.Dotm (AddIn) D.D. [6/9] - 29.12.14 RSTABLE("Telefon") = TextBox10.Text RSTABLE("Zusatz") = TextBox11.Text RSTABLE.Update ' und wieder In DB schreiben Set cAdr = arrAdressen(ListBox1.ListIndex) cAdr.AdressId = TextBox1.Text cAdr.Anrede = TextBox2.Text cAdr.Titel = TextBox3.Text cAdr.Vorname = TextBox4.Text cAdr.Nachname = TextBox5.Text cAdr.Strasse = TextBox6.Text cAdr.PLZ = TextBox7.Text cAdr.Ort = TextBox8.Text cAdr.Email = TextBox9.Text cAdr.Telefon = TextBox10.Text cAdr.Zusatz = TextBox11.Text ' Veränderte Daten auch in ' Array anpassen Set arrAdressen(ListBox1.ListIndex) = cAdr ' Klasse wieder zurück In Array Abbruch: If Not objDBank Is Nothing Then objDBank.Close Set RSTABLE = Nothing Set objDBank = Nothing ' Setze die Objektvariablen auf Nothing ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung If Err.Number <> 0 Then MsgBox "Error: " & Err.Number & " " & Err.Description End Sub Private Sub cmdNeuerDatensatz_Click() Dim objDBank As Object Dim RSTABLE As Object On Error GoTo Abbruch If TastenStatus(vbKeyShift) = True Then TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" TextBox7.Text = "" TextBox8.Text = "" TextBox9.Text = "" TextBox10.Text = "" TextBox11.Text = "" Exit Sub End If ' Neuer Datensatz anlegen ' Bei gehaltener Shifttaste ' werden Eingabefelder für ' Neueingabe gelöscht Set objDBank = CreateObject("DAO.DBEngine.36").OpenDatabase(strDBName) SSQLSELECT = "Select Max(AdressId) From tbAdressen" ' Letzte Adress-ID-Nummer ermitteln Set RSTABLE = objDBank.OpenRecordset(SSQLSELECT) intU = RSTABLE(0) + 1 If IsNull(intU) Then intU = 1 SSQLSELECT = "INSERT INTO [tbAdressen] (AdressId, Anrede, Titel, Vorname, Nachname, Strasse, PLZ, Ort, Email, Telefon, Zusatz) VALUES ( " & _ intU & ",'" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "','" & TextBox5.Text & "','" & TextBox6.Text & "','" & _ TextBox7.Text & "','" & TextBox8.Text & "','" & TextBox9.Text & "','" & TextBox10.Text & "','" & TextBox11.Text & "')" objDBank.Execute SSQLSELECT ' Neuer Datensatz hinzufügen Daten ' Daten neue einlesen und anzeigen For intZ = 0 To ListBox1.ListCount - 1 ' Neuer Datensatz In Liste selektieren If ListBox1.List(intZ) = TextBox5.Text & " " & TextBox4.Text Then ListBox1.ListIndex = intZ: Exit For Next Abbruch: If Not objDBank Is Nothing Then objDBank.Close Set RSTABLE = Nothing Set objDBank = Nothing ' Setze die Objektvariablen auf Nothing ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung If Err.Number <> 0 Then MsgBox "Error: " & Err.Number & " " & Err.Description End Sub Sub CreateNewMDB(FileName, Format) ' Erstellt eine leere Access-Datenbank Dim Engine Set Engine = CreateObject("DAO.DBEngine.36") Engine.CreateDatabase FileName, ";LANGID=0x0409;CP=1252;COUNTRY=0", Format 'If Not Engine Is Nothing Then Engine.Close Set Engine = Nothing ' Setze die Objektvariablen auf Nothing End Sub Sub DatenbankErstellen() Dim objDBank As Object Dim RSTABLE As Object On Error GoTo Abbruch ' Datenbank neu erstellen If Dir(strDBName) <> "" Then Kill strDBName ' Alte DB löschen wenn vorhanden CreateNewMDB strDBName, dbVersion40 ' Acccess 2000-DB wird erstellt Set objDBank = CreateObject("DAO.DBEngine.36").OpenDatabase(strDBName) ' Felder nun erstellen objDBank.Execute ("CREATE TABLE tbAdressen(" & _ "AdressId AUTOINCREMENT ," & _ "Anrede VARCHAR(255) ," & _ "Titel VARCHAR(255) ," & _ D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx 29. Dezember 2014 – [ Seite 6 / 9 ] W14AccessMDB.Dotm (AddIn) Zusatztool für Word 2010 D.D. [7/9] - 29.12.14 "Vorname VARCHAR(255) ," & _ "Nachname VARCHAR(255) NOT NULL ," & _ "Strasse VARCHAR(255) ," & _ "PLZ Long ," & _ "Ort VARCHAR(255) ," & _ "Email VARCHAR(255) ," & _ "Telefon VARCHAR(255) ," & _ "Zusatz MEMO )") SSQLSELECT SSQLSELECT SSQLSELECT SSQLSELECT = = = = "INSERT INTO SSQLSELECT & SSQLSELECT & SSQLSELECT & [tbAdressen] (AdressId, Anrede, Titel, Vorname, Nachname, Strasse, PLZ, Ort, " "Email, Telefon, Zusatz) VALUES (" & "1" & ",'" & "Herr" & "','" & "" & "','" "Hans" & "','" & "Mustermann" & "','" & "Am Weg 8" & "','" & "8400" & "','" "Winterthur" & "','" & "[email protected]" & "','" & "052 222 22 22" & "','" & "Memofeld" & "')" objDBank.Execute SSQLSELECT ' Ein Musterdatensatz einspielen Abbruch: If Not objDBank Is Nothing Then objDBank.Close Set RSTABLE = Nothing Set objDBank = Nothing ' Setze die Objektvariablen auf Nothing ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung If Err.Number <> 0 Then MsgBox "Error: " & Err.Number & " " & Err.Description Daten ' Datensatz einlesen If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 End Sub ' und In Listbox selektieren Private Sub cmdNeueDB_Click() DatenbankErstellen End Sub Private Sub ListBox1_Click() Dim cAdr As clsAdresse Set cAdr = arrAdressen(ListBox1.ListIndex) ' Ein Klick auf die Adressnamen-Listbox ' liefert die dazugehörigen Felder TextBox1.Text = cAdr.AdressId TextBox2.Text = cAdr.Anrede TextBox3.Text = cAdr.Titel TextBox4.Text = cAdr.Vorname TextBox5.Text = cAdr.Nachname TextBox6.Text = cAdr.Strasse TextBox7.Text = cAdr.PLZ TextBox8.Text = cAdr.Ort TextBox9.Text = cAdr.Email TextBox10.Text = cAdr.Telefon TextBox11.Text = cAdr.Zusatz End Sub Sub Daten() Dim objDBank As Object Dim RSTABLE As Object Dim cAdr As clsAdresse ' Daten sortiert holen und anzeigen On Error GoTo Abbruch If TastenStatus(vbKeyShift) = True Then Exit Sub ' Bei Shifttastendruck Sub verlassen Set objDBank = CreateObject("DAO.DBEngine.36").OpenDatabase(strDBName) SSQLSELECT = "Select Count(AdressId) From tbAdressen" ' Zuerst Anzahl der Datensätze ermitteln Set RSTABLE = objDBank.OpenRecordset(SSQLSELECT) intW = RSTABLE(0) If intW = 0 Then GoTo Abbruch ReDim arrAdressen(intW - 1) ' Bei keinem Datensatz DB wieder schliessen SSQLSELECT = "Select * From tbAdressen ORDER BY Nachname" ' Sortierte Liste mit SQL anfordern Set RSTABLE = objDBank.OpenRecordset(SSQLSELECT) intR = RSTABLE.RecordCount ' dbOpenDynamic ' Funktioniert nicht? intZ = 0 Do Until RSTABLE.EOF Set cAdr = New clsAdresse cAdr.AdressId = RSTABLE("AdressId") cAdr.Anrede = RSTABLE("Anrede") cAdr.Titel = RSTABLE("Titel") cAdr.Vorname = RSTABLE("Vorname") cAdr.Nachname = RSTABLE("Nachname") cAdr.Strasse = RSTABLE("Strasse") cAdr.PLZ = RSTABLE("PLZ") cAdr.Ort = RSTABLE("Ort") cAdr.Email = RSTABLE("Email") cAdr.Telefon = RSTABLE("Telefon") cAdr.Zusatz = RSTABLE("Zusatz") Set arrAdressen(intZ) = cAdr intZ = intZ + 1 RSTABLE.MoveNext Loop ' Alle gefundenen Datensätze In Klassen ' speichern ' und In globales Array kopieren Abbruch: If Not objDBank Is Nothing Then objDBank.Close Set RSTABLE = Nothing Set objDBank = Nothing ' Setze die Objektvariablen auf Nothing ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung If Err.Number <> 0 Then MsgBox "Error: " & Err.Number & " " & Err.Description ListBox1.Clear ' Alte Daten In Listbox löschen If intW = 0 Then Exit Sub D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx 29. Dezember 2014 – [ Seite 7 / 9 ] W14AccessMDB.Dotm (AddIn) Zusatztool für Word 2010 For intZ = 0 To UBound(arrAdressen) Set cAdr = arrAdressen(intZ) ListBox1.AddItem cAdr.Nachname & " " & cAdr.Vorname Next D.D. [8/9] - 29.12.14 ' Alle Namen und Vornamen anzeigen End Sub Private Sub cmdAbbruch_Click() Unload Me End Sub ' Die Schaltfläche Abbrechen ' wurde ausgewählt Private Sub imgDBPfad_Click() strNewFolder = GetSetting("VBAccessMDB", "AppCFG", "DBPath") strNewFolder = Iif(strNewFolder = "", "C:\", strNewFolder) ' Neuer Ordner für Adressen.mdb ' bestimmen ' Vorgabepfad aus Registry lesen!!! strExportOrdner = GetFolderInternal("Ordner auswählen", strNewFolder) ' Ordner öffnen anzeigen If strExportOrdner = "" Then strDBName = ActiveDocument.AttachedTemplate.Path & Application.PathSeparator & "Adressen.mdb" SaveSetting "VBAccessMDB", "AppCFG", "DBPath", ActiveDocument.Path Else SaveSetting "VBAccessMDB", "AppCFG", "DBPath", strExportOrdner strDBName = strExportOrdner & Application.PathSeparator & "Adressen.mdb" End If Daten End Sub '/--------------------------------------------------------------------------------------------------------------'/ Funktion: TastenStatus Erstellt: 1.7.01 Update: 26.10.01 Version: 1.20 ¦ '/ Argument: APITastenKonstante Typ: Long ' vbKey.... - Konstante, wie vbKeyShift, vbKeyControl ¦ '/ Rückgabe: Boolean-Wert ' Wahr wenn Taste gedrückt ist, False wenn nicht! ¦ '/ ¦ '/ Dies ist die erste nach Aussen offene Hilfsfunktion, die In allen VBA-Projekten bequem über einen Klassenver-¦ '/ weis und Aufruf abgerufen werden kann. In diesem Beispiel kann der aktuelle Tastenabfragestatus einer als vb-¦ '/ Konstante übergebenen Taste (zb vbKeyShift) ermittelt werden. Es wird ein Wahrheitswert zurückgegeben! ¦ '/ ¦ '/ erfordert: Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer ¦ '/--------------------------------------------------------------------------------------------------------------Public Function TastenStatus(APITastenKonstante As Long) As Boolean ' ermittelt Tastenstatus TastenStatus = CBool(GetAsyncKeyState(APITastenKonstante) And &H8000) ' oder Maustastenstatus! End Function 2.2.3 [VBA-Klassenmodul]: ThisDocument 2.2.4 [VBA-Klassenmodul]: cls Adresse '/-----------------------------------------------------------------------------------------------------------'/ Autor: [email protected] Erstellt: 29.12.2014 Update: 29.12.2014 ¦ '/ ¦ '/ Zweck: Mit Hilfe dieser Verwaltungs-Klasse werden die Access-Adressdaten gemanagt ¦ '/-----------------------------------------------------------------------------------------------------------Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim lAdressId sAnrede sTitel sVorname sNachname sStrasse lPLZ sOrt sEmail sTelefon vZusatz As As As As As As As As As As As Long String String String String String Long String String String Variant Property Get AdressId() AdressId = lAdressId End Property Property Let AdressId(varNewVal As Variant) lAdressId = varNewVal End Property Property Get Anrede() Anrede = sAnrede End Property Property Let Anrede(varNewVal As Variant) sAnrede = varNewVal End Property Property Get Titel() Titel = sTitel End Property Property Let Titel(varNewVal As Variant) sTitel = varNewVal End Property Property Get Vorname() Vorname = sVorname End Property Property Let Vorname(varNewVal As Variant) sVorname = varNewVal End Property Property Get Nachname() Nachname = sNachname End Property Property Let Nachname(varNewVal As Variant) D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx 29. Dezember 2014 – [ Seite 8 / 9 ] Zusatztool für Word 2010 W14AccessMDB.Dotm (AddIn) D.D. [9/9] - 29.12.14 sNachname = varNewVal End Property Property Get Strasse() Strasse = sStrasse End Property Property Let Strasse(varNewVal As Variant) sStrasse = varNewVal End Property Property Get PLZ() PLZ = lPLZ End Property Property Let PLZ(varNewVal As Variant) lPLZ = varNewVal End Property Property Get Ort() Ort = sOrt End Property Property Let Ort(varNewVal As Variant) sOrt = varNewVal End Property Property Get Email() Email = sEmail End Property Property Let Email(varNewVal As Variant) sEmail = varNewVal End Property Property Get Telefon() Telefon = sTelefon End Property Property Let Telefon(varNewVal As Variant) sTelefon = varNewVal End Property Property Get Zusatz() Zusatz = vZusatz End Property Property Let Zusatz(varNewVal As Variant) vZusatz = varNewVal End Property D:\Daten\Office\DDDot\VBA-Vorlagen\W14AccessMDB\W14AccessMDB_Doku.docx 29. Dezember 2014 – [ Seite 9 / 9 ]