PDA

Vollständige Version anzeigen : Eingabeformular


Toni
09.11.2000, 23:02
Hallo,

kann mir jemand sagen, ob es Möglich ist, in Word ein Eingabeformular (so ähnlich wie Input-Box) zu generieren, um mehrer Variable abzufragen bzw. auswählen zu lassen. (z.B. Kombinationsbox)?

Vielen, vielen Dank für eure Antwort

Günther Kramer
10.11.2000, 08:44
Hallo Toni,

erstelle ein Makro und öffne im VBA-Fenster die VBA-Hilfe. Such hier nach dem Begriff: InputBox. Du findest eine ausführliche Erklärung über diesen Befehl.

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Toni
10.11.2000, 09:31
Hallo Günther,

vielen Dank für deine rasche Hilfe. Die InputBox kenne ich ganz gut. Ich will aber in einer Box mehrer Variable (nicht nur eine) abfragen. Geht das?

Danke!

Günther Kramer
10.11.2000, 09:38
Hallo Toni,

was verstehst Du unter einer Variable und was genau willst Du damit machen?

Toni
10.11.2000, 09:44
Hallo Günther,

Hier ein Beispiel:

Eingabe: Anrede, Name, Standardbetreff ....

Die Variablen werden dann im Dokument positioniert.

Günther Kramer
10.11.2000, 09:56
Hallo Toni,

das geht nicht mit einer Inputbox.
Hierzu mußt Du Dir eine Eingabemaske programmieren.

Ich habe Dir mal einen Codeauszug mitgepostet. Ich Du kommst Klar, wenn nicht sende ich Dir gerne die dot zu.

Für das Beispiel mußt Du ein Dokument mit entsprechenden Textmarken erstellen und den Code als Makro einfügen.


Dim Zeile1$, Zeile2$, Zeile3$, Zeile4$, Zeile5$, Zeile6$, Zeile7$, Zeile8$, Betreff$, Anrede$

Public Sub MAIN()
Dim DisplayHowTo
Dim Von$
Dim Abteilung$
Dim Telefon$
Dim Kurzzeichen$
Dim TextAbteilung$
Dim x
Dim sChangedDefaults
Zeile1$ = ""
Zeile2$ = ""
Zeile3$ = ""
Zeile4$ = ""
Zeile5$ = ""
Zeile6$ = ""
Zeile7$ = ""
Zeile8$ = ""
Betreff$ = ""
Anrede$ = ""
DisplayHowTo = 0
GetFaxInfo
GetFromDefaults:
Von$ = WordBasic.[GetProfileString$]("MS Word User", "Name")
Abteilung$ = WordBasic.[GetProfileString$]("MS Word User", "Department")
Telefon$ = WordBasic.[GetProfileString$]("MS Word User", "Phone")
Kurzzeichen$ = WordBasic.[GetProfileString$]("MS Word User", "Kz")
TextAbteilung$ = WordBasic.[GetProfileString$]("MS Word User", "GEText")


