Userform aus Datenbank befüllen

16/03/2008 - 15:15 von Tom Bossard | Report spam
Hallo,
Ich muss eine Wordvorlage mit einer angebundenene Access-Datenbank abfüllen.
Bisher habe ich den entsprechenden Datensatz einfach mittles des Loginnames
ermittelt und die Testmarken abgefüllt.
Neu müssen alle Eintràge als Vorschlag vorhanden sein.
Vor dem Befüllen ins Dokumment sollen aber Eintràge noch geàndert werden.
Ich stelle mir nun folgenden Ablauf vor:
1. Vorlage wird aufgerufen
2. Abfüllen des Userform aus der Datenbank.
3. Vorlage öffnet sich mit dem Userform.
4. Benutzer wàhlt Eintràge
5. Benutzer Bestàtigt
6. Userform übergibt Eintràge an Dokument.
7. Es werden die Entsprechenden Selects abgesetzt, die mir die Textmarken
befüllen.
8. Es sollen auch Logos in der Kopfzeile an oder abgeschaltet werden können.

Das Umfeld:
* Benutzer.mdb (Erfassen der persönlichen Daten)
* Firma.mdb. (Erfassen der Firmendaten für Kopf und Fusszeile, beinhaltet
auch Name und Pfad der Logodatei)
* Logodateien im (.jpg)
* Userform mit Feldern:
** Firma (Listenfeld: Quelle Firma.mdb)
** Kopfzeile ein aus (Checkbox)
** Fusszeile ein aus (Checkbox)
** Einschreiben (Listenfeld)
** Name1 Unterschrift links(Listenfeld: Quelle Benutzer.mdb)
** Name2 Unterschrift rechts(Listenfeld: Quelle Benutzer.mdb)
** Name2 Unterschrift rechts sichtbar (Checkbox)

*************
Code aus der alten Lösung, welche das Dokument direk abfüllt
*************
Private Sub Document_New()

'Pfad der Datenbank unten eintragen
Const strDataSrc = "C:\temp\db\Benutzer.MDB"
Const strDataSrc2 = "C:\temp\db\Benutzer.MDB"
'MsgBox strDataSrc

'Konstanten
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3

Set WshNet = CreateObject("WScript.Network")
'Set WshShell = WScript.CreateObject("WScript.Shell")

' Datenbank öffnen
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
On Error GoTo ErrorHandler
objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source = "
& strDataSrc

' über SQL alle Informationen aus Tabelle "tblPerson" auswàhlen
objRecordSet.CursorLocation = adUseClient
objRecordSet.Open "SELECT * FROM tblPerson", objConnection, adOpenStatic,
adLockOptimistic

' Datensatz anhand der Usernname bzw. Loginname suchen
strSearchCriteria = "Loginname = '" & WshNet.UserName & "'"
objRecordSet.Find strSearchCriteria


If (Err.Number <> 0) Then
MsgBox "Ihre Kennung ist noch nicht erfasst"
Else
'Dim lngAddressCount As Long
Dim strLoginname As String
Dim strNachname As String
Dim strVorname As String
Dim strPfadUnterschr As String
Dim strNameUnterschr As String
Dim strUnterschrift As String

On Error GoTo ErrorHandler

On Error Resume Next

'Variablen den Inhalt der Datenbankfelder zuweisen
strLoginname = objRecordSet("Loginname")
strNachname = objRecordSet("Name")
strVorname = objRecordSet("Vorname")
strPfadUnterschrift = objRecordSet("PfadUnterschr")
strNameUnterschrift = objRecordSet("NameUnterschr")
strUnterschrift = strPfadUnterschrift + strNameUnterschrift
End If

'alles wieder schliessen
objRecordSet.Close
objConnection.Close

On Error Resume Next

'Textmarken in Kopf- und Fusszeile abfüllen (Funktion unten aufgeführt)
SetFooterHeaderBookmark "F_Firma", strFirma
SetFooterHeaderBookmark "F_Strasse", strStrasse
SetFooterHeaderBookmark "F_PLZ", strPLZ
SetFooterHeaderBookmark "F_Ort", strOrt
SetFooterHeaderBookmark "F_TelStao", strTelStao
SetFooterHeaderBookmark "F_FaxStao", strFaxStao
SetFooterHeaderBookmark "F_Internet", strInternet

