Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Rivside am November 08, 2019, 09:29:31

Titel: Endlosformular an Word übergeben
Beitrag von: Rivside am November 08, 2019, 09:29:31
Hallo zusammen,

ich möchte angehackte Datensätze über ein Kontrollkästchen an Word übergeben. Das funktioniert aber soweit nicht.

Problem 1: selbst mit Funktion If werden alle Datensätze freigegeben, Access unterscheidet nicht ob angekreuzt oder nicht
Problem 2: da wird immer nur aktueller Datensatz übergeben. Ich hab es zwar hinbekommen mit GoToRecord, aber das ist ja eh falsch.

Private Sub Befehl219_Click()
Dim rsf As Recordset
Set rsf = Me.RecordsetClone
'rsf.MoveFirst
'Do Until rsf.EOF
'With rsf
    If Me.Kontrollkästchen2 = True Then
        Set objWord = CreateObject("Word.Application")
        With objWord
        objWord.Visible = True
        objWord.Documents.Open ("vorlage")
            rsf.MoveFirst
           
            .ActiveDocument.Bookmarks("WE").Select
            .Selection.Range.Text = CStr([Text43])
            .ActiveDocument.Bookmarks("Artikel").Select
            .Selection.Range.Text = CStr([Text7])
            DoCmd.GoToRecord , , acNext
            .ActiveDocument.Bookmarks("Artikel2").Select
            .Selection.Range.Text = CStr([Text7])
        End With
    Else: MsgBox ("Kein Artikel ausgewählt")
    End If
'End With
'Loop
End Sub


Was mache ich falsch?
Titel: Re: Endlosformular an Word übergeben
Beitrag von: markusxy am November 08, 2019, 11:36:22
So wie es aussieht, nutzt du das Recordset bei der Übergabe überhaupt nicht.
Die Werte werden ja aus den Formular Feldern gelesen.
Da du aber mit einem Clone arbeitest, sind die Werte völlig unabhängig von einander.

Bei einem Clone solltest du die Werte direkt aus dem Recordset und nicht die aus den Formular Feldern verwenden.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: Rivside am November 08, 2019, 11:54:42
Hallo Markus,

danke für dein Antwort. Wie kann ich die Felder ansprechen?

Titel: Re: Endlosformular an Word übergeben
Beitrag von: DF6GL am November 08, 2019, 12:40:42
Hallo,

z. B.:

.Selection.Range.Text = CStr(rsf!Text43)


wobei "Text43" eine kaum zu glaubende Aussagekraft besitzt.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: Rivside am November 11, 2019, 11:01:42
DF6GL, danke! Wie dumm von mir, ich sollte vielleicht vorher dran denken dass ich die Steuerelemente auswählen soll.

Ich kriege jetzt aber leider nicht das mit dem Kontrollhäckchen hin...

If Me.Kontrollkästchen2 = True Then

Dies kontrolliert nur ob beim aktuellen DS das Häckchen True ist. Ich habe schon versucht mit rsf! / rsf. den richtigen Steuerelement zu wählen aber der Kompiler findet ihn nicht.

Das Hauptproblem im Moment ist dass der Recordset nicht unterscheiden kann ob ja/nein. Ich steuere alles zwar mit rsf.MoveNext, aber selbst wenn der DS nicht mit dem "Häckchen" angekreuzt ist, wird dieser trotzdem angezeigt.

Kannst mir bitte nur mit diesem kurz helfen? Dann bin ich eigentlich durch...

MfG
Titel: Re: Endlosformular an Word übergeben
Beitrag von: DF6GL am November 11, 2019, 13:03:05
Hallo,


If rsf!Kontrollkästchen2 = True Then

wenn das boolsche Tabellen(!)-Feld (in der Datenherkunft) auch "Kontrollkästchen2" heißt.

Prinzipiell:

If rsf!DeinTabellenBoolFeld Then
Titel: Re: Endlosformular an Word übergeben
Beitrag von: Rivside am November 12, 2019, 07:00:47
Hallo DF6GL,

