Dropdown Pflichtfeld

Hallo Leute,

ich hoffe, dass ich das richtige Brett erwischt habe, ansonsten bitte ich die Admins den Beitrag umzuhängen.

Ich möchte einer Gruppe von Leuten ein Word-Dokument zur Verfügung stellen. Dieses Word-Formular enthält die Dropdownfelder
Dropdown1 bis Dropdown15.

Befüllen möchte ich die Dropdownlisten, wenn die Kunden das Formular öffnen. Dann Sollen noch alle Dropdownfelder „blanko“ sein.
Nachdem ausfüllen ist unter dem Formular ein Button, auf dessen Klick eine Vollständigkeitsprüfung durchgefüht wird und ggf. Eine MsgBox erscheint, die auf nicht ausgefüllte Felder hinweist.

Kann mir jemand dabei helfen ?

Gruß Christian

Hi,

ich würde anders vorgehen.

  • Die Dropdown-Listen werden schon ‚ab Werk‘ befüllt. Das erste Feld bleibt leer.
  • Neben jedem Dropdown ist ein Textfeld.
  • Jedes Dropdown hat ein Makro, das beim Beenden aktiv wird und den ausgewählten Wert in das benachbarte Textfeld überträgt.

Das hätte den Vorteil, daß direkt bei Verlassen des Dropdowns geprüft werden kann, ob eine Angabe gemacht ist. Sonst müßtest Du alle Dropdowsn abklappern. In VBA kannst Du dann eine static-Variable definieren, die festhält, ob noch leere Dropdowns vorhanden sind.

Du brauchst sogar nur ein einziges Makro, denn an den Namen des aufrufenden Formularfelds kommst Du bei geschütztem Dokument mit

Selection.FormFields(1).Name

HTH.

M.

Hi Markus,

Das hat dann aber die Auswirkung, dass ein Dropdown einen gewissen Platz für seienen Text braucht, und das Textfeld nochmals den ausgewählten Text wiederholt an seinem Platz.

Ist es außerdem nicht so, dass ich mit der static-Variablen nicht auf das entsprechende Dd-Feld in einer MsgBox hinweisen kann ? - oder hab ich da etwas in den falschen Hals bekommen ?

Gruß Christian

Hi,

das Makro kann nach Übernahme des Dropdown-Ergebnis’ das Dropdown wieder auf den leeren Eintrag zurücksetzen. Damit gäbe es keine doppelte Anzeige.

Das Makro würde beim jedem (!) Verlassen eines Dropdown aktiviert. Wenn beim Verlassen des Dropdown noch der erste Eintrag (der leere) aktiv ist, könnte der Benutzer eine entsprechende Meldung („Sie haben nix ausgewählt“) erhalten.

Dann ist aber noch nicht klar, was mit den anderen vierzehn Dropdowns ist. Daher die Idee mit der statischen Variable.

  • Zum Programmstart könnte sie 15 (weil 15 Dropdowns) sein.
  • Wird ein Dropdown ausgefüllt, zieht das Makro eins ab.
  • Wird der leere Eintrag übernommen, zählt das Makro eins dazu (aber nur bis 15).
  • Solange diese Variable nicht null ist, käme der Benutzer nicht aus der Bearbeitung heraus.

Mir scheint eine Schaltfläche „Fertig“ zwar anfangs einfacher zu sein. Aber was passiert, wenn der Benutzer wiild in der Datei herumklickt?
Mir persönlich ist es lieber, den Benutzer direkt beim einzelnen Dropdown zu einer sinnvollen Eingabe zu bringen anstatt am Ende fünfzehn Dropdowns zu untersuchen.
Ersteres hat auch den Vorteil, daß die Anzahl der Dropdowns nicht beschränkt ist (den Maximalwert der statischen Variable setzt man einfach durch eine Konstante am Anfang des Codes oder ermittelt ihn sogar dynamisch durch Zählen der Dropdown-Felder).

Anders ausgedrückt: ein verständiger Benutzer wird Deine Datei so benutzen, wie Du es geplant hast, weil er mit Dir kooperieren will.
Ein nichtverständiger wird das nicht wollen und deshalb wild herumklicken, um irgendwann letztlich Dir die Schuld zuzuschieben, daß seine Meldung nicht klappen konnte. Diesen Fall will ich von vornherein unterbinden.

HTH.

M.

Hi Markus,

das Makro kann nach Übernahme des Dropdown-Ergebnis’ das
Dropdown wieder auf den leeren Eintrag zurücksetzen. Damit
gäbe es keine doppelte Anzeige.

verstehe !

