# Über Dropdown Schnellbaustein laden



## Spelmann (12. November 2010)

Hallo,

kennt in Word 2007 jemand einen Weg abhängig von der Auswahl einer Dropdownliste bestimmte Schnellbausteine einzufügen?

Vielen Dank.


----------



## tombe (15. November 2010)

Hi,

keine Ahnung ob es das ist was du dir vorgestellt hast, aber ich hätte da vielleicht was.

Im Dokument setzt du den Courser an die Stelle an der die Autotext-Einträge erscheinen sollen.
Dann gehst du im Menü auf Einfügen -> Feld und wählst dort aus der Kategorie "Verknüpfungen und Verweise" den Eintrag "AutoTextList" aus.
In das Feld in dem dann der Feldbefehl erscheint gibst du in doppelten Anführungszeichen den Text ein der im Dokument erscheinen soll, z.B. "AutoText Liste" und klickst auf OK. Wenn gewünscht kannst du zusätzlich noch den Schalter "\t" (ohne Anführungszeichen) und dahinter einen Hilfetext angeben (wobei der Hilfetext wieder in Anführungszeichen stehen muss).

Wenn du nun im Dokument das Feld mit der rechten Maustaste anklickst, erscheint eine Liste mit all deinen gespeicherten AutoText Bausteinen.


----------



## Spelmann (16. November 2010)

Hi tombe,

ist leider nicht ganz das was ich gesucht habe, aber trotzdem interessant. Danke.
In Word 2007 wurden ja wie ich es verstehe die AutoText Einträge von den Schnellbausteinen verdrängt.

Ich dachte nun über eine Dropdownliste aus den Steuerelementen auch komplexe Schnellbausteine mit vormatierten Tabellen und einigem Pipapo dynamisch laden zu können.

Denn immerhin findet man in den Dropdown Eigenschaften neben dem Anzeigenamen auch die Möglichkeit hier einen Wert zuzuordnen. Ich dachte diesen für die Ansteuerung von REF Feldern nutzen zu können.

Nach dem Model: Wenn in Liste *Kirsche *gewählt dann erscheint in Feld 1 *rot *und in Feld 2 *süss*.

Aber is wohl nicht.
Hab auch nach ausführlicher Recherche nix gefunden.


----------



## tombe (16. November 2010)

Mal sehen ob es da nicht doch noch eine andere Lösung gibt.

Willst du die Liste direkt im Dokument platzieren oder kommt auch eine VBA Lösung in Frage wo die Liste in einer UserForm ist?

Und sollen wirklich die Textbausteine wie zum Beispiel "Mit freundlichen Grüßen" usw. verwendet werden oder willst du für diese Aufgabe extra solche Kombinationen wie oben verwenden?

Gruß Thomas


----------



## Spelmann (16. November 2010)

Ich beschreib mal worum es geht.
Ich möchte eine Wordvorlage *.dotx erstellen. Diese Vorlage ist in den statischen Teilen ein Geschäftsbrief.

Darüber hinaus enthält die Vorlage eine Dropdownliste (gewissermaßen als Betreffzeile) die das Dokument nach entsprechender Auswahl als Rechnung, als Angebot, als Mahnung oder Anfrage usw. ausweist. Insgesamt 7 Anforderungen. Die Dropdownliste ist ein Inhaltssteuerlement aus der Registerkarte Entwicklertools.

Je nachdem welcher dieser Einträge gewählt wurde sollen nun, in dem bis jetzt sonst leeren Dokument, unterschiedlich formatierte Inhalte geladen werden.
Eine Tabelle mit offenen Posten einer Mahnung sieht dann anders aus als eine Angebotsliste zum Beispiel.

Im weitesten Sinne gibts das ja sogar als eigenständiges Steuerlement, das es mir möglich macht ganze Schnellbausteine anzuwählen. Aber das Ganze händelt sich recht klobig.

Mit VBA und Makros hab ich noch nix gemacht. Interessiert mich aber.
Um so mehr, wenns eine Lösung bereit hält.

Kurz gesagt, statt je einer Vorlage für jeden Zweck soll der Nutzer nur eine Vorlage im Vorlagenverzeichnis haben, die er per Mausklick zum Objekt seiner Begierde umwandeln kann.

