Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Kinimod am Oktober 18, 2019, 10:15:14

Titel: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am Oktober 18, 2019, 10:15:14
Moin,

ich möchte in einem Endlosformular einen, oder mehrer, Datensätze auswählen und dann ein vba- Makro starten, welches Werte aus diesem Datensatz in ein Word Dokument überträgt.

Wie kann ich auf die Werte der selektierten Datensätze zugreifen? Bei Excel geht das ganz einfach über Selection- Eigenschaft, gibt es etwas entsprechendes auch bei Access?

freundliche Grüße
Kinimod
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Rivside am Oktober 18, 2019, 13:11:37
Hallo!

Zufälligerweise wollte ich genau gleiches Thema berühren. Ich schließe mich an. Habe in einem Formular ein Listenfeld eingefügt und möchte gerne ausgewählte Werte in Word übertragen.

Dazu noch, ich möchte das die selektierte Werte nach einem Abschluss abgehackt werden (Häkchenbox).

Ich wäre richtig dankbar wenn uns jemanden zu mindestens auf den richtigen Weg setzt.

Danke im Voraus.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Rivside am Oktober 18, 2019, 13:46:04
@Kinimod

Was ich soweit geschafft habe ist:


Set objWord = CreateObject("Word.Application")
With objWord
objWord.Visible = True
objWord.Documents.Open ("Pfad zu deiner Vorlage z.B.: C:\vorlage.doc")
.ActiveDocument.Bookmarks("DeineTextmarke im Word").Select
.Selection.Range.Text = CStr([hier dein Steuerelement])
End With
Set objWord = Nothing


Im Word muss du Textmarker erzeugen.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am Oktober 19, 2019, 08:52:48
Hallo,,
Zitatich möchte in einem Endlosformular einen, oder mehrer, Datensätze auswählen


Es können nur zusammenhängende Datensätze in einem Endlosform ausgewählt (markiert) werden.

Besser ist, ein Ja/Nein-Feld im Datensatz mitzuführen, das bei einem zu wählenden DS angehakt wird.


Im Recordset(Clone) des Forms können die abgehakten DS ermittelt und an Word übergeben werden.


ZitatHabe in einem Formular ein Listenfeld eingefügt
Das Gleiche gilt beim Listenfeld, das zunächst  auf Mehrfachauswahl stehen muss.  Allerdings werden hier die markierten Einträge mit der Listenfeld-Aufzählung "Itemsselected" in einer Schleife ermittelt und an Word übergeben.

In beiden Fällen wäre eine separate Schaltfläche zum Auslösen der Übertragung an Word anzuraten und in deren Klick-Ereignis die Änderungen im Form zu speichern  (Me.Dirty = False)

btw:

ZitatobjWord.Documents.Open ("Pfad zu deiner Vorlage z.B.: C:\vorlage.doc")


"Open" öffnet ein Dokument (.docx) als solches, was sowohl ein "normales" Word-Doc als auch eine Wordvorlage (.dotx) sein kann,
"Add"  generiert ein neues Dokument auf Grundlage der angegebenen Word-Vorlage (.dotx)
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: ebs17 am Oktober 19, 2019, 08:55:23
Den Datenübertrag in ein Worddokument kann man auf mehreren Wegen realisieren:
- Verwendung von Textmarken im Worddokument. Da muss man immer einzeln Werte zuweisen, dabei dann bei mehreren Datensätzen einen Plan ob der Verteilung haben.
- Serienbriefunktionalität: Man nimmt also eine Serienbriefvorlage, stellt eine Datenbasis zusammen und weist sie dieser Vorlage zu.

Um einen passenden Weg zu wählen, sollten einem die Anforderungen schon etwas umfangreicher und detaillierter bewusst sein.
Zitateinen, oder mehrer, Datensätze auswählen
Beginnen sollten ja die Überlegungen damit, wie das Auswählen genau erfolgt. Vom Angucken alleine wird noch nicht viel passieren können.
Filtern? Individuelle Auswahl?

Eine Datenbereitstellung und somit das Auswählen sind dann wieder abhängig davon, was da in Word passieren soll.

Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am Oktober 21, 2019, 09:11:18
Danke für eure Antworten.

@DF6GL
Das mit dem Ja/ Nein- Feld ist eine gute Idee. Wie kann ich mit vba danach filtern?

