Verschieden Fragen betr. Automatisierung

Hello Profis

Leider bin ich noch ein Anfänger…und deshalb 2 Fragen an euch:

Ich habe ein vba code in meiner datenbank, die einträge in der datenbank in ein word Formular überträgt.

Der code ist folgend:

Private Sub Befehl15_Click()
Dim word As Object

On Error GoTo wordStarten
Set word = GetObject(, „word.application“)
If Not word Is Nothing Then
word.Visible = True
word.Documents.Open filename:=Application.CurrentProject.Path & „\xxx.doc“

word.ActiveDocument.FormFields(„Text1“).Result = Text2.value
word.ActiveDocument.FormFields(„Text2“).Result = Text1.value
word.ActiveDocument.FormFields(„Text3“).Result = Text3.value
End If
Exit Sub

Meine Fragen:

  1. In einem Textfeld in access hab ich einen langen text, wenn ich den auf word übertragen will kommt eine fehlermeldung. Was ich bemerkt habe ist, dass die grenze der übertragenden zeichen 255 oder 256 ist. Wie kann ich das ändern, damit ich mehr zeichen übertragen kann?

  2. Bei einem der zu übertragenden felder hab ich in der tabelle der datenbank ein primary key mit autonummerierung + die dazugehörenden daten. Wenn ich es auf word übertragen will kommen statt die Daten die ich auf word übertragen will, nur die autonummern. Wie kann ich das ändern, dass die 2. columne der tabelle angesprochen wird?

Hoffe ihr habt ein paar infos für mich…ich bedanke mich schon im voraus.

Gruss

Hello Luis,

Ich habe ein vba code in meiner datenbank, die einträge in der
datenbank in ein word Formular überträgt.

Private Sub Befehl15_Click()
Dim word As Object

On Error GoTo wordStarten

wohin geht die Errorumleitung? Hier feht sie!

  1. In einem Textfeld in access hab ich einen langen text,

ist es ein Textfeld? oder ein Memofeld?

Wie kann ich das ändern, damit ich mehr zeichen übertragen kann?

verwende ein Memofeld. Ich vermute es handelt sich um den Text des Briefes!?

  1. Wie kann ich das ändern, dass die 2. columne
    der tabelle angesprochen wird?

ME.Feldname.column(1) = 2 Spalte
da die Columnzählung bei 0 anfängt!!!

Grüße aus Essen
Wolfgang

Ich habe ganz ein ähnliches Problem.
Bisher haben mich die Anregungen in diesem Thread auch gut weiter gebracht.

Mein Problem ist nun, daß in meinem Word Dokument zwei Kontrollkästchen jeweils zwei CheckBoxen in Access entsprechen. Ich habe das über If/Then lösen wollen. Die Textfelder in Word werden entsprechend der IF/Then Bedingung befüllt. Aber wie muß ich die Kontrollkästchen „fernsteuern“? Hier mein VBA Code:

Private Sub Access2Word_Click()
Dim objWord As Word.Application
Set objWord = CreateObject(„Word.Application“)
With objWord
.Visible = True
.Documents.Open („C:\My.doc“)
If Me.Box1 = True Then
.ActiveDocument.CheckBox(„BoxA“).Enabled = True
.ActiveDocument.FormFields(„FieldA“).Result = Field1.value
End If
If Me.Box2 = True Then
.ActiveDocument.CheckBox(„BoxB“).Enabled = True
.ActiveDocument.FormFields(„FieldB“).Result = Field2.value
End If
End With
End Sub

Grüße aus Hessen
Derek

Hallo Derek,

ich hatte auch das Problem, vor allen Dingen, fehlte mir dann der „Link“ zum erstellten Worddokument. Also beschloss ich, die Worddatei direkt in Access zu speichern.

Erstelle also ein OLE-Feld mit dem Feldnamen: DOKUMENT
Füge das Feld in dein Formular ein.
Erstelle eine Taste „erstellen“ mit folgendem VBA-Code:

Private Sub erstellen_Click()
Dim NeuesDokument As Word.Document
Dim wrdTextmarken As Word.Bookmarks
Dim conTEMPLATE_NAME

conTEMPLATE_NAME = „Dateipfad zur DOT-Datei“

