Word-VBA If Then Bedingung?
Hey,
ich arbeite aktuell an einem Word Dokument, in dem ich mit ActiveX-Steuerelementen arbeite. Habe bereits zwei Dropdownlisten eingefügt und diese über VBA voneinander abhängig gemacht.
Jetzt würde ich gerne bei der Auswahl eines Dropdownelementes den dazu passenden Text in mein Dokument anzeigt bekommen. In Word über Strg+F9 habe ich das bereits hinbekommen, da es aber am Ende einige Dropdownelemente werden, hätte ich das gerne in VBA sortiert angezeigt.
Bsp.
Dropdowliste zeigt "A" an, dann kommt als Text "Banane"
Dropdownliste zeigt "B" an, dann kommt als Text "Apfel"
Über Strg+F9 sah das in etwa folgendermaßen aus:
{IF {REF Benchmarkdropdownliste}="A" "Banane"}...
Ich bin leider absoluter VBA Neuling und kann mit den ganzen VBA Begriffen, wie Sub und Co. nichts anfangen :D Außerdem wäre eine weitere Frage, wie ich definiere, wo dann der IF then Teil im Dokument angezeigt wird?!
Vielleicht kann mir hier ja Jemand helfen :D
LG Kathrin
1 Antwort
Hallo,
Ich bin leider absoluter VBA Neuling und kann mit den ganzen VBA Begriffen, wie Sub und Co. nichts anfangen.
Ohne dass das in irgendeiner Art und Weise negativ gemeint ist, jeder fängt ja mal irgendwann an, aber dann wird es mit Erklärungen schwierig. Ein paar Grundkenntnisse sollten schon vorhanden sein.
Als ich damals mit wirklich keinerlei Vorkenntnissen angefangen habe, mir VBA für Word selbst beizubringen, war mir dieses Buch von Bernd Held eine unglaubliche Hilfestellung und ist es bis heute. Aber an das Buch ist heute nur noch schwer ranzukommen.
Du hast geschrieben:
(...), da es aber am Ende einige Dropdownelemente werden, hätte ich das gerne in VBA sortiert angezeigt.
Ich verstehe ehrlich gesagt nicht ganz, wie du das meinst. Was genau möchtest du denn erreichen? Was willst du sortieren? Die Ergebnisse der Dropdownfelder?
Außerdem wäre eine weitere Frage, wie ich definiere, wo dann der IF then Teil im Dokument angezeigt wird?!
Wenn man ein Ergebnis in ein Worddokument schreiben möchte, kann man das auf verschiedene Weisen machen. Man könnte ein Active-X-Steuerelement oder Formularfeld nehmen und dort das Ergebnis einer IF-Bedingung reinschreiben, man könnte eine Textmarke nehmen usw. Letztlich muss man nur irgendeinen Bereich (in VBA: „Range“) im Dokument definieren, wo man das Ergebnis dann platzieren möchte.
Als VBA-Code könnte das so aussehen:
Sub Obstauswahl()
Dim strObst As String
strObst = ActiveDocument.SelectContentControlsByTitle("Obst").Item(1).Range.Text
With ActiveDocument.SelectContentControlsByTitle("Text").Item(1).Range
If strObst = "A" Then
.Text = "Apfel"
ElseIf strObst = "B" Then
.Text = "Banane"
ElseIf strObst = "C" Then
.Text = "Birne"
Else
MsgBox "Auswahl nicht vorhanden.", vbOKOnly + vbInformation, "Hinweis"
End If
End With
End Sub
Hier wird geprüft, ob im Dropdownfeld Obst das Item A, B oder C angewählt wurde, und dann im Formular(text)feld namens Text Apfel, Banane oder Birne reingeschrieben.
Wurde weder A noch B noch C ausgewählt, wird statt dessen die Hinweismeldung „Auswahl nicht vorhanden.“ angezeigt.
Würde man jetzt für die Textausgabe kein Textfeld-Steuerlement, sondern eine Textmarke namens Text nehmen, könnte das in VBA so aussehen:
Sub Obstauswahl()
Dim strObst As String
strObst = ActiveDocument.SelectContentControlsByTitle("Obst").Item(1).Range.Text
With ActiveDocument.Bookmarks("Text").Range
If strObst = "A" Then
.Text = "Apfel"
ElseIf strObst = "B" Then
.Text = "Banane"
ElseIf strObst = "C" Then
.Text = "Birne"
Else
MsgBox "Auswahl nicht vorhanden.", vbOKOnly + vbInformation, "Hinweis"
End If
End With
End Sub
Wenn du mir genau sagst, was du willst, kann ich dir den Code dafür möglicherweise schreiben und hier reinstellen.
Gruß, BerchGerch
PS: Manchmal – wie auch im obigen Beispiel – kann man anstatt einer IF-THEN-Anweisung eine SELECT-CASE-Anweisung nehmen. Wenn das geht, würde ich die Select-Case-Anweisung vorziehen, da diese schneller durchläuft als die If-Then-Anweisung.
Als Select-Case-Anweisung würde das obige erste Beispiel übrigens so aussehen:
Sub Obstauswahl ()
Dim strObst As String
strObst = ActiveDocument.SelectContentControlsByTitle("Obst").Item(1).Range.Text
With ActiveDocument.SelectContentControlsByTitle("Text").Item(1).Range
Select Case strObst
Case "A"
.Text = "Apfel"
Case "B"
.Text = "Banane"
Case "C"
.Text = "Birne"
Case Else
MsgBox "Auswahl nicht vorhanden.", vbOKOnly + vbInformation, "Hinweis"
End Select
End With
End Sub
Danke Dir erstmal. Habe dir eine private Nachricht dazu geschrieben :D