erstmal danke dir ganz herzlich für deine Hilfe.

Das funktioniert leider nicht. Wenn ich die Daten vom RS-Kontrollkästchen übernehme, selbst wenn die DS angehackt sind diese nicht erkennbar. Ich habe schon kurz nachgedacht und festgestellt dass die in der Abfrage erst angehackt werden müssen. Wenn ich die Daten zB. mit Requery aktualisiere, wurde das höchstwahrscheinlich funktionieren aber in dem Moment sind die Datensätze natürlich weg, weil ich in der Abfrage eine Kriterium habe mit Kontrollkästchen = 0. Warum erkennt der RS die Häkchen im Formular nicht? Mit Me.Kontrollkästchen funktioniert das super, aber halt nur für den aktuellen Datensatz.

Private Sub Befehl219_Click()
Dim rs As Recordset
Set rs = Me.RecordsetClone
Set objWord = CreateObject("Word.Application")

    If rs!Freigabe = True Then
        rs.MoveFirst
        objWord.Visible = True
        objWord.Documents.Open ("")
        objWord.ActiveDocument.Bookmarks("Artikel").Select
        objWord.Selection.Range.Text = CStr(rs!Artikel)
        rs.MoveNext
        objWord.ActiveDocument.Bookmarks("Artikel2").Select
        objWord.Selection.Range.Text = CStr(rs!Artikel)
    Else: MsgBox ("Kein Datensatz ausgewählt")
    End If
End Sub


Was kann ich hier evtl. tun? Ich will nur die angekreuzte Datensätze in Word transportieren....
Titel: Re: Endlosformular an Word übergeben
Beitrag von: DF6GL am November 12, 2019, 08:33:06
Hallo,

vielleicht hilft:

.
Dim rs As Dao.Recordset
Me.Dirty = False
Set rs = Me.RecordsetClone
.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: Rivside am November 13, 2019, 10:46:12
Super, das hat funktioniert!

Das einzige was ich jetzt am ende nicht hinkriege ist recordset.MoveNext aber bis zum nächsten durch Kontrollkästchen angekreuzten DS. Gibt's da eine Suchkriterium in recordset.MoveNext zB. recordset.MoveNext(rs!Freigabe)? Wie kann ich das steuern? Durch eine schleife?

Bis jetzt sieht der Code so aus:

Private Sub Befehl219_Click()
Dim rs As Dao.Recordset
Me.Dirty = False
Set rs = Me.RecordsetClone
Set objWord = CreateObject("Word.Application")

    If rs!Freigabe = True Then
        rs.MoveFirst
        objWord.Visible = True
        objWord.Documents.Open ("")
        objWord.ActiveDocument.Bookmarks("Artikel").Select
        objWord.Selection.Range.Text = CStr(rs!Artikel)
    End If
       
        If rs!Freigabe = True Then
        rs.MoveNext
        objWord.ActiveDocument.Bookmarks("Artikel2").Select
        objWord.Selection.Range.Text = CStr(rs!Artikel)
    End If
Set rs = Nothing
End Sub


Also Wenn eine Kontrollkästchen aktiv, fülle die Bookmarks, wenn zwei dann fülle beide, wenn drei dann drei aber halt nur die aktive, die DS welche nicht angekreuzt sind sollen übersprungen werden...
Titel: Re: Endlosformular an Word übergeben
Beitrag von: DF6GL am November 13, 2019, 11:58:02
Hallo,