Die Übertragung der Daten zu Word steht bei mir schon weitestgehend, mir fehlen quasi nur noch die Daten, an die ich bis jetzt nicht ran komme.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am Oktober 21, 2019, 13:03:11
Hallo,

ZitatWie kann ich mit vba danach filtern?

LuftCode:
Sub btn2Word_Click()

Dim rs as Dao.Recordset, _
objWord as Object

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

Me.Dirty=false

Set rs = Me.RecordsetClone
rs.MoveFirst
    Do Until rs.EOF
      If rs![MeinMarkierungsfeld] Then

          objWord.Documents.Add ("Pfad/Dateiname zu deiner Vorlage z.B.: C:\vorlage.dotx")
          .ActiveDocument.Bookmarks("DeineTextmarke im Word").Select
          .Selection.Range.Text = CStr(Me![hier dein Steuerelementname])
          ' für alle Textmarken anwenden

          ' hier weitere Aktionen zu Word
          '.Close  , .SaveAs oder ähnliches
      End If


  rs.Movenext
  Loop



objWord.Quit
Set objWord = Nothing
End With
rs.Close
Set rs = Nothing
End Sub
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 08, 2019, 10:51:10
Hallo,
ich habe versucht das mit dem extra Auswahlfeld umzusetzen, bin jedoch schnell auf ein Hindernis gestoßen.
Die Daten in dem Formular können nicht geändert werden, es kommt immer der Hinweis "Diese Datensatzgruppe kann nicht aktualisiert werden." Die Abfrage auf der das Formular basiert enthält zum Teil berechnete Felder die Faktoren aus 2 Tabellen enthalten, dass diese nicht aktualisiert werden können verstehe ich, aber warum kann kein Feld aktualisiert werden?
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am November 08, 2019, 12:32:00
Hallo,

weil nicht nur die Feldern einzeln betrachtet werden, sondern der Datensatz insgesamt....

ZitatDie Daten in dem Formular können nicht geändert werden

War das irgendwo eine Vorgabe, dass die Formulardaten aktualisiert werden müssen?

Wenn das so sein muss, dann wirf die Berechnungen aus der Abfrage heraus und führe sie im Formular durch (mit z. B. den Domänenaggregat-Funktionen, wenn andere Tabellenwerte ausgelsen werden müssen.)
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 11, 2019, 11:31:52
für mein Vorhaben war es zunächst keine Vorgabe, aber du hattest Vorgeschlagen ein zusätzliches Feld zum anwählen einzufügen. Das anwählen geht bei mir dann aber wie das ändern der anderen Daten auch nicht.

Die Domänenaggregat- Funktionen werde ich mir mal anschauen.

Vielen Dank auf jeden Fall für deine Mühen, ich bin bei Access absoluter Beginner und versuche oft mein Vorgehen aus Excel zu übernehmen was natürlich oft nicht klappt.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am November 11, 2019, 13:08:04
Hallo,

grundsätzlich sind berechnende Abfragen (Abfragen mit Berechnungsfeldern)  nicht aktualisierbar. Es müssen dann eben andere Methoden für die Berechnung ergriffen werden.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 11, 2019, 14:00:58
Mit welchen Methoden wäre das denn machbar?
Ich habe versucht im Formular über das Eigenschaftenblatt im Steuerelementinhalt auf die Werte einer anderen Tabelle/ Abfrage zuzugreifen. Das hat aber nicht geklappt, kann auch nicht, da keine Verknüpfung da ist, oder?

Mir würde es schon helfen, wenn ich in meinem Formular mit den berechneten Feldern eine Kontrollkästchen, oder ein Optionsfeld hätte, welches ich an und abwählen kann.

Das Problem das ich habe ist, dass der User in einem Endlosformular mit berechneten Feldern mehrere Datensätze frei auswählen können muss. Die Daten der ausgewählten Datensätze muss ich dann über VBA weiterverarbeiten. In Access fällt mir das gerade sehr schwer, da ich es von Excel gewohnt bin eine markierte Zelle über selection anzusprechen und den Wert auszulesen.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am November 11, 2019, 14:09:23
Hallo,


was sind das denn für Berechnungen?

Kannst Du mal die DB datenreduziert, komprimiert/repariert und gezippt hier hochladen?