'1 Seite andere Kopf - Fusszeile
'SetFooterHeaderBookmark "Telefax2", strTelefax
'SetFooterHeaderBookmark "Telefonnummer2", strTelefonnummer
'SetFooterHeaderBookmark "EMail2", strEMail
'SetFooterHeaderBookmark "Amt2", strAmt


'Abfüllen der Textmarken in den Brief "Körper"

Selection.GoTo What:=wdGoToBookmark, Name:="S_Vorname"
Selection.TypeText Text:=strVorname

Selection.GoTo What:=wdGoToBookmark, Name:="S_Nachname"
Selection.TypeText Text:=strNachname


'Bildschir und Cursor ausricheten
Selection.HomeKey Unit:=wdStory 'Cursor
an Pos1 setzen (immer)
Selection.GoTo What:=wdGoToBookmark, Name:="Text1" 'an
Textmarke springen (damit das Positionieren auch in einem Textramen
funktioniert
'Selection.MoveDown Unit:=wdLine, Count:=1 'eine
Zeile nach unten (nur falls gebraucht)
'Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend 'Nur
falls es ein "Hier klicken... Feld ist
ActiveWindow.ActivePane.LargeScroll Down:=-1
'Briefkopf zuoberst am Bildschirm


If ActiveDocument.Bookmarks.Exists("Unterschrift") = True Then
Selection.GoTo What:=wdGoToBookmark, Name:="Unterschrift"
Selection.InlineShapes.AddPicture FileName:=strUnterschrift,
LinkToFile:=False, SaveWithDocument:=True
End If


'Dokument schützen
'ActiveDocument.Protect Password:="", NoReset:=True,
Type:=wdAllowOnlyFormFields


ExitHandler:

' Application.StatusBar = "Bitte füllen Sie die Felder aus"

Exit Sub

ErrorHandler:
MsgBox " Es ist folgender Laufzeitfehler aufgetreten:" & vbCrLf & _
Err.Number & " " & Err.Description
Resume ExitHandler

End Sub

'Funktion für Textmarken in Fuss- und Kopfzeile
Private Sub SetFooterHeaderBookmark(ByVal Bookmark As String, ByVal Value As
String)

With ActiveDocument
If .Bookmarks.Exists(Bookmark) Then
.Bookmarks(Bookmark).Range = Value
Else
'MsgBox "Die Textmarke " & Bookmark & " existiert nicht."
On Error Resume Next
End If
End With

End Sub

**********


Jetzt meine Fragen:
1. Wie befülle ich im Userform die Daten aus der Accessdatenbank ?
2. Wie Bringe ich diese Informatonen am einfachsten ins Dokument rüber,
damit die Selektionen einmal verarbeitet werden. danach bleiben diese Infos
für dieses Dokument statisch.
3. Wie àndere Ich Bilddaten in der Kopfzeile.
4. Kann ich Kopf und Fusszeile einzeln an und abschalten.

Für eine Hilfestellung wàhre ich sehr Dankbar
 

Lesen sie die antworten

#1 Thomas Gahler
17/03/2008 - 09:39 | Warnen spam
Hallo Tom


1. Wie befülle ich im Userform die Daten aus der Accessdatenbank ?


Du hast ja deine Variablen
strNachname = objRecordSet("Name")
du musst jetzt eine Textbox auf die UserFirm setzen, dieser einen Namen
geben und dann kannst du den Wert zuweisen. Zb.
userform1.strNachname.text = objRecordSet("Name")



2. Wie Bringe ich diese Informatonen am einfachsten ins Dokument rüber,
damit die Selektionen einmal verarbeitet werden. danach bleiben diese
Infos
für dieses Dokument statisch.


Eine kleine Funktion schreiben, die den Wert an die Textmarke setzt.



3. Wie àndere Ich Bilddaten in der Kopfzeile.


Da gibt es verschiedene Lösungsansàtze
- Bild entfernen / wieder einfügen
- Position nach ausserhalb des Dokuments schieben (Wenn es ein Shape-Objekt
ist)
- Grösse auf einen Punkt minimieren
usw.


4. Kann ich Kopf und Fusszeile einzeln an und abschalten.


jein, kommt darauf an, was du genau meinst

Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP2), Office XP (SP3)

Ähnliche fragen