ja, durch eine Schleife, die Du aber selber hinbekommen solltest.   :(

Wobei zu fragen ist,  an welche Bookmarks im selben Dokument die (gleichen) Daten mehrerer Datensätze übergeben werden sollen.


Vermutlich wäre hier ein "Serienbrief" die bessere Lösung.  (Erstelle mit Word eine Serienbriefvorlage, die alle nötigen Serienbrieffelder enthält und nutze die zum Öffnen eines Dokuments. Mit der Word-MailMerge-Methode können dann ein passender Serienbrief in Word generiert werden.

Wenn pro Datensatz ein neues Dokument erzeugt werden soll, muss das innerhalb der Schleife geschehen.


.
.
.
Set rs = Me.RecordsetClone
        rs.MoveFirst

Set objWord = CreateObject("Word.Application")
       objWord.Visible = True


Do Until rs.Eof
    If rs!Freigabe = True Then

        objWord.Documents.Add ("Deine Wordvorlage")
        objWord.ActiveDocument.Bookmarks("Artikel").Select
        objWord.Selection.Range.Text = CStr(rs!Artikel)
   '  hier evtl. Dok sichern und schließen
    End If
       
rs.MoveNext
Loop

  rs.Close
Set rs = Nothing

objWord.Quit
SET  objWord = Nothing
.
.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: Rivside am November 13, 2019, 12:15:10
Sorry, ich hab bissl durchgeforscht und fast den gleichen Schleifen-Code hingekriegt... aber das ist trotzdem noch nicht das was passieren soll. Ich habe kein Plan wie ich die Selection.Range mit aktiven Kontrollkästchen so binde, dass WENN eine Kästchen aktiv nur DANN an die Vorlage übergeben....

Ich hätte vielleicht am Anfang schon beschreiben sollen was ich in Word überhaupt erzeugen möchte... Serienbriefe oder getrennte Word Dokumente sind nicht mein Ziel. Ich möchte gerne vom Endlosformular nur die durch Kontrollkästchen angekreuzte Datensätze an Word (ein Dokument) übergeben.

Beispiel Formular:

Datensatz 1   Kontrollkästchen Aktiv
Datensatz 2   Kontrollkästchen Nicht Aktiv
Datensatz 3   Kontrollkästchen Nicht Aktiv
Datensatz 4   Kontrollkästchen Aktiv

Word Vorlage:

Datensatz 1
Datensatz 4
Titel: Re: Endlosformular an Word übergeben
Beitrag von: ebs17 am November 13, 2019, 12:56:50
ZitatIch möchte gerne vom Endlosformular nur die durch Kontrollkästchen angekreuzte Datensätze an Word (ein Dokument) übergeben.
Würde man nicht schlicht das Formularrecordset oder (technisch) die Datenbasis des Formulars auf diese Markierung filtern?
Dieses resultierende neue Recordset könnte man dann in einer Schleife ohne gesonderte Prüfungen übergeben bzw. besser gleich im Stück => Massendatenverarbeitung statt Sandschaufel.

Zitatan Word (ein Dokument) übergeben
Eine Textmarke wird dann auch nur für genau eine Zuweisung funktionieren, nicht für laufende.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: Rivside am November 13, 2019, 13:05:03
Zitat von: ebs17 am November 13, 2019, 12:56:50
Würde man nicht schlicht das Formularrecordset oder (technisch) die Datenbasis des Formulars auf diese Markierung filtern?
Dieses resultierende neue Recordset könnte man dann in einer Schleife ohne gesonderte Prüfungen übergeben bzw. besser gleich im Stück => Massendatenverarbeitung statt Sandschaufel.

Leider nein. Die Abfrage im Formular zeigt "noch zu bearbeitende Datensätze". Der Benutzer entscheidet welche bearbeitet sind (zB. von ihm persönlich) und gibt an Word weiter. Die restlichen DS werden evtl. vom anderen Benutzer später bearbeitet.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: DF6GL am November 13, 2019, 15:06:57
Hallo,

Dein Beispiel zeigt die Übernahme mehrerer DS an ein einzelnes Worddokument. Dies funktioniert so nicht mit einzelnen Textmarken, weil die auch nur einmal besetzt werden können. Es würde sich hier das Füllen einer Word-Tabelle anbieten, oder als  "einfachste" Möglichkeit  das Schreiben von Wert für Wert mit TypeText direkt in das Dokument.

Siehe Hinweis von ebs17.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: Rivside am November 13, 2019, 15:11:11
Hallo,

ich hab natürlich mehrere Textmarker bereits vorbereitet. Das Problem ist nur dass ich leider nicht in der Lage bin die selektierte DS an Word zu übergeben. Ich hab wirklich kein Plan mehr wie ich das programmieren soll. Ich habe schon versucht mit Select Case usw. aber es klappt einfach nicht.

Wenn Ihr mir zu mindestens ein den richtigen Weg stellen wurdet..

1 bis 5 selektierte DS

wenn nur 1 selektiert -> Übergabe textmarker1

wenn 2 selektiert -> Übergabe an textmarker1 und textmarker2

Ich bin am ende...
Titel: Re: Endlosformular an Word übergeben
Beitrag von: DF6GL am November 13, 2019, 15:24:28
Hallo,

nun, m. E. ist das Murks.. Welchen Hintergrund hat eigentlich die Aufgabe? Ist das eine Schulübung/-aufgabe  oder soll das real eingesetzt werden?

Wie auch immer, ein Schleifenzähler hilft...

Dim i as Long
.
.
.
objWord.Documents.Add ("Deine Wordvorlage")
Do Until rs.Eof
i=i+1
    If rs!Freigabe = True Then

        objWord.ActiveDocument.Bookmarks("textmarker" & i).Select
        objWord.Selection.Range.Text = CStr(rs!Artikel)

    End If
       
rs.MoveNext
Loop
Titel: Re: Endlosformular an Word übergeben
Beitrag von: ebs17 am November 13, 2019, 16:22:16
Zitatwenn 2 selektiert -> Übergabe an textmarker1 und textmarker2
Schleifen drehen und prüfen, prüfen. Wann kommt man dann zum Handeln oder gar bis zum Erfolg?

Du redest von Datensätzen. Da brauchst Du in der Umständlichkeit pro Feldinhalt eine Textmarke. Das dann multipliziert pro Datensatz.
Was machst Du, wenn Deine vorgesehenen Textmarken nicht ausreichen, die gesamte Auswahl zu übernehmen, weil der Anwender fleißiger ist, als Du Dir vorstellen kannst?
Das alleine ist schon ein Totschlagargument für die Einzelübergabevariante.

Alternativen:
- Die Feldinhalte des Recordsets werden zu einem einzigen String zusammengezogen. Dieser kann dann an eine einzelne Textmarke platziert werden. Je nach Inhalten können sich aber Formatierungsprobleme ergeben (verschobene Tabelle).

- Tabelle im Worddokument anlegen. Diese bekommt eine einzelne Textmarke und ist dann hinreichend adressierbar, weil sie dann selber als Objekt per Zeilen und Spalten ansprechbar ist. Dort könnte man im Zuge des Eintragens auch neue benötigte Zeilen dieser Wordtabelle erzeugen.

- Das Recordset wird über die Wordmethode ConvertToTable zu einer Wordtabelle umgeformt. Diese Tabelle wird an der Textmarkte eingefügt. Fertig, bis auf evtl. ein paar dokumentangepasste Formatierungen. Das wäre meine favorisierte Variante.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: Rivside am November 13, 2019, 19:58:20
Hallo ebs17,

um das ganze noch lustiger darzustellen, müssen bestimmte Teile vom Datensätzen getrennt und an verschiedenen Textmarker übertragen werden.

Ist ja egal. Ich fange an mit VBA und glaube ich werd versuchen das ganze irgendwie mit Schleifen zu lösen.

Ich danke euch für eure Mühe. Das hat mir erstmal viel geholfen.
Titel: Re: Endlosformular an Word übergeben
Beitrag von: ebs17 am November 13, 2019, 20:51:54
Nun, ehe man mit Codes aktioniert, sollte man einen (Ablauf)Plan haben. Bevor man sich einen Plan zurecht legt, sollte man die Situation wie auch die Zielstellung erfasst und verstanden haben.