Mit funktionierenden Beispieldaten und einer authentischen Beschreibung, was wo zu tun ist?

Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 12, 2019, 10:19:05
Hier mal eine vereinfachte Version, die Felder die nicht gebraucht werden habe ich fast alle entfernt.
Es geht um Bestellungen die bei uns eingegangen sind, diese sind in in der Tabelle "Order Liste DB".
In der Tabelle "Abrechnungsmeldungen DB" halten wir fest was wir von welcher Bestellung/ Order schon abgerechnet haben.
Das Formular "Order Liste" dient zum händischen eintragen neuer Bestellungen.
Das Formular "Abrechnungsmeldung" für neue Abrechnungen.
Das Formular "Order Liste EUR" ist das Formular um welches es hauptsächlich geht, hier sind die berechneten/ aufbereiteten Daten enthalten, etwa der Status der Order (abgerechnete Items/ gesamt Items).
In diesem Formular soll der Nutzer später Datensätze individuell auswählen können, dann ein Makro starten das die Daten in eine Wordvorlage einfügt. Das Anwählen der Datensätze und auslesen der entsprechenden Daten bereitet mir Probleme.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am November 12, 2019, 17:07:16
Hallo,

DB anbei.

Nur bezgl. des Problems mit der Markierung und der Übergabe an Word modifiziert ("Order Liste Eur", Datenherkunft auf Tabelle, Berechnete Werte mit Dlookup aus berechnende Abfrage ausgelesen, nur Word als Instanz geöffnet wegen Unkenntnis der Templates), um das Prinzip zu demonstrieren. In der Datenblattansicht sind keine Buttons verwendbar. Formular als Endlosform ausführen und passend layouten.

BTW:  Datentypen passend verwenden (Zahlen kein TEXT, sondern LONG). Keine Leer und Sonderzeichen verwenden. Reservierte Wörter vermeiden.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 15, 2019, 11:50:26
Danke, du hast mir sehr geholfen, ich denke damit komm ich erstmal klar :)

Die Datentypen passen teilweise nicht, da ich die Daten geändert habe. Bei den echten Daten ist es häufig ein Buchstaben Zahlen Mix.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am November 15, 2019, 13:54:06
Hallo,


ZitatDie Datentypen passen teilweise nicht, da ich die Daten geändert habe.

Grenzt ja schon an Irreführung und führt zu eklatant fehlerhaften Lösungen, die Dich eher verwirren als helfen ::) 
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 15, 2019, 14:16:17
Beim nächsten mal achte ich drauf, dass die Beispieldaten in ihrer Form den richtigen Daten entsprechen. :) Ich hab gar nicht dran gedacht, dass das ja auch einen Unterschied machen kann.

Gibt es eine Möglichkeit, dass was momentan über den Button läuft anders zu starten, sodass man die Datenblattansicht nutzen kann?
Das Endlosformular ist ein seiner Breite begrenzt und erlaubt es dem Nutzer auch nicht die Breite/ Höhe der Felder/ Datensätze zu variieren. Leider gibt es einige Felder die ich unterbringen muss, und auch ein paar die teilweise etwas Text enthalten da wäre es praktisch, wenn man das Feld groß ziehen kann, wenn man den Text braucht.

Auf jeden Fall nochmal Danke und ein schönes Wochenende dir/euch :)
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am November 15, 2019, 14:31:55
Hallo,

evtl. könnte ein Unterformular in Datenblattansicht zum gewünschten Ziel führen...
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Beaker s.a. am November 15, 2019, 15:17:08
Hallo,
Zitatwenn man das Feld groß ziehen kann, wenn man den Text braucht.
Das geht einfach mit Shift-F2, wenn das Feld den Focus hat.
gruss ekkehard
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 19, 2019, 12:17:43
Danke, das mit dem Unterformular hat gut geklappt und der Hinweis mit Shift- F2 ist auch sehr nützlich :)

Ein kleines Problem ist aber noch aufgetaucht, wenn ich die markierten Datensätze bearbeitet habe möchte ich die Markierung gleich entfernen.
Das wollte ich einfach mit
        rs.Edit
        rs!Markiert = False
        rs.Update
machen. Bei dem ersten Datensatz klappt das auch danach bekomme ich jedoch die Fehlermeldung:
"Laufzeitfehler 3197:
Das Microsoft Access- Datenbankmodul hat den Vorgang angehalten, da Sie und ein weiterer Benutzer gleichzeitig versuchen , dieselben Daten zu änder."
Ich bin zurzeit der einzige Nutzer und weiß nicht wodurch der Fehler verursacht wird.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: atropos am November 19, 2019, 12:52:17

