Januar 26, 2021, 18:48:25

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Ref Feldeingabe über UserForm

Begonnen von Volker Lenk, Juni 28, 2011, 10:19:20

⏪ vorheriges - nächstes ⏩

Volker Lenk

Hallo an ALLE !

Habe das Bestreben eine Worddatei zu vereinfachen, allerdings hapert es am VBA Code!
Wäre wahnsinnig lieb, wenn mir jemand Hilfestellung geben könnte. Auch über Links oder Hinweise bin ich sehr dankbar!

Ich habe in meinem Dokument (Word 2007) einige Ref - Felder eingefügt. Zur Vereinfachung der Eingabe, soll ein Formular dienen.

Bei meinem Suchen im Netz habe ich sogar ein Beispiel gefunden, allerdings erscheint ein Laufzeitfehler:5941

De verwendete Code des UserForm1 Bestätigungs Buttons ist folgender:

Private Sub CommandButton1_Click()
  Dim oStory As Range


  With ActiveDocument
     .FormFields("Nachname").Result = tbNachname.Text
     .FormFields("Firma").Result = tbFirma.Text
     
       ' update {REF} Felder
     For Each oStory In .StoryRanges
        oStory.Fields.Update
     Next oStory
  End With

  Unload Me
 UserForm2.Show
End Sub



------

Markiert wird im VBA Editorfenster :
.FormFields("Nachname").Result = tbNachname.Text

-----

Kann mir jemand helfen?

Der Code stammt von: w w w.office-loesung.de/ftopic119654_0_0_asc.php

Vielen Dank für jede Antwort und einen sonnigen Tag wünscht

lenky

DF6GL

Hallo,

und warum fragst Du nicht bei Office-Loesung nach..?


Wie heißt die Fehlermeldung?

Es ist hierbei nur zu mutmassen, dass es
1) ein Formfield mit Namen "Nachname" nicht gibt
2) ein Textfeld mit Namen "tbNachname" im Userform nicht gibt.


Lenk

Hallo DF6GL!

Zu Deiner Frage : da ich bisher hier registriert war und nicht in tausend Foren beitreten möchte. Hier gefällt es mir sehr gut! Der Umgang untereinander und die Menschen.
Leider muss ich als Gast schreiben, da ich das Passwort vergessen und sich die Mailadresse verändert hat. Warte auf neue Logindaten.

Zu Deinen Antworten. Die Ref Felder existieren (kann man die evtl falsch erstellen? Habe es über Textmarke definieren gemacht).

Fehlermeldung, das angforderte Element ist nicht in der Sammlung vorhanden.

Irgendwie findet Word diese Formfields nicht - keine Ahnung warum.......????
                               
Meine Ref Felder heißen Nachname und Firma
Mein UserForm1 hat Bezeichnungsfeld 1 mit Namen: Nachname (Caption: Nachname eigeben)
                                                       2 mit Namen: Firma        (             Firma  eigeben)


                              Textfelder           1 mit Namen: tbNachname
                                                        2 mit Namen: tbFirma

                              CommandButton1: mit den Nachfogenden Code:

Private Sub CommandButton1_Click()
  Dim oStory As Range


  With ActiveDocument
     .FormFields("Nachname").Result = tbNachname.Text
     .FormFields("Firma").Result = tbFirma.Text
     
       ' update {REF} Felder
     For Each oStory In .StoryRanges
        oStory.Fields.Update
     Next oStory
  End With

  Unload Me
 UserForm2.Show
End Sub

----
Private Sub tbFirma_Change()

End Sub
----
Private Sub tbNachname_Change()

End Sub
---

Hinweis: ein zweites Formular hab ich noch nicht gemacht. Beim durchlesen der Beschreibung ist mir aufgefallen, dass ich folgendes gar nicht gemacht habe:

Beispiel: Du hast zwei Textformularfelder im Formular mit Textmarke:
Nachname
Klasse
--> wo oder wie setze ich denn die Textmarke?

Besten Dank für Hilfe!

lg lenky

DF6GL

Hallo,


nun gut, ich denke nur, dass die Autoren dieses Codes besser um die Hintergründe ihrer Gedankengänge wissen...