Dann ist aber noch nicht klar, was mit den anderen vierzehn
Dropdowns ist. Daher die Idee mit der statischen Variable.

  • Zum Programmstart könnte sie 15 (weil 15 Dropdowns) sein.
  • Wird ein Dropdown ausgefüllt, zieht das Makro eins ab.
  • Wird der leere Eintrag übernommen, zählt das Makro eins dazu
    (aber nur bis 15).
  • Solange diese Variable nicht null ist, käme der Benutzer
    nicht aus der Bearbeitung heraus.

sehr schlau !

Mir scheint eine Schaltfläche „Fertig“ zwar anfangs einfacher
zu sein. Aber was passiert, wenn der Benutzer wiild in der
Datei herumklickt?
Mir persönlich ist es lieber, den Benutzer direkt beim
einzelnen Dropdown zu einer sinnvollen Eingabe zu bringen
anstatt am Ende fünfzehn Dropdowns zu untersuchen.

hab ich noch nicht gemacht

Anders ausgedrückt: ein verständiger Benutzer wird Deine Datei
so benutzen, wie Du es geplant hast, weil er mit Dir
kooperieren will.
Ein nichtverständiger wird das nicht wollen und deshalb wild
herumklicken, um irgendwann letztlich Dir die Schuld
zuzuschieben, daß seine Meldung nicht klappen konnte. Diesen
Fall will ich von vornherein unterbinden.

Du scheinst in einem modernen Großunternehmen zu arbeiten und ähnliche Erfahrungen zu machen wie ich.

-gratuliere !

Aber wie muß das aussehen, ich bin noch nicht sooo fitt was die VBA-Programmierung angeht. vor allem interressiert mich, wie Du das Makro starten läßt, wenn der User das Dropdownfeld verläßt.

Steuerst Du das über das DdFeld berechnen beim verlassen ? - oder über den VBA-Programm-Code ?

Gruß Christian

Moin, Christian,

Steuerst Du das über das DdFeld berechnen beim verlassen ? -
oder über den VBA-Programm-Code ?

jedes Control ist ohne Dein Zutun mit Ereignissen verbunden, deren Namen siehst Du im Codefenster, wenn Du das linke, mit „Allgemein“ vorbelegte Dropdown öffnest, zB Commandbutton1, Combobox1, Listbox1 usw (oder halt Namen, die Du vergeben hast). Das rechte Dropdown zeigt die Ereignisse, mit denen das jeweilige Control verbunden ist. Wenn da eins ausgewählt wird, erstellt der Editor eine leere Sub mit dem passenden Namen, zB Combobox1_Change.

Fleisch kommt auf die Knochen, indem Du das passende Ereignis auswählst und in die erzeugte Sub das hineinschreibst, was bei dem Ereignis ablaufen soll. In Deinem Fall also vielleicht (ich kann’s nicht beurteilen) das Ereignis LostFocus.

Gruß Ralf

Hi,

wir reden von Dropdowns aus der Formular-Symbolleiste! Dort startet man ein Makro, indem man die Eigenschaften des Dropdown aufruft.

Im Dialog gibt es (bei Word 2003, für andere Versionen mußt Du suchen) links unten einen Kasten mit dem Namen: „Makro ausführen bei“. Dort wählt man „Beenden“.

Die Liste zeigt nur Makros, die bereits existieren. Deshalb muß man einen Prozedurrumpf mit dem Makronamen haben (also ins Modul schreiben: Sub Yadda…End Sub). Damit kann man schon in der Testphase die Praktikabilität seines Programmes testen.

M.

Moin, M.,

wir reden von Dropdowns aus der Formular-Symbolleiste!

so kann ich nicht arbeiten :smile:))

Dort startet man ein Makro, indem man die Eigenschaften des
Dropdown aufruft.

Ich verstehe nur Bahnhof - Eigenschaften aufrufen?

Im Dialog gibt es (bei Word 2003, für andere Versionen mußt Du
suchen) links unten einen Kasten mit dem Namen: „Makro
ausführen bei“. Dort wählt man „Beenden“.

Dazu müsste ich den Kasten erstmal finden - vielleicht erst ab 2003, ich fahre noch Office 2000 :frowning:

Die Liste zeigt nur Makros, die bereits existieren. Deshalb
muß man einen Prozedurrumpf mit dem Makronamen haben (also ins
Modul schreiben: Sub Yadda…End Sub).
Damit kann man schon in
der Testphase die Praktikabilität seines Programmes testen.

Mal abgesehen davon, dass ich die Knöpfe / die Kästen nicht finde: Gibt es denn eine Methode, die ein Testen während der Entwicklung verhindert?

