Access - In Wordvorlage mehrere Dropdown-Menüs mit Daten füllen
Sinn und Zweck der Übung ist es ein paar Dropdownlisten in einer Wordvorlage
automatisch mit den aktuellsten Daten zu bestücken, die in einer Access.mdb liegen.
Ich habe hier nach dem folgenden Beispiel:
http://www.fontstuff.com/mailbag/qword02.htm
Werte in eine Wordvorlage eingelesen,
wie kann ich nun mehrere Datensätze auslesen und
mehrere Dropdownfelder aktualisieren lassen?
Danke für jegliche Hilfe,
Grüße, Robcomboy
automatisch mit den aktuellsten Daten zu bestücken, die in einer Access.mdb liegen.
Ich habe hier nach dem folgenden Beispiel:
http://www.fontstuff.com/mailbag/qword02.htm
Werte in eine Wordvorlage eingelesen,
wie kann ich nun mehrere Datensätze auslesen und
mehrere Dropdownfelder aktualisieren lassen?
Danke für jegliche Hilfe,
Grüße, Robcomboy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165847
Url: https://administrator.de/forum/access-in-wordvorlage-mehrere-dropdown-menues-mit-daten-fuellen-165847.html
Ausgedruckt am: 23.12.2024 um 19:12 Uhr
24 Kommentare
Neuester Kommentar
Moin Romcomboy,
Grüße
Biber
Zitat von @robcomboy:
Ich habe hier nach dem folgenden Beispiel:
http://www.fontstuff.com/mailbag/qword02.htm
Werte in eine Wordvorlage eingelesen,
wie kann ich nun mehrere Datensätze auslesen und
mehrere Dropdownfelder aktualisieren lassen?
Genauso wie dem Beispiel vorgekaspert.Ich habe hier nach dem folgenden Beispiel:
http://www.fontstuff.com/mailbag/qword02.htm
Werte in eine Wordvorlage eingelesen,
wie kann ich nun mehrere Datensätze auslesen und
mehrere Dropdownfelder aktualisieren lassen?
Grüße
Biber
Moin robcomboy,
Hast du denn denn ersten Stolperstein aus dem Weg geräumt und Word-VBA mitgeteilt, dass es die Referenzen (eingedeutscht "Verweise") zur "Microsoft ActiveX Data Objects 2.x Library" setzen soll?
Du liest nur einmal aus einer Tabelle und füllst damit zwei Dropdownlisten? Ist das inhaltlich richtig?
Was hat denn die Tabelle für Felder und wieviel Datensätze willst du lesen?
Grüße
Biber
Bekomme Fehlermeldungen, die ich nicht abstellen kann. Bin Neu in VB.
Na ja, vielleicht können wir mit gebündelter Forumskompetenz die Fehlermeldungen abstellen, wenn du sie mal zum Lesen bereitstellst.Hast du denn denn ersten Stolperstein aus dem Weg geräumt und Word-VBA mitgeteilt, dass es die Referenzen (eingedeutscht "Verweise") zur "Microsoft ActiveX Data Objects 2.x Library" setzen soll?
Du liest nur einmal aus einer Tabelle und füllst damit zwei Dropdownlisten? Ist das inhaltlich richtig?
Was hat denn die Tabelle für Felder und wieviel Datensätze willst du lesen?
Grüße
Biber
Moin robcomboy,
also: du hast zwar zwei RecordSet-Objecte für die beiden unterschiedlichen SELECTs, aber die kannst du über EINE Connection laufen lassen.
Also nimm /offne/destroye nur EIN cnn-Object.
Zweitens. ist denn dieses (geguttenborgte) "TOP 25" schon hinterfragt? Wie viele "Referate" und "Emailadressen" sind denn da?
Und ein TOP 25 würde ja nur Sinn machen, wenn es z.B. 1000 Datensätze gibt, du aber nur die 25 beliebtesten/größten/häufigsten oder whatever haben willst 8dann brauchst du aber ein "ORDER BY sexappeal" oder ähnliches und solltest einen 25ten Dropdowneintrag für "Andere" anlegen.
Du willst das wirklich in eine word-"Vorlage" trümmern oder in ein Word-"Dokument?
Grüße
Biber
also: du hast zwar zwei RecordSet-Objecte für die beiden unterschiedlichen SELECTs, aber die kannst du über EINE Connection laufen lassen.
Also nimm /offne/destroye nur EIN cnn-Object.
Zweitens. ist denn dieses (geguttenborgte) "TOP 25" schon hinterfragt? Wie viele "Referate" und "Emailadressen" sind denn da?
Und ein TOP 25 würde ja nur Sinn machen, wenn es z.B. 1000 Datensätze gibt, du aber nur die 25 beliebtesten/größten/häufigsten oder whatever haben willst 8dann brauchst du aber ein "ORDER BY sexappeal" oder ähnliches und solltest einen 25ten Dropdowneintrag für "Andere" anlegen.
Du willst das wirklich in eine word-"Vorlage" trümmern oder in ein Word-"Dokument?
Grüße
Biber
Moin robcomboy,
ah so, die Restriktion mit max. 25 dropdown-Einträgen kannte ich nicht. Okay, dann ist TOP 25 wohl sinnig.
Zum Connection öffnen:
Zusrand jetzt:
Du offnest ein cnn-Object (Connection)
Mit diesem cnn erschaffst du dir ein rst-Recordset, machst irgendwas damit, machst rst wieder platt (neudeutsch: destroy)
Dann machst du das cnn-Object platt
Du offnest ein cnn-Object (Connection)
Mit diesem cnn erschaffst du dir ein abc-Recordset, machst irgendwas damit, machst abc wieder platt (neudeutsch: destroy)
Dann machst du das cnn-Object platt
Zustand neu:
Du offnest ein cnn-Object (Connection)
Mit diesem cnn erschaffst du dir ein rst-Recordset, machst irgendwas damit, machst rst wieder platt (neudeutsch: destroy)
Mit diesem cnn erschaffst du dir ein abc-Recordset, machst irgendwas damit, machst abc wieder platt (neudeutsch: destroy)
Dann machst du das cnn-Object platt
Siehst du, welche Aktionen du einfach löschen (oder meinetwegen auskommentieren) kannst?
Grüße
Biber
ah so, die Restriktion mit max. 25 dropdown-Einträgen kannte ich nicht. Okay, dann ist TOP 25 wohl sinnig.
Zum Connection öffnen:
Zusrand jetzt:
Du offnest ein cnn-Object (Connection)
Mit diesem cnn erschaffst du dir ein rst-Recordset, machst irgendwas damit, machst rst wieder platt (neudeutsch: destroy)
Dann machst du das cnn-Object platt
Du offnest ein cnn-Object (Connection)
Mit diesem cnn erschaffst du dir ein abc-Recordset, machst irgendwas damit, machst abc wieder platt (neudeutsch: destroy)
Dann machst du das cnn-Object platt
Zustand neu:
Du offnest ein cnn-Object (Connection)
Mit diesem cnn erschaffst du dir ein rst-Recordset, machst irgendwas damit, machst rst wieder platt (neudeutsch: destroy)
Mit diesem cnn erschaffst du dir ein abc-Recordset, machst irgendwas damit, machst abc wieder platt (neudeutsch: destroy)
Dann machst du das cnn-Object platt
Siehst du, welche Aktionen du einfach löschen (oder meinetwegen auskommentieren) kannst?
Grüße
Biber
Sorry, robcomboy,
ich sehe ebensowenig einen offensichtlichen Tippfehler wie du.
Nur noch Varianten zur Fehlereingrenzung fallen mir ein:
a) mal versuchen, NUR das zweite Dropdown mit dem Makro zu füllen (also den rst1-Zweig auskommentieren)
b) mal abwarten, ob eine/r der MitleserInnen etwas sieht.
Grüße
Biber
ich sehe ebensowenig einen offensichtlichen Tippfehler wie du.
Nur noch Varianten zur Fehlereingrenzung fallen mir ein:
a) mal versuchen, NUR das zweite Dropdown mit dem Makro zu füllen (also den rst1-Zweig auskommentieren)
b) mal abwarten, ob eine/r der MitleserInnen etwas sieht.
Grüße
Biber
Hömma robcomboy,
neulich fragte ich doch
und einen Kommentar später noch mal
Wie dem auch sei...
...würde dir einen Zusatzeintrag "--keine--" bringen, falls ein oder mehrere Emailadressen nicht eingetragen sind in deiner Access-Tabelle.
...würde dir nur alle vorhandenen/eingegebenen Emailadressen liefern.
Grüße
Biber
neulich fragte ich doch
SELECT DISTINCT TOP 25 [Emailaddys] FROM tblFormValues
...bringt das gweünschte Ergebnis?
-- wortwörtlich incl. Tippfehler zitiert--...bringt das gweünschte Ergebnis?
und einen Kommentar später noch mal
ein SELECT DISTINCT TOP 25 [Emailaddys] FROM tblFormValues im Access bringt 25 Emailadressen?
Wie dem auch sei...
SELECT DISTINCT TOP 25 NZ(Emailaddys, "--keine--" ) FROM tblFormValues
SELECT DISTINCT TOP 25 Emailaddys FROM tblFormValues
WHERE EmailAddys IS NOT NULL
Grüße
Biber
Moin robcomboy,
ja, das passiert, weil
und die drei arbeiten nicht so ganz kompatibel.
Noch mal langsam:
---> also das "--keine--" in doppelten Anführungszeichen.
---> Empfiehlt Access so, zeigt Access so an, gibt Access auch im Klickibunti-Assistent so vor.
Allerdings kannst du, wenn du besser SQL sprichst als die Praktikanten
auch in Access die einfachen Anführungszeichen nehmen (so sieht es ANSI-SQL vor).
Das einfache Anführungszeichen wiederum ist in VBA allerdings das Kommentarzeichen,
deshalb werden die Strings in VBA in in doppelte Anführungszeichen gesetzt.
Also musst du den String in VBA so schreiben:
Grüße
Biber
ja, das passiert, weil
- Word ist von einer Redmonder Softwareklitsche
- Access ist von einer Redmonder Softwareklitsche
- VBA ist von einer Redmonder Softwareklitsche
und die drei arbeiten nicht so ganz kompatibel.
Noch mal langsam:
SELECT DISTINCT TOP 25 NZ(Emailaddys, "--keine--" ) FROM tblFormValues
---> Das ist das, was du in Access in den SQL-Editor trümmern musst, um die "richtigen" Sätze + ggf. eine Blindniete anzuzeigen.---> also das "--keine--" in doppelten Anführungszeichen.
---> Empfiehlt Access so, zeigt Access so an, gibt Access auch im Klickibunti-Assistent so vor.
Allerdings kannst du, wenn du besser SQL sprichst als die Praktikanten
auch in Access die einfachen Anführungszeichen nehmen (so sieht es ANSI-SQL vor).
SELECT DISTINCT TOP 25 NZ(Emailaddys, '--keine--' ) FROM tblFormValues
Geht auch in Access.Das einfache Anführungszeichen wiederum ist in VBA allerdings das Kommentarzeichen,
deshalb werden die Strings in VBA in in doppelte Anführungszeichen gesetzt.
Also musst du den String in VBA so schreiben:
...
ddle.Open "SELECT DISTINCT TOP 25 NZ(Emailaddys,' --keine --' ) FROM tblFormValues;", _
cnn1, adOpenStatic
...
Grüße
Biber
Moin romcomboy,
ja, das passiert, weil
und die beiden arbeiten nicht so ganz kompatibel
Ich bekomme beim SQL-Zugriff über den JET-ODBC-Treiber auf eine Access-Tabelle ebenfalls einen "unbekannte Funktion NZ"-Fehler.
Drexcoder, redmonderische.
Machen wir halt einen Workaround.
Ich lass mir doch von Praktikanten keine SQLs verbieten...
Warum die NZ()-Funktion a) in VBA nicht existiert b) im M$-Jet-SQL überhaupt existiert weiss ich nicht.
In der (bzw. meiner) Access-Hilfe wird sie gar nicht erwähnt.
BTW, Workaround und Plan B wäre natürlich sicherzustellen, dass wenigstens 25 ver###te Emailadressen in der Tabelle vorhanden sind.
Grüße
Biber
ja, das passiert, weil
- Access ist von einer Redmonder Softwareklitsche
- VBA ist von einer Redmonder Softwareklitsche
und die beiden arbeiten nicht so ganz kompatibel
Ich bekomme beim SQL-Zugriff über den JET-ODBC-Treiber auf eine Access-Tabelle ebenfalls einen "unbekannte Funktion NZ"-Fehler.
Drexcoder, redmonderische.
Machen wir halt einen Workaround.
...
ddle.Open "SELECT DISTINCT TOP 25 Iif( IsNull(Emailaddys),' --keine --' , EmailAddys) FROM tblFormValues;", _
cnn1, adOpenStatic
...
Ich lass mir doch von Praktikanten keine SQLs verbieten...
Warum die NZ()-Funktion a) in VBA nicht existiert b) im M$-Jet-SQL überhaupt existiert weiss ich nicht.
In der (bzw. meiner) Access-Hilfe wird sie gar nicht erwähnt.
BTW, Workaround und Plan B wäre natürlich sicherzustellen, dass wenigstens 25 ver###te Emailadressen in der Tabelle vorhanden sind.
Grüße
Biber
Nachtrag:
Also: etwas ruhiger und logischer aufgedröselt bzw "hergeleitet", wie wir ITler sagen.
--> Ergo: die SQL-Funktion Nz() ist ein reines DAO-Schmankerl, bei einer ADODB-Connection muttu mit IIF() und IsNull() arbeiten.
Und ja, die Nz()-Funktion ist auch bei den RedmonderInnen dokumentiert, aber ....
...die von mir hier hergeleitete klitzekleine Sollbruchstelle ist nicht ganz so deutlich ausformuliert.
Aber da wir das jetzt alles wissen, könnten wir auch einen dritten Workaround zusammenschrubbeln:
Grüße
Biber
Zitat von @Biber:
Warum die NZ()-Funktion a) in VBA nicht existiert b) im M$-Jet-SQL überhaupt existiert weiss ich nicht.
In der (bzw. meiner) Access-Hilfe wird sie gar nicht erwähnt.
Ja nee, das war zu ungenau.Warum die NZ()-Funktion a) in VBA nicht existiert b) im M$-Jet-SQL überhaupt existiert weiss ich nicht.
In der (bzw. meiner) Access-Hilfe wird sie gar nicht erwähnt.
Also: etwas ruhiger und logischer aufgedröselt bzw "hergeleitet", wie wir ITler sagen.
- es existiert eine in SQL nutzbare Nz()-Funktion in der Access-Oberfläche ("Abfrage erstellen")
- da nutzen JET wie auch ACE (=Acc2007 und höher) das DAO-, nicht das ADO-Modell -> also wissen wir nur, dass es unter DAO funktioniert
- in VBA existiert ebenfalls eine VBA-Version von Nz()... aber eben in VBA, nicht in Abfragen an ein ADODB-Datenobjekt verfügbar.
--> Ergo: die SQL-Funktion Nz() ist ein reines DAO-Schmankerl, bei einer ADODB-Connection muttu mit IIF() und IsNull() arbeiten.
Und ja, die Nz()-Funktion ist auch bei den RedmonderInnen dokumentiert, aber ....
...die von mir hier hergeleitete klitzekleine Sollbruchstelle ist nicht ganz so deutlich ausformuliert.
Aber da wir das jetzt alles wissen, könnten wir auch einen dritten Workaround zusammenschrubbeln:
....
....
' ... die Emailadressen NUR mit SELECT DISTINCT holen.... lass ruhig einen NULL-Wert kommen...
' Dropdown Emailaddys füllen
With ActiveDocument.FormFields("DDemls").DropDown.ListEntries
.Clear
Do
.Add NZ( ddle![Emailaddys] , " -- keine -- ") ' denn hier haben wir ja eine VBA-Nz()-Function
ddle.MoveNext
Loop Until ddle.EOF
ddle.Close
Set ddle = Nothing
....
Grüße
Biber
Moin robcomboy,
den Folgenden Fehler:
Fehler beim Kompilieren:
Sub oder Function nicht definiert
Ja, das passiert, weil
und die drei arbeiten nicht so ganz kompatibel.
Flüchtige Recherchen eines interessierten Laien und bekennenden Redmonder Praktikanten-Fans ergaben.
--> diesen erneuten DAU-Leimer könnten wir auch wieder umschiffen, indem du im Word-VBA-Editor noch einen zusätzlichen Verweis auf die "Microsoft Access 11.0 (oder 12.0) Object Library " machst.
Is' sich aber langsam albern.
Nimm einen von den anderen Workarounds (als nimm eine IF/IIF() -Konstruktion und prüfe auf NULL)
BTW, wir plaudern ja nur so lange über diesen Mist, weil dir "irgendwer was von der Nz()-Funktion erzählt hat", hmmm?
Sollte derjenige dich wieder mal besuchen - hau ihm eine aufs Maul von mir.
Grüße
Biber
.Add NZ(ddle![Emailaddys], " -- keine -- ") ' denn hier haben wir ja eine VBA-Nz()-Function
den Folgenden Fehler:
Fehler beim Kompilieren:
Sub oder Function nicht definiert
- Word ist von einer Redmonder Softwareklitsche
- Access ist von einer Redmonder Softwareklitsche
- VBA ist von einer Redmonder Softwareklitsche
und die drei arbeiten nicht so ganz kompatibel.
Flüchtige Recherchen eines interessierten Laien und bekennenden Redmonder Praktikanten-Fans ergaben.
- in Access existiert einer VBA-Nz()-implementierung
Function Nz(Value, [ValueIfNull])
Element von Access.Application
- in Word existiert keine VBA-Nz()-implementierung
--> diesen erneuten DAU-Leimer könnten wir auch wieder umschiffen, indem du im Word-VBA-Editor noch einen zusätzlichen Verweis auf die "Microsoft Access 11.0 (oder 12.0) Object Library " machst.
Is' sich aber langsam albern.
Nimm einen von den anderen Workarounds (als nimm eine IF/IIF() -Konstruktion und prüfe auf NULL)
BTW, wir plaudern ja nur so lange über diesen Mist, weil dir "irgendwer was von der Nz()-Funktion erzählt hat", hmmm?
Sollte derjenige dich wieder mal besuchen - hau ihm eine aufs Maul von mir.
Grüße
Biber