MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Word
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 15.05.2019, 14:51   #1
haderleinst49789
Neuer Benutzer
Neuer Benutzer
Standard VBA - Auswahl in Dropdown-List in VBA-Variable speichern

Hallo,
ich habe eine Dropdown-Liste in Word.
Nun die simple Frage:
Wenn ich in der Liste den Single-Eintrag z.B. 19025 selektiere, wie kann ich diese Auswahl in einer Variablen speichern, mit der ich anschließend weiter arbeiten kann?

z.B: Nummer = Dropdown1.Text

Nummer = meine Variable
Dropdown1 = Dropdown Name

Vielen Dank für die Rückmeldung.
haderleinst49789 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.05.2019, 18:49   #2
Gerhard H
MOF Guru
MOF Guru
Standard

Auch hier, lieber Haderlein,

kommts drauf an, welches Steuerelement du verwendest. Da sich meine Glaskugel in deinem letzten Beitrag offenbar nicht geirrt hat, nehm ich im Folgenden ein Inhaltssteuerelement an. Außerdem hängt es natürlich auch noch davon ab, was "weiter arbeiten" bedeuten soll.

Das folgende Beispielmakro tritt in Kraft, wenn das angeklickte Steuerelement (CC) wieder verlassen wird. Es liest die gewählte Zahl aus diesem Inhaltssteuerelement aus und fügt sie in ein anderes Inhaltssteuerelement (z.B. Rich-Text) mit dem Tag "Ziel" ein. Einmal als erweiterten Text, einmal als berechnete Zahl. Damit letzteres funktioniert, wurde als Datentyp Variant gewählt.
Code:

Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
Dim textWert As String, zahlenWert As Variant

'Fall 1: Nur den Text weiterverwenden:
'textWert = CC.Range.Text
'ActiveDocument.SelectContentControlsByTag("Ziel").Item(1).Range.Text = "Du hast " & textWert & " gewählt"

'Fall 2: Mit dem gewählten Wert, sofern er als Zahl verstanden werden kann, ist erst rechnen
zahlenWert = CC.Range.Text * 2
ActiveDocument.SelectContentControlsByTag("Ziel").Item(1).Range.Text = zahlenWert
End Sub
Bedenke, dass ein OnExit-Makro auf jedes beliebige Inhalts-Steuerelement anspringt. Das ist meistens nicht gewünscht, weshalb man gern als erstes eine Bedingung einfügt, z.B.
If CC.Tag <> "Auswahl" then Exit Sub

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 07:10   #3
haderleinst49789
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard,

danke erneut für die Rückmeldung.
Es handelt sich um ein Dropdown-Inhaltssteuerelement.

Kurz zu meinem Plan:
In der Word-File kann ich nun (dank deiner Hilfe), verschiedene Projektnummern auswählen (19025,19026 ...)
Diese Projektnummern stehen in der Excel-File.

Nun ist mein Plan, dass ich in der Excelfile die entsprechende Zeile finde, in der die Projektnummer steht.
In dieser Zeile in unterschiedlichen Spalten stehen weitere Daten wie z.B: Kundenname, Anschrift, Zahlungsziele etc.

Den z.B. Kundennamen möchte ich wiederum auch in Variablespeichern und dann meinen Textmarken im Word-File eintragen lassen.

Zusammengefasst: Ich habe viele Daten, die automatisch ausgefüllt werden, sobald man nur die Projektnummer bestimmt.

Wäre klasse, wenn du hierzu sagen könntest,
wie der Code für das einspeichern der Projektnummer in eine Variable aussieht (also nicht in ein weiteres Steuerelement).

Vielen Dank
haderleinst49789 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 08:04   #4
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Haderlein,

"wie der Code für das einspeichern der Projektnummer in eine Variable aussieht (also nicht in ein weiteres Steuerelement)"

Ob du die eingespeicherte Projektnummer später in Textmarken oder in weitere Steuerelemente ausgibst, ist ja egal: Du brauchst beide Verfahren, und beide waren in dem Codeschnipsel enthalten.

Nach deiner ausführlicheren Erklärung sehe ich aber, dass das gesamte Beispiel, aus dem der vorige Schnipsel stammt, genau das tut, was du möchtest:

Die gesamte Excel-Liste wird hier in eine zweidimensionale Array Variable eingespeichert. Die erste "Spalte" dieses Arrays wird in das Dropdown eingelesen; die restlichen, zum gewählten Dropdownwert gehörigen Werte, werden aus dieser Variablen ausgelesen und in weitere Inhaltssteuerelemente übergeben (wenn es Textmarken sind, bedarf es nur kleiner Änderungen im Code).

Weitere Erklärungen findest du im angehängten Word-Dokument. Zum Testen beide Dateien in den selben Ordner stecken. Wenn du Schwierigkeiten bei der Umsetzung hast, wäre es hilfreich, wenn du zwei Musterdokumente hochlädst: Eine Excel-Tabelle mit der Struktur deiner Daten und zwei oder drei fingierte Datensätze und dein Word-Dokument, dem man ansieht, wo die ausgelesenen Werte aus der Exceltabelle hin müssen.
Angehängte Dateien
Dateityp: xlsx mitarbeiterliste.xlsx (12,3 KB, 1x aufgerufen)
Dateityp: dotm BriefMitCombobox.dotm (52,2 KB, 1x aufgerufen)

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 10:29   #5
haderleinst49789
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo nochmal,
vielen Dank für die Rückmeldung.