'--- Definiert das Benutzerdialogfeld ----
DefineDialog:
WordBasic.BeginDialog 790, 360, "Wordvorlage für Briefe"
WordBasic.GroupBox 10, 0, 770, 180, " Anschrift: "
WordBasic.Text 30, 20, 100, 13, "&1. Zeile:"
WordBasic.TextBox 160, 15, 600, 19, "Zeile1"
WordBasic.Text 30, 40, 100, 13, "&2. Zeile:"
WordBasic.TextBox 160, 35, 600, 19, "Zeile2"
WordBasic.Text 30, 60, 100, 13, "&3. Zeile:"
WordBasic.TextBox 160, 55, 600, 19, "Zeile3"
WordBasic.Text 30, 80, 100, 13, "&4. Zeile:"
WordBasic.TextBox 160, 75, 600, 19, "Zeile4"
WordBasic.Text 30, 100, 100, 13, "&5. Zeile:"
WordBasic.TextBox 160, 95, 600, 19, "Zeile5"
WordBasic.Text 30, 120, 100, 13, "&6. Zeile:"
WordBasic.TextBox 160, 115, 600, 19, "Zeile6"
WordBasic.Text 30, 140, 100, 13, "&7. Zeile:"
WordBasic.TextBox 160, 135, 600, 19, "Zeile7"
WordBasic.Text 30, 160, 100, 13, "&8. Zeile:"
WordBasic.TextBox 160, 155, 600, 19, "Zeile8"
WordBasic.GroupBox 550, 180, 230, 80, " Text " + Chr(34) + "Bereich/Abteilung" + Chr(34) + " "
WordBasic.OptionGroup "TextAbteilung"
WordBasic.OptionButton 570, 200, 143, 16, "nicht d&rucken"
WordBasic.OptionButton 570, 215, 176, 16, "&Bereich drucken"
WordBasic.OptionButton 570, 230, 176, 16, "&Abteilung drucken"
WordBasic.GroupBox 10, 180, 520, 80, " von: "
WordBasic.Text 30, 200, 100, 13, "&Abteilung:"
WordBasic.TextBox 160, 195, 350, 19, "Abteilung"
WordBasic.Text 30, 220, 100, 13, "&Name:"
WordBasic.TextBox 160, 215, 350, 19, "From"
WordBasic.Text 30, 240, 100, 13, "Te&lefon:"
WordBasic.TextBox 160, 235, 200, 19, "Telefon"
WordBasic.Text 380, 240, 60, 13, "&Kurzz.:"
WordBasic.TextBox 460, 235, 50, 19, "Kurzzeichen"
WordBasic.GroupBox 10, 260, 770, 60, ""
WordBasic.Text 30, 280, 100, 13, "&Betreff:"
WordBasic.TextBox 160, 275, 600, 19, "Subject"
WordBasic.Text 30, 300, 100, 13, "&Anrede:"
WordBasic.TextBox 160, 295, 600, 19, "Anrede"
WordBasic.OKButton 10, 330, 120, 21
WordBasic.PushButton 340, 330, 120, 21, "Stan&dard..."
WordBasic.CancelButton 660, 330, 120, 21
WordBasic.EndDialog
Dim dlg As Object: Set dlg = WordBasic.CurValues.UserDialog
dlg.From = Von$
dlg.Abteilung = Abteilung$
dlg.Telefon = Telefon$
dlg.Kurzzeichen = Kurzzeichen$
dlg.TextAbteilung = WordBasic.Val(TextAbteilung$)
dlg.Zeile1 = Zeile1$
dlg.Zeile2 = Zeile2$
dlg.Zeile3 = Zeile3$
dlg.Zeile4 = Zeile4$
dlg.Zeile5 = Zeile5$
dlg.Zeile6 = Zeile6$
dlg.Zeile7 = Zeile7$
dlg.Zeile8 = Zeile8$
dlg.Subject = Betreff$
dlg.Anrede = Anrede$

If x = 1 Then
dlg.From = Von$
dlg.Abteilung = Abteilung$
dlg.Telefon = Telefon$
dlg.Kurzzeichen = Kurzzeichen$
dlg.TextAbteilung = WordBasic.Val(TextAbteilung$)
End If

On Error GoTo -1: On Error GoTo Bye
x = WordBasic.Dialog.UserDialog(dlg)
If x = 1 Then
Zeile1$ = dlg.Zeile1
Zeile2$ = dlg.Zeile2
Zeile3$ = dlg.Zeile3
Zeile4$ = dlg.Zeile4
Zeile5$ = dlg.Zeile5
Zeile6$ = dlg.Zeile6
Zeile7$ = dlg.Zeile7
Zeile8$ = dlg.Zeile8
Von$ = dlg.From
Abteilung$ = dlg.Abteilung
Telefon$ = dlg.Telefon
Kurzzeichen$ = dlg.Kurzzeichen
TextAbteilung$ = Str(dlg.TextAbteilung)
sChangedDefaults = WordBasic.Call("StandardEinst.fDefaults")
GetFaxInfo
If sChangedDefaults Then
GoTo GetFromDefaults
Else
GoTo DefineDialog
End If
ElseIf x = 0 Then
GoTo Bye
End If