’ Prozedur beenden, wenn bereits ein Dokument vorhanden ist
If Not IsNull(Me!Dokument) Then
MsgBox "Sie können im aktuellen Datensatz kein neues Dokument erstellen, " & _
„weil bereits ein Dokument vorhanden ist!“, vbCritical + vbOKOnly, „Dokument erstellen“
Exit Sub
End If

With Me!Dokument
.Class = „Word.Document“ ’ Den Klassennamen angeben
.OLETypeAllowed = acOLEEmbedded ’ Den Typ des Objekts angeben
.SourceDoc = conTEMPLATE_NAME ’ Quelldatei im aktuellen Datenbankpfad
.Action = acOLECreateEmbed ’ Das verknüpfte Objekt erstellen

.Verb = acOLEVerbOpen
.Action = acOLEActivate
End With

Set NeuesDokument = Me.Dokument.Object
Set wrdTextmarken = NeuesDokument.Bookmarks

If Len(Nz(Me![Adresse])) > 0 Then If wrdTextmarken.Exists(„Adresse“) Then wrdTextmarken.Item(„Adresse“).Range.Text = Me![Adresse]
If Len(Nz(Me!Datum)) > 0 Then If wrdTextmarken.Exists(„Datum“) Then wrdTextmarken.Item(„Datum“).Range.Text = Me!Datum
If Len(Nz(Me![Ihr_Zeichen])) > 0 Then If wrdTextmarken.Exists(„IZeichen“) Then wrdTextmarken.Item(„iZeichen“).Range.Text = Me![Ihr_Zeichen]
If Len(Nz(Me![KD_NR])) > 0 Then If wrdTextmarken.Exists(„KDNR“) Then wrdTextmarken.Item(„KDNR“).Range.Text = "Kunden-Nr. : " & Me![KD_NR]
If Len(Nz(Me![Unser_Zeichen])) > 0 Then If wrdTextmarken.Exists(„UZeichen“) Then wrdTextmarken.Item(„uZeichen“).Range.Text = Me![Unser_Zeichen]
If Len(Nz(Me!Bezug)) > 0 Then If wrdTextmarken.Exists(„Bezug“) Then wrdTextmarken.Item(„Bezug“).Range.Text = Me!Bezug
If Len(Nz(Me!Betreff)) > 0 Then If wrdTextmarken.Exists(„Betreff“) Then wrdTextmarken.Item(„Betreff“).Range.Text = Me!Betreff
If Len(Nz(Me!Briefanrede)) > 0 Then If wrdTextmarken.Exists(„Briefanrede“) Then wrdTextmarken.Item(„Briefanrede“).Range.Text = Me!Briefanrede
If Len(Nz(Me!Text)) > 0 Then If wrdTextmarken.Exists(„Text“) Then wrdTextmarken.Item(„Text“).Range.Text = Me!Brief_Text
If Len(Nz(Me!Grußformel)) > 0 Then If wrdTextmarken.Exists(„Grußformel“) Then wrdTextmarken.Item(„Grußformel“).Range.Text = Me!Grußformel
If Len(Nz(Me!Absender)) > 0 Then If wrdTextmarken.Exists(„Absender“) Then wrdTextmarken.Item(„Absender“).Range.Text = Me!Absender
If Len(Nz(Me!Anlagen)) > 0 Then If wrdTextmarken.Exists(„Anlagen“) And Me!Anlagen > 0 Then wrdTextmarken.Item(„Anlagen“).Range.Text = "Anlagen : " & CStr(Me!Anlagen)

Set NeuesDokument = Nothing
End Sub

Wenn du also noch die Felder:
Adresse
Datum
Ihr_Zeichen
Unser_Zeichen
usw.
definierst in deinem Formular, werden die entsprechenden Textmarken in der Wordvorlage ausgefüllt.

Schließt man nun das Worddokument, wird es im OLE-Feld gespeichert!

Grüße aus Essen
Wolfgang

Hi Netwolf