Im Anhang habe ich mal die beiden Dateien (Word+Excel) hinzugefügt.

Mit dem ersten Button "Projektnummern einlesen" möchte ich alle Projektnummern aus der Excel-File (Spalte 2) einlesen.

Dann möchte ich die Auswahl treffen z.B. "S16-003", drücke auf den Knopf und die restlichen Daten für Test1, Firmenname1 etc. sollen an die entsprechende Position in der Word-FIle eingetragen werden.

Ob dies mit Textmarken oder weiteren Inhaltssteuerelementen erfolgt, ist offen.
Am besten sollte es so gestaltet werden, dass man manuell noch Eintragungen vornehmen kann.

Wäre klasse, wenn du hier helfen könntest.
Vielen Dank.
Angehängte Dateien
Dateityp: xlsx Baustellenadressen.xlsx (11,2 KB, 2x aufgerufen)
Dateityp: docm Standardangebot_Material_28.01.2019_dt.docm (147,6 KB, 1x aufgerufen)
haderleinst49789 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 11:37   #6
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Haderlein,

"Mit dem ersten Button "Projektnummern einlesen" möchte ich alle Projektnummern aus der Excel-File (Spalte 2) einlesen."

Möchtest du wirklich eine Schaltfläche zum Einlesen der Projektnummern im Dokument haben? Die wird dir ja dann auch mitgedruckt. In meinem Lösungsvorschlag braucht es keine Schaltfläche, sondern das Einlesen geschieht automatisch, sobald jemand die Dokumentvorlage doppelklickt, um sich ein neues Dokument zu erstellen.

Möchtest du wirklich, dass nach jeder Auswahl einer Projektnummer erst auf die Schaltfläche "Daten anpassen" geklickt werden muss, um die restlichen Daten einzulesen? Das wird in meiner Variante automatisch erledigt, sobald im Dropdown eine Projektnummer ausgewählt und das Dropdown verlassen wurde.

Ich empfehle dir, die Musterlösung weiter zu verfolgen. Mit "wenn du Schwierigkeiten bei der Umsetzung hast" hatte ich übrigens gemeint, dass du es versuchst und erklärst, an welcher Stelle genau du nicht weiterkommst.
Aber ich hab den Eindruck, dass du das noch gar nicht probiert hast. Also fang mal damit an, dass du...
  • dein Dokument als Dokumentvorlage speicherst (dotm)
  • In der Vorlage dem Dropdown einen Tag verpasst
  • an den gelb unterlegten Stellen Text-Inhaltssteuerelemente einfügst und ihnen ebenfalls Tags gibst
  • die Makros aus dem Musterdokument in deine Dokumentvorlage reinzukopieren und anzupassen (Namen der Tags, Name der Arrayvariable aus dem Modul1, Spaltennummer 2 in der Zeile .DropdownListEntries.Add projektdaten(i, 2).
Danach gibt selbstverständlich weitere Hilfe.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 12:57   #7
haderleinst49789
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo nochmal,

ich habe nun meine Version gebaut (siehe Anhang).
Sowohl bei deiner Version als auch nun bei meiner Version
kommt die Fehlermeldung "Typen unverträglichkeit Fehler 13:

With ActiveDocument
.SelectContentControlsByTag("Projektname").Item(1).Range.Text = Nummer(i, 3)
End With

Entspricht bei deiner Version:
With ActiveDocument
.SelectContentControlsByTag("Mitarbeiter").Item(1).Range.Text = mitarbeiterdaten(i, 2)
....


Das Einlesen funktioniert einwandtfrei. Das Starten des Programms, sobald aus der Auswahlliste geklickt wird ebenfalls.
Es hängt aktuell nur noch an dieser Fehlermeldung.

Wäre klasse, wenn du mir hoffentlich das letzte Mal helfen kannst.

Danke dir.
Angehängte Dateien
Dateityp: xlsx Baustellenadressen.xlsx (11,2 KB, 1x aufgerufen)
Dateityp: docm Standardangebot_Material_28.01.2019_dt_Test.docm (145,9 KB, 2x aufgerufen)
haderleinst49789 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 14:39   #8
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Haderlein,

sieht ja schon viel besser aus. Aber du hast in deiner Exceltabelle in der ersten Zeile verbundene Zellen drin. Sowas macht immer Ärger beim Zeilen- oder Spaltenzählen. Ich hab die entfernt. Im Makro Document_New() musste ich dann in der Zeile
Code:

Nummer = .Range(.Cells(3, 1), .Cells(letztezeile, letztespalte))
die Zeilennummer auf den Wert 2 ändern, weil der erste Datensatz jetzt einheitlich in Zeile 2 steht. Bei mir funktionierts jetzt.

Im Anhang die bereinigte Excel-Tabelle.

Übrigens springt die Prozedur Sub Document_New nur an, wenn das Original eine Dokument-Vorlage ist. Da du ein normales Dokument (docm) hast, musst du, wenn du den Automatismus beim Öffnen des Dokuments wünscht, die Kopfzeile auf Sub Document_Open() ändern. Noch besser auf Private Sub Document_Open, damit niemand das Makro über Entwicklertools > Makros sehen kann.
Angehängte Dateien
Dateityp: xlsx Baustellenadressen.xlsx (10,9 KB, 0x aufgerufen)

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.