'--- Fügt die Angaben in die Titelseite ein -------------------------------
WordBasic.WW7_EditGoTo "Zeile_1"
WordBasic.WW2_Insert dlg.Zeile1
WordBasic.WW7_EditGoTo "Zeile_2"
WordBasic.WW2_Insert dlg.Zeile2
WordBasic.WW7_EditGoTo "Zeile_3"
WordBasic.WW2_Insert dlg.Zeile3
WordBasic.WW7_EditGoTo "Zeile_4"
WordBasic.WW2_Insert dlg.Zeile4
WordBasic.WW7_EditGoTo "Zeile_5"
WordBasic.WW2_Insert dlg.Zeile5
WordBasic.WW7_EditGoTo "Zeile_6"
WordBasic.WW2_Insert dlg.Zeile6
WordBasic.WW7_EditGoTo "Zeile_7"
WordBasic.WW2_Insert dlg.Zeile7
WordBasic.WW7_EditGoTo "Zeile_8"
WordBasic.WW2_Insert dlg.Zeile8
WordBasic.WW7_EditGoTo "Geschäftsbereich"
If dlg.TextAbteilung = 1 Then
WordBasic.WW2_Insert "Bereich"
End If
If dlg.TextAbteilung = 2 Then
WordBasic.WW2_Insert "Abteilung"
End If

WordBasic.WW7_EditGoTo "Abteilung"
WordBasic.WW2_Insert dlg.Abteilung
WordBasic.WW7_EditGoTo "Von"
WordBasic.WW2_Insert dlg.From
WordBasic.WW7_EditGoTo "Telefon"
WordBasic.WW2_Insert dlg.Telefon
WordBasic.WW7_EditGoTo "KZ"
WordBasic.WW2_Insert dlg.Kurzzeichen
WordBasic.WW7_EditGoTo "Betreff"
WordBasic.WW2_Insert dlg.Subject
WordBasic.WW7_EditGoTo "Anrede"
WordBasic.WW2_Insert dlg.Anrede
WordBasic.WW7_EditGoTo "text"
Bye:
End Sub

Private Sub GetFaxInfo()
Dim Misc$
Dim FirstPipe
Dim ToName$
Dim SecondPipe
Dim ToCompany$
Dim ThirdPipe
Dim ToFax$
Dim FourthPipe
Dim ToAdress$
Dim Pages$
Dim DisplayHowTo
On Error GoTo -1: On Error GoTo Abort
Misc$ = WordBasic.[GetProfileString$]("MS Word User", "Misc")
FirstPipe = InStr(Misc$, "|")
ToName$ = WordBasic.[Left$](Misc$, FirstPipe - 1)
SecondPipe = InStr(FirstPipe + 1, Misc$, "|")
ToCompany$ = Mid(Misc$, FirstPipe + 1, SecondPipe - FirstPipe - 1)
ThirdPipe = InStr(SecondPipe + 1, Misc$, "|")
ToFax$ = Mid(Misc$, SecondPipe + 1, ThirdPipe - SecondPipe - 1)
FourthPipe = InStr(ThirdPipe + 1, Misc$, "|")
ToAdress$ = Mid(Misc$, ThirdPipe + 1, FourthPipe - ThirdPipe - 1)
Pages$ = WordBasic.[Right$](Misc$, Len(Misc$) - FourthPipe)
WordBasic.SetProfileString "MS Word User", "Misc", ""
DisplayHowTo = 1
Abort:
End Sub

Toni
10.11.2000, 11:05
Hallo Günther,

tausend Dank!
Ich werde den Code in nächster Zeit ausprobieren. Ich denke das löst mein Problem.

Bis bald

LutzHaase
18.11.2000, 22:34
Hallo Toni,
hast du WORD97 oder WORD2000, denke mal ja. Drücke da mal die Tasten (ALT) + (F11) (oder Menü - Extras - Makro - Visual-Basic-Editor)