Sorry für die verspätete Antwort. Also die Errorumleitung geht weiter, hab sie halt nicht gepostet, die funktioniert auch. Betreffend dem Text feld oder Memo feld hab ich beides ausprobiert. Leider überträgt es in beiden fällen nur 255 zeichen. Kann es am Word liegen? ich hab fast schon aufgegeben und hab gegoggelt wie blöd… finde keine erklärung, oder besser ne lösung.
das mit der column zählung muss ich mal probieren, hoffe es klappt und bedanke mich schon jetzt :smile:

Gruss

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Wolfgang

Danke sehr für deine Hilfe.

Ich hatte bisher noch nicht mit OLE gearbeitet. Von daher ein Gute Anregung. Ich sehe da bloß ein Problem. Die Backenddatenbank, die ich jetzt erweitern möchte hat schon 30MB und liegt auf einem „Standard“ Server. Wann sie auf SQL umgestellt wird weiß nur unsere EDV.

Ich befürchte die Datenbank wird zu groß, wenn die OLE Objekte abgespeichert werden. Momentan speichern wir die Word Dokumente einzeln ab. Jedes einzelne von hand befüllt. Ca 30KB. Ich war von meinem Weg dahingehen begeistert, dass ich ein Wordvorlage, welches firmenweit benutzt wird, unverändert lassen kann. Der Ausdruck ist schnell, und ich muss nichts abspeichern (somit spare ich speicherplatz).

Zu Deinem Beispiel. Da muss ich leider noch mal nachhaken. Ich kann nicht sehen wie eine Checkbox aktiviert wird. Vieleich übersehe ich das. Das war mein eigentliches Problem.

Vielen dank im Voraus.
Derek

Hi Luis,

Sorry für die verspätete Antwort.

kein problem, ist/war ja dein Problem was gelöst werden sollte.

Betreffend dem Text feld oder Memo feld hab ich beides
ausprobiert. Leider überträgt es in beiden fällen nur 255
zeichen. Kann es am Word liegen?

jein, es liegt an den Feldern, an die du die Daten übergibst. Diese Textfelder können wie bei Access nur 255 Zeichen aufnehmen.

Würdest du die Daten an eine Textmarke übergeben, hättest du keine Probleme. (Äh, solltest du keine haben, immer abhängig von den verwendeten Access- & Word- Versionen, leider hattest du nicht geschrieben, welche du verwendest)

und hab gegoggelt wie blöd… finde keine erklärung, oder
besser ne lösung.

siehe Lösung ein paar Zeilen tiefer an einen andren Fragenden, hier in deinem Tread.

Grüße aus Essen
Wolfgang

Das checkbox problem hab ich so gelöst (per checkbox eine Zeile):

word.ActiveDocument.Range.FormFields(„checkX“).CheckBox.Value = Me!Y

X= Checkbox no.
Y= Checkbox name in Access

Gruss

Luis

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Würdest du die Daten an eine Textmarke übergeben, hättest du
keine Probleme. (Äh, solltest du keine haben, immer abhängig
von den verwendeten Access- & Word- Versionen, leider hattest
du nicht geschrieben, welche du verwendest)

Hi Wolfgang

Hab Office 2003
mmmmh, den text den ich übergebe ist an ein bookmark gerichtet. Wie macht mann den ein Textmark in Word?

Gruss

Hi Luis,

Hab Office 2003

ich auch, da sind wir schon mal zwei :smile:

mmmmh, den text den ich übergebe ist an ein bookmark
gerichtet. Wie macht mann den ein Textmark in Word?

deutsche Textmark(e) = engl. Bookmark

gem. deinem Code, übergibtst du die Daten an ein DatenFELD und nicht an ein Bookmark.

In Access wäre der Code dann so richtig:
Word.ActiveDocument.Bookmarks(„Text1“).Select
Word.Selection.InsertAfter Nz(Me.Text1)

In Word über EINFÜGEN -> Textmarke -> NEU kannst du „Bookmarks“ in deinen Text einfügen.

Ich habe den Code mit über 500 Zeichen (Memofeld) getestet, es wird alles in Word eingefügt. :smile:

Grüße aus Essen
Wolfgang

Hallo Derek,

Die Backenddatenbank, die ich jetzt erweitern möchte hat schon
30MB und liegt auf einem „Standard“ Server. Wann sie auf SQL
umgestellt wird weiß nur unsere EDV.

