VBA Word Formularfelder auswerten und korrigieren

Hallo,

ich möchte unter dem Namen MLP (siehe Multilernprofi.de) Lehrern die Möglichkeit geben, Ihre Aufgaben in Word zu erstellen. Das Programm selbst soll Freeware sein. Auf der Internetseite bezieht sich der Preis auf die CD mit den Lektionen.
Die Antworten gibt der Lehrer in doppelten Klammern ein
5 + 5 = ((10)) oder mit Hilfe des Formulardesigners.

Nach Öffnen der Datei werden die Antworten durch Textformularfelder ersetzt. Der Schüler gibt seine Antworten ein und lässt diese auf Richtigkeit kontrollieren.
Er hat mehrere Möglichkeiten (siehe im „Quelltext“ unter sub MLP_Hilfe()

Wenn das tatsächlich läuft, soll es auch auf Kontrollkästchen-Formularfelder und Dropdown-Formularfelder erweitert werden.
Zur leichteren Eingabe für den Lehrer sollten noch Markierungen der Antwort wie ((K:x)) für Kontrollkästchen bzw. ((D:1|5|10)) für Dropdown statt dem Anlegen von Formularfeldern möglich sein.
Das Textformularfeld wäre entsprechend ((10)) bzw. ((T:10)) oder (mit Alternativantworten ((10|zehn)) bzw. ((T:10|zehn)) - aber das ist erst einmal Zukunftsmusik.

Wer kann mir helfen?
Im Sourcecode müssten die Felder bzw. das Formular entsprechend geschützt bzw. der Schutz aufgehoben werden.
Bitte noch nicht loslegen sondern erst einmal mailen an …
So weit ich gekommen bin habe ich alles vorbereitet:
Ein Sourcecode von WordAutor (= einem ähnlichen Programm in VBA) liegt vor.

Hier nun meine bescheidenen Anfänge:

Sub AutoExec()
’ soll bei Öffnen der Datei ausgeführt werden - macht es aber nicht
’ Makro erstellt am 02.04.2008 von test
’ Lehrer stellt Makrosicherheit auf hoch, da sonst diese
’ Schülerversion startet!
Rem *** In den Vollbildmodus wechseln
ActiveWindow.View.FullScreen = True
Call MLP_Hilfe
Rem *** Wird das Dokument zum ersten Mal geöffnet sollen alle
Rem *** Formularfelder gelöscht werden
Call MLP_loeschen
Rem *** nun wird AutoExec selbst gelöscht, damit es beim nächsten
Rem *** öffnen der Datei nicht mehr aktiv ist
’ ActiveDocument.Unprotect
’ ActiveDocument.FormFields(„AutoExec“).Delete
’ Selection.Delete Unit:=1, what:=wdCharacter
’ ActiveDocument.Protect wdAllowOnlyFormFields, True
End Sub

Sub MLP_Hilfe()

’ Tastenkombination alt+ h: h_ilfe Makro
’ Makro aufgezeichnet am 31.03.2008 von test
Call MsgBox _
(„Alle Lücken sollen ausgefüllt werden!“ & vbCrLf & _
" " & vbCrLf & „Man kann“ & vbCrLf & _
„> zum Vollbild wechseln“ & vbCrLf & _
„> sich den nächsten Buchstaben anzeigen lassen“ & vbCrLf & _
„> eine Kontrolle der Eingaben anfordern, sowie“ & vbCrLf & _
„> alle Eingaben löschen und“ & vbCrLf & _
„> alle Lösungen anzeigen lassen.“, _
vbOKOnly, „Multilernprofi“)
End Sub

Sub MLP_kontrollieren()
’ Vergleicht die Eingaben mit dem Vorgabetext
’ hier: Textfeld (richtig gelöste Textfelder haben grünen
’ Hintergrund und brauchen nicht kontrolliert zu werden

’ For Each lfdNummer In ActiveDocument.FormFields.Text
’ If ActiveDocument.FormFields.Text.Background green Then
’ selektiere Antwortmöglichkeiten (BRD|Deutschland|Germany)
’ if ltrim(rtrim(Antwort)) = eine ltrim(rtrim(Antwortmöglichkeit))
’ ActiveDocument.FormFields.Text.Background = green
’ Schreibschutz für dieses Feld
’ else
’ lösche Text ab erstem falschen Zeichen
’ end if
’ end if
’ Next
Call MsgBox(„Alle richtigen Antworten wurden übernommen.“ _
, vbOKOnly, „Multilernprofi Kontrolle:“)
’ später kommt hier noch die Auswertung hin
End Sub

Sub MLP_loeschen()

’ Nicht durch Freigeben und erneutes Schützen des Formulars löschen,
’ weil dann die Vorgabewerte (= Musterantworten) angezeigt werden
If MsgBox(„Möchten Sie wirklich alle Antworten löschen?“ _
, vbQuestion + vbYesNo, „Multilernprofi Löschen:“) = vbYes Then
’ For Each lfdNummer In ActiveDocument.FormFields.Text
’ ActiveDocument.FormFields.Text = „“
’ ActiveDocument.FormFields.Text.Background = grey
’ next
End Sub

Sub MLP_naechsterBuchstabe()

’ Tastenkombination alt+ n: n_ächsten richtigen Buchstaben anzeigen
’ Makro aufgezeichnet am 31.03.2008 von test
’ Gilt nur für Textfelder!
If .FormFields(„T“).Disabled Then
Beep
Else
x = 1: richtigerText = „“
Do While Mid(Loesung, x, 1) = Mid(Inhalt(Formularfeld), x, 1)
richtigerText = richtigerText + Mid(Loesung, x, 1)
Loop
’ nächsten richtigen Buchstaben hinzufügen
If (Len(richtigerText))

Hi Mainzer,

von der Aufgabenstellung grenzt das schon sehr an Auftragsprogrammierung *find*, aber kenne mich in Word-Vba nicht so aus, vielleicht verwirrt mich da nur daß ich Word-Code nicht so flüssig lesen kann wie Excel-Code, weil mir vieles unbekannt ist auf den ersten Blick.

Wie auch immer, könntest du dein komplexes Anliegen nicht zerlegen und einzelne Problematiken dann ggfs. einzeln und gezielt nachfragen.

Also eine Beispieldatei langsam „wachsen“ lassen.

Und wenn nötig kannst du ja immer diese Datei hochladen , bei www.hostarea.de o.ä. und den Link mit zu deiner aktuellen Anfrage posten.
Das erleichert dann das Nachstelllen der Problematik, dient aber einzig als Zusatzhilfe, das Wesentliche sollte im Beitrag stehen, also die Anfrage so stellen daß sie auch ohne Beispieldatei beantwortet werden kann falls es eine bekannte Lösung gibt.

Vom privat mailen halte ich wenig, viele Augen sehen mehr als 4 und es widerspricht m.E. dem Wissensaustauschgedanken von w-w-w

Übrigens, fällt mir grad auf, da es später „überall“ laufen soll müßte es auf Word97 o.ä. entwickelt, zumindest gelegentlich getestet werden, dazu fallen mir „Bedingte Kompilierung“ und „Verweise überprüfen/setzen“ ein.

Gruß
Reinhard

Dir Reinhard,

die Hauptarbeit habe ich bereits erledigt. An dem Problem arbeite ich übrigens schon ca. 20 Jahre (echt).
Nun denn. Es fehlen noch ein paar Kleinigkeiten, für dich ich allerdings einen VBA-Profi brauche. Ich komme einfach nicht weiter.

Das mit dem Zerlegen ist eine gute Idee. Ich stelle also erst ein „kleines Problem“: „Dateitext in ein Textformularfeld als Vorgabetext umwandeln“ hinein.

Ich teste es mit Word2000. Ein älteres Word habe ich nicht.
Danke für deine Tipps.

Hans-Jürgen

Hallo Hans-Jürgen,

die Hauptarbeit habe ich bereits erledigt. An dem Problem
arbeite ich übrigens schon ca. 20 Jahre (echt).

glaub ich dir locker, vor 5 (oder sinds inzwischen 7 Jahre *grübel*) bekam ich eine Exceltabelle, wußte gar nicht was ich damit soll, wie ich da was mache.

Ein Jahr später hatte ich kapiert (mit vielen Mühen wenn man halt Null Ahnung hat) was die Tabelle macht.

Dann kam ich auf die Idee sie zu verbessern, klappte auch alles im Lauf der Zeit bis auf 2 Winzigkeiten.

Auf der Suche nach einer Lösung für diese 2 Winzigkeiten bin ich zwar in Excel und Excel-vba immer besser geworden, aber gelöst habe ich sie nicht die Mistdinger:smile:

Von daher kann ich in ca. 13 Jahren auch mit Recht sagen, an dem Problem arbeite ich schon seit 20 Jahren…

Nun denn. Es fehlen noch ein paar Kleinigkeiten, für dich ich
allerdings einen VBA-Profi brauche. Ich komme einfach nicht
weiter.

Ich bin kein Profi, wäre aber deine Problematik in Excel könnte ich dir helfen.
In Word bin ich so fit daß alle hier die Hände über den Kopf zusammenschlagen würden wenn sie sehen wie ich in Word wenn ich mal mal einen Brief schreibe *lächel*

Das mit dem Zerlegen ist eine gute Idee.

Ist keine Idee von mir, sind Erfahrungswerte aus Foren.
Wenn du ankommst und willst 20 Dinge gleichzeitig, egal jetzt ob du dazuschreibst geplant usw, ist egal, da machen viele, auch ich erstmal deinen Beitrag zu und gehen zur nächsten Anfrage.

Wenn da wohlgefällig steht, ich kann da aus einem Textfeld die Eingabe nicht auswerten (nur mal so als fingiertes Beispiel) dann ist das übersichtlich und viele versuchen dir zu helfen die Eingabe in ein Textfeld weiterzuverabeiten.

Aufgrund dieser Lösungen kannst du die dann testen,einbauen.

Wenn das geklärt ist kannst du ja neu anfragen mit ich möchte daß die Textfelder blau leuchten wenn die Datei geöffnet wird.
Und dies gut erklären im Beitrag, ggfs. eine Beispieldatei hochladen falls deine Erklärung mangelhaft ist
(*gg* gut erklären können die wenigsten und wenn sie nachfragen wegen einem Problem was grad ihren Kopf ausfüllt, ist die Erklärung schauderhaft, ich weiß das, bin genauso)

Ich stelle also erst
ein „kleines Problem“: „Dateitext in ein Textformularfeld als
Vorgabetext umwandeln“ hinein.

Jepp, hätte ich die Ahnung in Word wie in Excel hätte ich dir dazu schon sagen können
a) k.A. wie das gehen soll, m.E. geht es nicht
b) es geht so: …
c) so gehtst nicht du mußt dieses Problem so angehen …
d) irgendwas :smile:

Ich teste es mit Word2000. Ein älteres Word habe ich nicht.

Kein Problem *denk* Office97 ist vom Grundgedanken her, wenn man programmiert daß es „überall“ laufen muß, mal abgesehen von Zuständen daß in Hongkong ein Isländer auf einer spanischen Tastatur mit einer arabischen Office)7 Version arbeitet, (ich beneide die Jungs wahrlich nicht die weltweit Programmieren müssen) so m.E. der unterste Level den du einhalten solltest.

In Kurzfassung des letzten Absatzes, es wird sich hier immer jemand finden den du bitten kannst mal deine Doc in Word97 zu testen *sicher bin*

Danke für deine Tipps.

Sorry, mehr als Tips hab ich halt nicht mangels Wordwissen :frowning:

Sorry2, tagsüber bin ich wortkarger, aber grad jetzt nicht, ob das mit den 5 Bieren zutun hat die ich vorhin genossen habe um mal abzuschalten, weiß und glaub ich nicht, hat sicher andere Ursachen, el nino, der sack in china der umfällt, irgendsowas *sicherglaub*

Gruß
Reinhard