Wie ich das als Webanwendung programmieren müsste weiß ich. Aber Word ist mir da oft noch ein Buch mit sieben Siegeln.


----------



## tombe (16. November 2010)

Also ich hätte da vielleicht was für dich.

- Du erstellst eine neue Vorlage (ohne Inhalt) und wechselst in den VBA-Editor.
- Dort erstellst du eine UserForm, im Beispiel hat diese den Namen "UserForm1".
- In die Form platzierst du ein Listenfeld und gibst ihm den Namen "ComboBox1"
- Dann kopierst du den Code so wie er ist in die jeweilige Prozedur



```
Private Sub ComboBox1_Change()
    Selection.InsertFile FileName:=ComboBox1.Value & ".dotx", Range _
    :="", ConfirmConversions:=False, Link:=False, Attachment:=False
End Sub


Private Sub UserForm_Initialize()
    UserForm1.ComboBox1.AddItem "Angebot"
    UserForm1.ComboBox1.AddItem "Auftragsbestätigung"
    UserForm1.ComboBox1.AddItem "Bestellung"
    UserForm1.ComboBox1.AddItem "Gutschrift"
    UserForm1.ComboBox1.AddItem "Lieferschein"
    UserForm1.ComboBox1.AddItem "Mahnung"
    UserForm1.ComboBox1.AddItem "Rechnung"
End Sub
```

Damit die Form gleich beim Öffnen dieses Dokuments sichtbar wird, kannst du ebenfalls im VBA-Editor noch beim Dokument selber folgenden Code eingeben:


```
Private Sub Document_Open()
    UserForm1.Show
End Sub
```

In diesem Beispiel gibt es jetzt in der Liste zur Auswahl "Angebot", "Auftragsbestätigung", "Bestellung, "Gutschrift", "Lieferschein", "Mahnung" und "Rechnung" (damit sind es nun auch 7).

Wird nun ein Eintrag in der Liste angeklickt wird im Change Ereignis aus diesem Wert der Dateiname gebildet "Angebot.dotx", "Auftragsbestätigung.dotx" usw.

Du musst somit für jeden Eintrag in der Liste eine entsprechende Vorlage erstellen und ihr den Namen geben der in der Liste als Auswahl steht.

Hoffe mal das du damit das gewünschte Ziel erreichst.

Gruß Thomas


----------



## Spelmann (16. November 2010)

Hey das kling gut!
Werd ich ausprobieren. Vielen Dank!


----------



## tombe (16. November 2010)

Wenn es damit klappt und du/ihr im Netzwerk tätig seid, dann kannst du ja für alle die selbe Vorlage erstellen und irgendwo auf dem Server ablegen.

In diesem Fall einfach noch den Pfad mit angeben:


```
Selection.InsertFile FileName:="X:\Server\Dokumente\Vorlagen\" & ComboBox1.Value & ".dotx"
```

Den Pfad natürlich entsprechend anpassen.

Du hast mit dieser Lösung dann zwar doch mehrere Vorlagen. Doch wenn sich daran mal was ändert sind die Änderungen sicher so wesentlich schneller erledigt als wenn man das alles in VB Code packen würde.


----------



## Spelmann (16. November 2010)

Jetzt gibts nur noch eine kleine Hürde.

Word unterscheidet ja zwei Prozesse. Ich kann die Vorlagendatei selbst öffnen und bearbeiten oder ein auf ihr basierendes Dokument erstellen.

Wenn ich die Vorlagendatei Vorlagen.dotm die den VB Code enthält öffne, bekomme ich eine Sicherheitswarnung die mich darauf hinweist, das die Makros deaktiviert sind. Ich kann dann auf _"Diesen Inhalt aktivieren"_ klicken und alles funktioniert.

Speichere ich meine Vorlagendatei und die Zieldateien aber im Vorlagenverzeichnis und versuche dann über Neu > Meine Vorlagen > Vorlagen.dotm auf Basis dieser Vorlage eine Datei zu erstellen, wird das Skript wohl nicht ausgeführt. Jedenfalls bekomme ich die Kombobox nicht angezeigt.

Habe ich was vergessen?

NACHTRAG:
Wahrscheinlich habe ich die Anweisung 
	
	
	