?? wie auf SQL umstellen? Bei Access kannst du einfach ein Feld hinzufügen und als Typ OLE auswählen, fertig!

Ich befürchte die Datenbank wird zu groß, wenn die OLE Objekte
abgespeichert werden.

Access kann bis zu 2 GB an Daten aufnehmen. Nur du kannst wissen, wie viele Daten da bei dir zu sammen kommen.

Zu Deinem Beispiel. Da muss ich leider noch mal nachhaken. Ich
kann nicht sehen wie eine Checkbox aktiviert wird. Vieleich
übersehe ich das. Das war mein eigentliches Problem.

Je nach dem wie der Typ des Datenfeldes definiert ist, werden im ungünstigsten Fall -1 oder 0 im Worddokument angezeigt. Wichtig wäre zu wissen, welchen Datentyp du verwendest.

Verwendest du aber eine grafische Umwandlung mit z.B. Symbolen aus Windings, kannst du es folgender Maßen regeln:

DUMMY = IIf(Me.Checkbox = 0, „[]“, „[X]“)
'Umwandlung in Windingssymbole -> diese werden hier nicht angezeigt :frowning: daher habe ich hier Ersatzzeichen verwendet, du mußt hier natürlich die entsprechenden Windingssymbole einfügen und die Textmarke in Word auch mit der Schriftart Windings formatieren !!

'Textmarke auswählen z.B. CB1
Word.ActiveDocument.Bookmarks(„CB1“).Select

'hinter der Textmarke das Symbol einfügen
Word.Selection.InsertAfter DUMMY

Grüße aus Essen
Wolfgang

Hallo Derek,

du meintest nicht den Code:

Word.ActiveDocument.FormFields(„CB1“).CheckBox.Value = Me.Test4

wobei Me.Test4 dein Kontrollkästchen auf deinem Formular, und CB1 die Bezeichnung des Kontrollkästchens in Word ist.

Grüße aus Essen
Wolfgang

Hi Wolfgang

gem. deinem Code, übergibtst du die Daten an ein DatenFELD und
nicht an ein Bookmark.

kann es sein, dass mit dem code auch ein Bookmark angesprochen wird? Ich hab nur bookmarks im Word gemacht…

In Access wäre der Code dann so richtig:
Word.ActiveDocument.Bookmarks(„Text1“).Select
Word.Selection.InsertAfter Nz(Me.Text1)

Also, wenn ich den text in Access name: „subject“ in das bookmark „text 11“ übergeben will sollte der code folgend heissen?:

Word.ActiveDocument.Bookmarks(„Text11“).Select
Word.Selection.InsertAfter Nz(Me.subject)

ist das richtig?

was heisst insertAfter Nz?

Danke im Voraus für die hilfe

Gruss aus Zürich
Luis

Jubel!
Das hat aber jetzt geschnagelt!
Ich finde meine Kontrolkästchen wieder klasse!

Viele Grüße und besten Dank aus Hessen
Derek

Hi Luis,

kann es sein, dass mit dem code auch ein Bookmark angesprochen
wird? Ich hab nur bookmarks im Word gemacht…

hmmm dein Code spricht Datenfelder in Word an, nicht Bookmarks.

Also, wenn ich den text in Access name: „subject“ in das
bookmark „text 11“ übergeben will sollte der code folgend
heissen?:

Word.ActiveDocument.Bookmarks(„Text11“).Select
Word.Selection.InsertAfter Nz(Me.subject)
ist das richtig?

ja, probiere es doch einfach aus

was heisst insertAfter Nz?

Select = wähle aus (springe dahin)
inserAfter = füge dahinter ein (also hinter der Textmarke einfügen)
NZ = Accessfunktion NOT ZERRO (prüft ob Inhalt vorhanden ist)

wenn du mit der Maus auf das Wort klickst und F1 drückst, erhältst du i.d.R. immer eine ausführliche Hilfe im entsprechenden Programm.

btw: das Wort SUBJECT als Feldbezeichnung zu verwenden ist nicht sinnvoll, da es zu den reservierten Wörtern gehört. Das führt in vielen Programmen zu Fehlern.

Grüße aus Essen
Wolfgang