Unter dem Menü-Punkt einfügen steht UserForm. Die wählst du. Dann öffnet sich ein Fenster mit einer grauen punktierten Fläche, Dein Eingabeformular und ein kleines Fenster mit verschieden Bildchen (Steuerelemente: Textfeld, Commandbutton, ...). Ziehe eines der Bildchen auf dein Eingabeformular. Da steht es jetzt in einer Standardgröße, die deinen Wünschen angepaßt werden kann. Über das Eigenschaftsfenster kannst du den Labelfeldern die Bezeichner eingeben, Textfelder für mehrzeilig erklären ....
Damit hast du erst mal was fürs Auge, das was der Nutzer sieht. Jetzt zu deinem Kopfzerbrechen: Die Eingabe muß ja in deinen Text und vorher evtl. auf Fehler geprüft werden. Hier mal ein kurzes Test-Listening für eine einfache Eingabemaske. Du brauchst zum Testen eine userform, die heißt Userform1 und kann im Eigenschaftfenser umbenannt werden, 2 Commandbuttons (bitte den Standardnamen lassen) und 2 Textfelder wenn du willst noch 2 Labelfelder dazu.

Option explicit ' sinnvoll, verlangt Definition aller Variablen vor Nutzung im Modul
Private Sub CommandButton2_Click()
UserForm1.hide 'macht die Maske nur unsichtbar
unload me 'Beendet die Maske und räumt den Speicher dafür frei
End Sub

Private Sub CommandButton1_Click()
'Textbox2 wird auf eine Eingabe geprüft
If TextBox2.Text = "" Then
MsgBox "Eine Eingabe bitte"
TextBox2.SetFocus
Exit Sub
End If
Selection.typetext textbox1.text
Selection.typetext textbox2.text
end sub

'Soll ein Wert vorgegeben werden muß die Userform initialisiert werden. Mit

Private Sub UserForm_Initialize()
textbox1.Text = "Hallo"
CommandButton1.Caption = "Weiter"
End Sub

wird in Textbox1 schon mal "Hallo" Eingetragen und commandbutton1 trägt die Aufschrift "Weiter", egal was du vorher veranlaßt hattest. mit drücken von (F5) kanns du die Minimaske mal genießen. Der Vorteil gegenüber Günther Kramer ist, du mußt dich nicht mit Zahlen (Ecke oben links, Ecke unten rechts) rumprügeln, wo gehört welches Feld hin. Das wird visual (optisch) erledigt, soweit ich weiß klappt das aber erst ab WORD97, die Versionen davor siehe bei Günther oder probieren.

Mit der Combobox oder dem Listenfeld kann eine Reihe von festen Werten angeboten werden, die dann beliebig verarbeitet werden können.

Beinahe untergegangen: Aufruf des Formulars
Da du das ganze irgendwo einbauen willst rufe das Formular aus einem Makro mit

Userform1.show

auf. Wenn Die Userform umbenannt wurde, z.B. in AdressEingabe, dann nehme

AdressEingabe.Show


Wenn du noch direkt Fragen zu den Dialogfeldern hast, Mail mich an.

Na dann schönen Abend noch
Lutz Haase

[Dieser Beitrag wurde von LutzHaase am 18.11.2000 editiert.]
Habe die spitzen Klammern bei den Tastenbezeichnungen gegen runde getauscht. Die Angaben waren einfach weg.


[Dieser Beitrag wurde von LutzHaase am 20.11.2000 editiert.]

Toni
19.11.2000, 18:10
Hallo Lutz,

ich bin überwältigt! Super Geschichte die ich nicht wusste.

Vielen, vielen Dank!

acubra
01.02.2005, 19:16
Hallo

Aufgrund des Codes von Günther hab' ich z.Zt. ne neue Aufgabe gefunden: (Wieder) mehr im VBA coden.

Gibt es eine Möglichkeit, die "Eingabemaske" grafisch zu "schreiben" oder sind die Positionierungen "auf gut Glück" vorzehmen?

Besten Dank für die Antwort(en)