```
Private Sub Document_Open()
    UserForm1.Show
End Sub
```
 falsch eingesetzt.


----------



## tombe (17. November 2010)

Sorry, mein Fehler.

Bei einer Vorlage darf die Anweisung zum Anzeigen der UserForm nicht in die Open-Prozedur sondern muss in die New-Prozedur geschrieben werden:


```
Private Sub Document_New()
    UserForm1.Show
End Sub

Private Sub Document_Open()
'hier muss es raus und da oben muss es rein.
'dann hat es bei mir geklappt
End Sub
```

*NACHTRAG:*


```
Private Sub ComboBox1_Change()
    Selection.InsertFile FileName:=ComboBox1.Value & ".dotx", Range _
    :="", ConfirmConversions:=False, Link:=False, Attachment:=False
'Diese Zeile sollte noch rein. Sonst wird die Form nach dem Erstellen des neuen Dokuments nicht ausgeblendet.
    Unload UserForm1
End Sub
```


----------



## Spelmann (17. November 2010)

Super. Funktioniert!
Ich hab jetzt alle Zielvorlagen in einen eigenen Ordner gepackt so dass der Kunde nur noch die Mastervorlage sieht und wählen kann.

Großartige Hilfe von Dir.
Vielen Dank

Noch ein Tipp für andere. Zwischenzeitlich behauptet meine Mastervorlage die zu ladende Datei existiere nicht wenn ich jene gerade bearbeitet habe. Kurz mal alle Explorer Fenster schließen dann funktionierts auch wieder. (trat bei mir nur auf dem 64bit Rechner auf)


----------



## Spelmann (18. November 2010)

Jetzt gerate ich doch nochmal in Not. Bis jetzt habe ich das ganze Paket nur ausserhalb des Vorlagenverzeichnisses getestet. Jetzt habe ich die Dateien aber in die Wordvorlagen gepackt:

```
C:\Users\User\AppData\Roaming\Microsoft\Templates
```

Wenn ich nun in Word über _Neu > Meine Vorlagen_ die Hauptvorlage öffne und versuche via Dropdown eine der Zielvorlagen zu wählen behauptet Word, die Datei wäre nicht zu finden.

*Laufzeitfehler 5174*

Noch eine Idee?


----------



## tombe (18. November 2010)

Hast du die Stelle wo der Dateiname gebildet wird wie im Beitrag 8 geschrieben geändert?


```
Private Sub ComboBox1_Change()
'den Pfad zu den Dateien als Variable
pfad = "C:\Users\User\AppData\Roaming\Microsoft\Templates\"
'und die Variable hier mit einbauen
    Selection.InsertFile FileName:=pfad & ComboBox1.Value & ".dotx", Range _
    :="", ConfirmConversions:=False, Link:=False, Attachment:=False
'Diese Zeile sollte noch rein. Sonst wird die Form nach dem Erstellen des neuen Dokuments nicht ausgeblendet.
    Unload UserForm1
End Sub
```

So muss es doch wohl gehen?

Gruß Thomas


*NACHTRAG:*
In Word  kann mit "ActiveDocument.AttachedTemplate.Path" der aktuelle Pfad für die Vorlagen ermittelt werden (kann ja bei jedem User anders sein). Damit könntest du das dann noch besser lösen.
Wobei hier dann noch ein "\" zwischen Pfad und Dateinmane muss.


----------



## Spelmann (18. November 2010)

Jaaa. So is natürlich elegant!
	
	
	



```
Private Sub ComboBox1_Change()
    pfad = ActiveDocument.AttachedTemplate.Path
    Selection.InsertFile FileName:=pfad & "\alleWHS\" & ComboBox1.Value & ".dotx", Range _
    :="", ConfirmConversions:=False, Link:=False, Attachment:=False
    Unload UserForm1
End Sub
```
unter _alleWHS_ befinden sich meine Zielvorlagen.

Das mit dem absoluten Pfad hatte ich erst übersehen. Ich hatte mir zwar schon gedacht, dass es was mit einer Pfadangabe sein muss, bin dann aber falsch ran gegangen.

So läufts jetzt.
Ich bin jetzt recht neugierig geworden auf VB und schau mir mal ein paar Bücher an. Kann man bestimmt ne Menge spannender Sachen mit machen.

Vielen Dank


----------