Wie auch immer:

Formfields und Bookmarks sind unterschiedliche Sachen...  Vielleicht läuft da was durcheinander.


lenky

Hallo DF6GL, Hallo ALLESAMT!

Hab mich jetzt notgedrungen mal bei office angemeldet um des Rätsels Lösung zu finden.

Bisher konnte ich aber noch nichts weiter herausfinden außer folgenden neuen Code:

Private Sub CommandButton1_Click()
Dim rngStory As Range
Dim rngTextmarke As Range
Dim strNameTextmarke As String
strNameTextmarke = "Nachname"
Set rngTextmarke = ActiveDocument.Bookmarks(strNameTextmarke)
rngTextmarke.Text = tbNachname.Text
ActiveDocument.Bookmarks.Add Range:=rngTextmarke, Name:=strNameTextmarke

strNameTextmarke = "Firma"
Set rngTextmarke = ActiveDocument.Bookmarks(strNameTextmarke)
rngTextmarke.Text = tbFirma.Text
ActiveDocument.Bookmarks.Add Range:=rngTextmarke, Name:=strNameTextmarke


' update {REF} Felder
'nur nötig wenn sich andere Felder auf deine Textmarken Beziehen:
For Each rngStory In ActiveDocument.StoryRanges
rngStory.Fields.Update
Next

Unload Me

End Sub


---

leider jedoch auch noch mit Fehlermeldung:

Laufzeitfehler 13
Typ unverträglich

Der VBA Editor meckert dann in der 6ten Zeile bei (gelb markiert):

Set rngTextmarke = ActiveDocument.Bookmarks(strNameTextmarke)



Die Eingabe in tbNachname und tbFirma werden aber schon mal erkannt, da sie erscheinen, wenn ich den Mauszeiger drüberfahren lasse.

lg und schönen Abend lenky


DF6GL

Hallo,

entweder Du deklarierst "rngTextmarke"  als Bookmark oder Du weist der Range-Variablen auch einen Range zu:

Set rngTextmarke = ActiveDocument.Bookmarks(strNameTextmarke).Range


lenky

Hallo DF6GL!

Ja, wie Recht Du hast! Funktioniert so prima!

Mein Code lautet nun:

Private Sub OK_Click()
Dim rngStory As Range
Dim rngTextmarke As Range
Dim strNameTextmarke As String
strNameTextmarke = "Vorname"
Set rngTextmarke = ActiveDocument.Bookmarks(strNameTextmarke).Range
rngTextmarke.Text = tbVorname.Text
ActiveDocument.Bookmarks.Add Range:=rngTextmarke, Name:=strNameTextmarke

' update {REF} Felder
'nur nötig wenn sich andere Felder auf Textmarken Beziehen:
For Each rngStory In ActiveDocument.StoryRanges
rngStory.Fields.Update
Next

Unload Me

End Sub


-----

Soweit so gut!
Jetzt möchte ich meine Formulareingabe noch etwas optimieren. Und zwar soll in die Textboxen, der Value Wert eingelesen werden, welcher im Dokument bisher existiert.
Ich habe das Formular so eingerichtet, dass es beim start und per Button aufrufbar ist.

Toll, wäre es, wenn z.B der aktuell definierte Nachname eingelesen werden kann, so dass er unter Umständen wieder verwendbar wird.

Bisher funktioniert es so, aber ich muss jedesmal alle Felder ausfüllen, andernfalls wird ein leeres Feld zu einem nicht definierten Nachnamen, Vornamen etc..

Wäre schön, wenn es auch hierfür eine Lösung gibt.
Besten Dank im Voraus

lg lenky

DF6GL

Hallo,

wenn ich es recht interpretiere, solltest Du halt ein leeres Feld mit IsNull prüfen und entspr. reagieren...

lenky

Hallo!

Danke für Deine Antwort! Habe übernächste Woche etwas Urlaub und versuche mich dann mal in die Materie einzulesen. So kann ich leider noch nichts damit anfangen.
Werde dann das Dokument erst einmal so benutzen - klappt ja; ist nur nicht so kompfortabel.

lg und schönes Wochenende lenky