Hallo

ich habe bei so etwas auch immer Schwierigkeiten mit der Sperrung. Umgehe das meist mit einem SQL Statement, sofern der DS im Formular nicht bearbeitet wird:

Dim sSQL$
sSQL = "UPDATE Tabelle SET Tabelle.Markiert=Not(Tabelle.Markiert) WHERE ((Tabelle.Index)=" & Me.Index & ")"
CurrentProject.AccessConnection.Execute sSQL
Me.Requery
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am November 19, 2019, 13:40:27
Hallo,

Zitatwenn ich die markierten Datensätze bearbeitet habe möchte ich die Markierung gleich entfernen.

Zeige mal die komplette(n) Prozedur(en)..

Möglicherweise hilft ein Me.Dirty=false , um den Eingabemodus (und damit deine eigene Sperrung)  zu beenden.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 22, 2019, 09:23:02
Hallo,

das ist mein Code, soweit funktioniert er auch wie er soll, nur eben das abwählen der Markierung noch nicht. Me.Dirty=false hab ich schon an verschiedenen Stellen probiert hat aber nicht geholfen
Private Sub btnWord_Click()

Me.Dirty = False

Dim rs As DAO.Recordset, objWord As Object
Dim F308doc
Dim customerList As String
Dim customer As String
Dim poList As String
Dim PO As String
Dim oTable As Table
Dim row As Integer
Dim docName As String

Set objWord = CreateObject("Word.Application")
Set F308doc = objWord.Documents.Open("C:\Users\TEST\Documents\DB\Makro\F308.docx")
Set oTable = F308doc.Bookmarks("poTabelle").Range.Tables(1)
Set rs = Me.RecordsetClone

objWord.Visible = True
rs.MoveFirst

row = 5
PO = rs!PO
poList = PO
docName = "Lieferschein_"
customer = rs!customer

If Left(PO, 1) = "c" Or Left(PO, 1) = "C" Then
    customerList = "TESTKUNDE: " & customer
Else
    customerList = customer
End If

Do Until rs.EOF

    If rs![Markiert] Then
   
        customer = rs!customer
       
        If InStr(customerList, customer) = 0 Then
            customerList = customerList & "; " & customer
        End If
       
        PO = rs!PO
       
        If InStr(poList, PO) = 0 Then
            poList = poList & "; " & PO
        End If
       
        oTable.cell(row, 2).Range.insertafter rs!PO
        oTable.cell(row, 3).Range.insertafter rs!Pos
        oTable.cell(row, 4).Range.insertafter rs![Item Description]
        oTable.cell(row, 5).Range.insertafter rs!Quantity & "/" & rs!Quantity
        oTable.cell(row, 6).Range.insertafter "1"
        oTable.cell(row, 7).Range.insertafter rs![Delivery Date]
       
        'If Me.Dirty Then Me.Dirty = False
        rs.Edit
        'If Me.Dirty Then Me.Dirty = False
        rs!Markiert = False
        If Me.Dirty Then Me.Dirty = False
        rs.Update
       
        row = row + 1
       
    End If
   
    rs.MoveNext
   
Loop
 
oTable.cell(1, 2).Range.insertafter customerList
oTable.cell(2, 2).Range.insertafter poList

docName = docName & poList
docName = Replace(docName, "/", "-")
docName = Replace(docName, "; ", "_")
F308doc.SaveAs2 FileName:=docName & ".docx", FileFormat:=wdFormatDocumentDefault

   


Set objWord = Nothing
rs.Close
Set rs = Nothing
End Sub
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: DF6GL am November 22, 2019, 15:05:09
Hallo,

wirf hier:
Zitat.
.
.
        'If Me.Dirty Then Me.Dirty = False
        rs.Edit
        'If Me.Dirty Then Me.Dirty = False
        rs!Markiert = False
        If Me.Dirty Then Me.Dirty = False
        rs.Update
.
.


die Dirty-Geschichte heraus.
Titel: Re: Werte selektierter Datensätze auslesen
Beitrag von: Kinimod am November 25, 2019, 08:37:19
Ja, dass habe ich nur zum ausprobieren drin, da ich bei der Lösungssuche auch auf den me.dirty Ansatz gestoßen bin, aber nicht genau wusste an welche Position das gehört.