Datensatz mit Visual Basic abrufen

Kann ich in Visual Basic was programieren, dass mir der Datensatz aus einer Datenquelle automatisch ausgewählt wird. Der zu suchende Datensatz kommt aus einer Textmarke

wozu vba? ein simples skip-if-feld müsste doch reichen!

also, angenommen, du hast ein feld „geschlecht“ mit den Werten „M“ und „W“. in der Textmarke „FILTERGESCHLECHT“ ist der gewünschte wert drinnen. also einfach ein skip-if-feld basteln:

{skipif {mergefield GESCHLECHT} {FILTERGESCHLECHT}}

schon werden alle datensätze weggefiltert, die nicht deinem kriterium entsprechen.

das ganze ist eigentlich recht einfach zu handhaben und sehr flexibel. lediglich wirklich komplexe abfragen werden schnell zur qual. und bei sehr grossen datenquellen wird das ganze sehr schnell wirklich langsam. aber für kleine anwendungen reicht es vollkommen…

lg
erwin

Das Problem ist aber, dass die Datenbank sehr groß wird (ungefähr 2000 Datensätze). Und der Benutzer sollte nur noch auf einen Button klicken müssen und alles geht automatisch

sowas in etwa?
Sub SetzeSatz()
Dim Wert As String
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord
Wert = ActiveDocument.Bookmarks.Item(„Suche“).Range.Text
ActiveDocument.MailMerge.DataSource.FindRecord FindText:=Wert, Field:=„Typ“
ActiveDocument.MailMerge.ViewMailMergeFieldCodes = False
End Sub

auf jeden fall anpassen:

  • Bookmarks.Item(„Suche“) - „Suche“ durch den Textmarkennamen ersetzen
  • Field:=„Typ“ - „Typ“ durch den Feldnamen in der Datenquelle ersetzen

das makro geht so vor:

  • du musst den serienbrief mit verbundener datenquelle offen haben
  • es stellt sicher, dass der erste datensatz aktiviert ist
  • es sucht den gewünschten datensatz
  • es schaltet die Feldanzeige um, sodass das ergebnis und nicht die Feldcodes angezeigt werden

=> es wird der Serienbrief NICHT GEMISCHT, d.h. du arbeitest weiterhin im Original-Serienbrief. Sollte aber reichen, wenn du das Dokument nur mal schnell drucken willst.

wenn das Makro funktioniert, kann man es recht leicht mit einem eigenen button in der Toolbar ablegen.

lg
erwin

Danke für die schnelle Antwort.

Aber das Makro wählt immer nur den ersten Datensatz aus.
An was könnte das liegen?

Gruß

Thomas

hi Thomas

kannst du bitte etwas genauer definieren, was du meinst? wird der erste datensatz der datenquelle angezeigt? oder der erste datensatz, der auf das kriterium zutrifft?

letzterer fall wäre nämlich beabsichtigt - diese lösung zeigt nur den ersten datensatz, der auf das kriterium zutrifft.

ansonsten sind wir wieder bei dem skipif-feld. wenn du mit „sehr gross“ tatsächlich die 2000 datensätze meinst, dann hast du noch nie eine sehr grosse datenbank gesehen (very large databases fangen laut oracle bei ca. einem terrabyte also tausend gigabyte an - infostand vor ca. 5 jahren!). ich kann mir nicht vorstellen, dass es für word ein gröberes problem ist, aus 2000 datensätzen die richtigen rauszufiltern.

bleibt noch die automation - die ist aber eh recht simpel: das kriterium steht in der textmarke, das skipif-feld greift auf die textmarke zu, der benutzer muss nur mehr auf den button zum abmischen des serienbriefs klicken. natürlich kann man mit makros noch etwas automatisieren. in diesem fall müsste der normale makrorekorder völlig reichen.

lg
erwin

Es wird immer nur der erste Datensatz angezeigt. Hab aber herausgefunden, dass das ein Fehler in Word2003 ist.
Wollt es dann mit einem SkipIf-Feld versuchen…
Hat aber auch nicht geklappt.

Könntest du mir vielleicht sagen wie ich das Feld benütze.

Danke

hi bart

ok, zum mitmeisseln:

  • angenommen, deine datenquelle hat die felder name, adresse und geschlecht

  • du hast einen serienbrief, der diese datenquelle verwendet.

  • du hast im serienbrief eine textmarke „filter“, die den wert „M“ hat

  • nun einfach am beginn des serienbriefs folgendes feld einfügen:

{skipif {mergefield geschlecht} = {filter}}

die geschwungenen klammernpaare erhältst du durch drücken der strg-f9-taste. wenn der text eingegeben ist, einfach alles markieren und das feld neu berechnen (mit f9). das feld wird dadurch unsichtbar, da es keinen anzeigewert hat. du kannst es wieder sichtbar machen, in dem du den bereich markierst, in dem das feld sein muss, und shift-f9 drückst.

nun einfach die normale serienbrief-funktion „seriendruck in neues dokument“ ausführen. es werden nur jene datensätze herangezogen, in denen das geschlecht auf „M“ steht. alle anderen werden ignoriert.

probiere es einfach aus - ist nicht so schwer. wenn du das prinzip mal kapiert hast, kannst du es ohne probleme für alle deine anwendungsfälle heranziehen.

lg
erwin