Gruß Ralf

Hallo Ralf,

Dort startet man ein Makro, indem man die Eigenschaften des
Dropdown aufruft.

Ich verstehe nur Bahnhof - Eigenschaften aufrufen?

Rechtsklick auf das Dropdownformularfeld—Eigenschaften

Im Dialog gibt es (bei Word 2003, für andere Versionen mußt Du
suchen) links unten einen Kasten mit dem Namen: „Makro
ausführen bei“. Dort wählt man „Beenden“.

Dazu müsste ich den Kasten erstmal finden - vielleicht erst ab
2003, ich fahre noch Office 2000 :frowning:

Nach Klick auf o.g. Eigenschaften erscheint dieses bei Word2000:

http://www.image-load.net/page.php?type=jpg&f=796b71…

Gibt es denn eine Methode, die ein Testen während der
Entwicklung verhindert?

? Warum?

Gruß
Reinhard

Hallo Ralf,

Ich verstehe nur Bahnhof - Eigenschaften aufrufen?

Rechtsklick auf das Dropdownformularfeld—Eigenschaften

nicht bei mir:
http://www.drambeldier.de/wer-weiss-was/excel/Dropdo…

*weglach* ähm, sorry, hüstel meinte natürlich *anlächel* :smile:)
es geht um WORD, dort gibts im Gegensatz zu Excel ein so genanntes Dropdown-Formularfeld.

Gibt es denn eine Methode, die ein Testen während der
Entwicklung verhindert?

? Warum?

Warum was? Markus betont, dass mit seiner Methode ein Testen
während der
Entwicklung möglich ist, und ich will wissen, bei welcher das
nicht gehen soll.

Axo, gute Frage, soll mal Markus plaudern wie er das meint.

Gruß
Reinhard

Hi,

ich zitiere aus dem Ursprungs-Post:

Ich möchte einer Gruppe von Leuten ein Word-Dokument zur Verfügung stellen. Dieses Word-Formular enthält die Dropdownfelder Dropdown1 bis Dropdown15.

Damit ist klar: wir sind in Word - und nicht in Drambeldier-Excel bei Dropdowns aus der Steuerelement-Toolbox.

Zu jedem Dokument in Word gehört eine Dokumentvorlage (zu erreichen über ActiveDocument.AttachedTemplate). Wenn in dieser Dokumentvorlage ein Makro definiert ist (und sei es nur durch den Prozedurrumpf), kann man es auch dem Formular-Dropdown zuweisen. Dankenswerterweise hat Reinhard den Dialog abgebildet und hochgeladen.

Wenn man also Probleme hat, denkt man erstmal nach (aber bitte lange!), schreibt dann Code in die Sub-Prozedur, die man dem Formularfeld zugewiesen hat, schützt das Formular und probiert es aus.

Alles weitere ergibt sich durch den allfälligen ‚Versuch und Irrtum‘.

M.

Moin, Reinhard,

es geht um WORD, dort gibts im Gegensatz zu Excel ein so
genanntes Dropdown-Formularfeld.

vertan, vertan, sprach der Hahn… Das gibt es aber auch in Excel, und da frage ich mich doch, warum die beiden dann unterschiedlich zu behandeln sind. Na ja, mir reicht die Steuerelemente-Toolbox.

Gruß Ralf

es geht um WORD, dort gibts im Gegensatz zu Excel ein so
genanntes Dropdown-Formularfeld.

vertan, vertan, sprach der Hahn… Das gibt es aber auch in
Excel, und da frage ich mich doch, warum die beiden dann
unterschiedlich zu behandeln sind. Na ja, mir reicht die
Steuerelemente-Toolbox.

Gruß Ralf,

in Excel gib es kein Dropdownfeld, (oder mehrere die man so bezeichnen könnte) deshalb frage ich grundsätzlich erstmal nach um welches Feld es denn geht.

Oftmals ist damit Daten–Gültigkeit, also ein Gültigkeitsfeld gemeint.
Aber natürlich kann es auch ein Listenfeld sein, ein Kombinationsfeld, beides je entweder aus Formular- oder Steuerelementtoolboxsymbolleiste, das sind schon mal 5 die man als Dropdown bezeichnen kann.

Und alle sind unterschiedlich zu behandeln.
Deshalb frage ich erstmal nach bevor ich für die Tonne arbeite.

Früher (also zur Zeit von Excel 5.0. u.ä.) gabs nur Formularfelder,
(Excel97 ist Excel 8.0, Excel2000 ist Excel 9.0).
Die ActiveX-Elemente, also die aus der Steuerelementtoolbox kamen erst mit Excel97 *glaub*
Bei Excel 5.0 bzw. .0 war die makrosprache (ich glaub es war noch kein VBA) noch in Deutsch und stand in Blättern, also in Zellen.

klick mal mit Rechts unten auf den Blattnamen, dann Einfügen, da siehst du Excel4.0 makrovorlage, das war/ist sowas.

Und an gleicher Stelle Exce 5.0 Dialog, das sit sowas wo dies Formularfelder benutzt wurden.

Wie man dann mit beidem umgeht entzieht sich meiner Kenntnis.

Jetzt, auch in Excel 2007, gibt es beide. Und das die die gleichen Symbole haben und den gleichen deutschen Symbolnamen machts m.E. nicht leichter.
Aus Usern rauszukitzeln welche Elemente sie denn nun benutzt haben wird da schwieriger, da es dort keine Symbolleisten mehr gibt.

Am Code, falls es einen gibt *seufz*, kann man es ggfs. erkennen:

private Sub CommandButton1_Click()

= ActiveX Steuerelement, Code muß im Klassenmodul der Tabelle stehen.

Sub Schaltfläche1_bei_Klick() ’ oder so ähnlich

= Befehlsschaltfläche aus „Formular“, Code gehört in allgemeines Modul.

Und in Word, naja, da ist’s so ähnlich, aber natürlich annerster :smile:)

Einzig positive in dem Wirrwarr ist, die ActiveX-Elemente in Word und Excel müßten identisch sein, ergo auch die Userformbestückungen, denn da kann man keie Formularfelder darauf plazieren sondern nur ActiveXx-Elemente.

Gruß
Reinhard

Hallo Marcus,

das war ja sehr interressant, wer sich da alles einschaltet.

Ich hab allerding so ein bischen den Überblick verloren, von wem jetzt was kam.

Also ich hab ein Sub erzeugt und in der Eigenschaft des Dropdown1 unter Ereignis die erzeugte Prozedur angesteuert.
In der Prozedur habe ich dann folgendes verfasst:
If Dropdown1.Value = „“ Then MsgBox („Sie haben etwas vergessen !“):smiley:ropdown1 Set Focus End If

Ist das korrekt ?

Nein! „Fehler 424 Objekt erforderlich“

kannst Du bitte helfen ?

Christian

Moin, Christian,

Dropdown1 Set Focus

ist das mit copy&paste eingefügt worden?

 Dropdown1.SetFocus

Gruß Ralf

jjjjupppppp !

Grundlagen Steuerelemente Folge 0001
Hallo Ralf,

so langsam wird’s duster, auf Sohle 13 war ich noch nie.

nimm ne hellere Taschenlampe oder frag gezielt nach :smile:

in Excel gib es kein Dropdownfeld

was heißt dann das, was Du auf
http://www.drambeldier.de/wer-weiss-was/excel/Dropdo…
siehst?

Da könnte ich nur aufgrund der Pfeilgröße raten, aber auch nicht 100 %ig, watt weiß denn ich wie du da getrickst hast.
Könnten ja auch zwei Textboxen sein und ein Bild von einem Pfeil *gg*

Es wird ein Kombinationsfeld sein. Woher, k.A.
Schau mal bitte hier:

http://www.image-load.net/page.php?type=jpg&f=51b6bd…

Gruß
Reinhard

Hi Christian,

bei mir sieht das so aus:

Sub Test()
Dim caller As FormField
Set caller = ActiveDocument.FormFields(Selection.FormFields(1).Name)
 If caller.DropDown.Value = 0 Then
 MsgBox "Bitte auswählen!", , caller.Name
 ActiveDocument.FormFields(caller.Name).Select
 End If
End Sub

Wenn im aufrufenden Dropdown-Feld nix ausgewählt ist (der erste Eintrag: .Value=0) dabb zeige einen Hinweis.

m.

Hallo Marcus,

Habe gemacht wie mir gesagt. Funktioniert aber nicht !

Mein Code:
Sub Test()
Dim caller As FormField
Set caller = ActiveDocument.FormFields(Selection.FormFields(1).Name)
If caller.DropDown.Value = 0 Then
MsgBox „Bitte auswählen!“, , caller.Name
ActiveDocument.FormFields(caller.Name).Select
End If
End Sub

Mein Dropdownfeld:

Dropdownliste: 0, Ja !, Nein !
Feldeinstellungen: Textmarke: Dropdown1
Beim Verlassen berechnen - Ja
Dropdown zulassen - Ja
Makro ausführen bei
Ereignis Test

alles richtig ?

C.