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 17.11.2018, 21:04   #1
Julius123
Neuer Benutzer
Neuer Benutzer
Standard VBA - VBA - Ansprechpartner per Dropdown inkl. Zusatzinfos

Guten Tag,

ich erstelle momentan eine Angebotsvorlage und stehe vor folgendem Problem:

Es gibt pro Projekt zwei Ansprechpartner, diese möchte ich via Dropdown-Feld auswählen und die Informationen "Telefonnummer" und "E-Mail" sollen anschließend automatisch angezeigt werden.

Ich bin leider sehr unerfahren im Umgang mit VBA.

Für den ersten Ansprechpartner habe ich eine Lösung aus dem Forum verwendet, die auch super funktioniert.

Für den zweiten Ansprechpartner habe ich die Lösung einfach erneut eingefügt und die Bezeichnungen der Felder minimal abgeändert, um es zu testen. Ich habe einfach ein "n" an das Wortende hinzugefügt.


Option Explicit

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim Ansprechpartner As String
Dim textfeld As ContentControl
Dim tel As String, mail As String

If ContentControl.Tag <> "Ansprechpartner" Then Exit Sub

Ansprechpartner = ContentControl.Range.Text

With ActiveDocument

Select Case Ansprechpartner
Case Is = "Max"
tel = "123"
mail = "max@firma.com"

Case Is = "Hans"
tel = "456"
mail = "hans@firma.com"


Case Else
MsgBox "Dieser Mitarbeiter wurde noch nicht angelegt"
Exit Sub

End Select

For Each textfeld In .ContentControls
If textfeld.Tag = "Telefon" Then textfeld.Range.Text = tel

If textfeld.Tag = "E-mail" Then textfeld.Range.Text = mail
Next textfeld
End With
End Sub

Private Sub Document_ContentControlOnExit1(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim Ansprechpartner1 As String
Dim textfeld As ContentControl
Dim teln As String, mailn As String

If ContentControl.Tag <> "Ansprechpartnern" Then Exit Sub

Ansprechpartner1 = ContentControl.Range.Text

With ActiveDocument

Select Case Ansprechpartner1
Case Is = "Max"
teln = "123"
mailn = "max@firma.com"

Case Is = "Hans"
teln = "456"
mailn = "hans@firma.com"


Case Else
MsgBox "Dieser Mitarbeiter wurde noch nicht angelegt"
Exit Sub

End Select

For Each textfeld In .ContentControls
If textfeld.Tag = "Telefonn" Then textfeld.Range.Text = teln

If textfeld.Tag = "E-mailn" Then textfeld.Range.Text = mailn
Next textfeld
End With
End Sub


Ist es nicht möglich die gleiche Funktion zweimal zu verwenden, allerdings mit unterschiedlichen Bezeichnungen?

Ich bin über jede Hilfe dankbar!

Mit freundlichen Grüßen

Julius
Julius123 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2018, 23:20   #2
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Julius,

ich glaub, du musst das Prinzip des OnExit-Ereignisses besser verstehen:

1.
Es gibt nur 1 Document_ContentControlOnExit-Ereignis. Wenn du ein Document_ContentControlOnExit1 erfindest, ist das kein Ereignis mehr sondern eine ganz normale händisch zu startende Routine wie Sub machwas() auch.

2.
Das OnExitEreignis tritt beim Verlassen von ContentControls ein, und zwar uneingeschränkt und gleichermaßen für alle ContentControls in einem Dokument. Das will man in aller Regel nicht und muss deshalb den Aktivitätsbereich des Ereignisses einschränken.

3.
Eine Möglichkeit der Einschränkung ist: Der Code soll nur für genau 1 ContentControl gelten. Dieses ContentControl kann man z.B. über den Tag definieren, so wie im zitierten Code. Wenn Controls mit einem anderen Tag verlassen werden, wird das Makro abgebrochen:
Code:

If ContentControl.Tag <> "Ansprechpartner" Then Exit Sub
4.
Du kannst aber auch das OnExit-Makro auf mehrere verschiedene Controls anwenden, nach diesem Muster:
Code:

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
	
If ContentControl.Tag = "Ansprechpartner" then
	'hier alles, beim Verlassen genau dieses Controls passieren soll
end if

if ContentControl.Tag = "Städte" then
	'hier alles, was beim Verlassen des anderen Controls passieren soll
end if

End Sub
Vielleicht hilft dir das ein bisschen weiter. Wenn nicht, lad ein Musterdokument hoch und erklär nochmal, was du genau haben willst.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.11.2018, 16:24   #3
Julius123
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard Musterdokument

Guten Tag Gerhard,

vielen Dank für die schnelle Antwort. Ich habe verstanden was Sie meinen, allerdings habe ich es nicht umgesetzt bekommen. Ich habe ein Musterdokument hochgeladen.

In der Tabelle sind zwei Dropdown-Felder. Das zweite Dropdown-Feld muss nach dem gleichen Prinzip wie das erste Dropdown-Feld funktionieren, allerdings unabhängig von dem ersten Dropdown-Feld.

Grüße

Julius
Angehängte Dateien
Dateityp: docm Musterdokument.docm (27,6 KB, 5x aufgerufen)
Julius123 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.11.2018, 18:36   #4
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Matthias,

dein Beispiel ist ja ziemlich verwirrend. Du hast 2 Dropdowns mit genau denselben Auswahlmöglichkeiten (Hans und Max). Wozu brauchst du da denn zwei Dropdowns? Hat der Max aus dem ersten Dropdown z.B. eine andere Telefonnummer als der Max aus dem zweiten?

Falls das zweite Dropdown was anderes enthalten und bewirken soll, als das erste, mach bitte ein Beispiel, dem man das ansieht.

__________________

Gruß
Gerhard

Geändert von Gerhard H (18.11.2018 um 18:38 Uhr).
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.11.2018, 22:29   #5
Julius123
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard Antwort

Hallo Gerhard,

in jedem Angebot werden zwei Ansprechpartner angegeben. Sprich bei der Angebotserstellung werden jedes Mal per Dropdown zwei Namen ausgewählt. In beiden Dropdowns müssen als Beispiel 10 Namen (Ansprechpartner) hinterlegt sein. Die 10 Namen sind in beiden Dropdown-Feldern exakt die gleichen. Die Telefonnummer und E-Mail varrieren je nach Ansprechpartner. Das zweite Dropdown-Feld muss die gleiche Funktion haben wie das Erste, allerdings unabhängig davon was im ersten Dropdown-Feld ausgewählt wurde.

Ich hoffe, ich habe es verständlich erklärt.

Grüße Julius
Julius123 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.11.2018, 22:32   #6
Julius123
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard Ergänzung

Kurze Ergänzung:

In dem Beispiel wäre es so, dass in dem ersten Dropdown-Feld "Max" und in dem zweiten "Hans" ausgewählt wird. Für beide Namen soll in den Feldern Telefonnumer und E-Mail dementsprechend die korrekte Telefonnumer und E-Mail des Ansprechpartners angezeigt werden.
Julius123 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.11.2018, 23:38   #7
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Julius,

du heißt ja gar nicht Mathias, sorry.

Jetzt hab ich es verstanden. Hier eine Lösung. Im Code für den zweiten Ansprechpartner hab ich eine kürzere Variante genommen, um ein bestimmtes Contentcontrol zu füllen (.selectContentControlByTag). Damit musst du nicht alle Controls durchschleifen.
Code:

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim Ansprechpartner As String
Dim textfeld As ContentControl
Dim tel As String, mail As String

Ansprechpartner = ContentControl.Range.Text

'Erstes Dropdown:
If ContentControl.Tag = "Ansprechpartner" Then

    With ActiveDocument
      
            Select Case Ansprechpartner
                Case Is = "Max"
                tel = "123"
                mail = "max@firma.de"
                
                Case Is = "Hans"
                tel = "456"
                mail = "hans@firma.de"
    
                Case Else
                MsgBox "Dieser Mitarbeiter wurde noch nicht angelegt"
                Exit Sub
            
            End Select
            
            For Each textfeld In .ContentControls
                    If textfeld.Tag = "Telefon" Then textfeld.Range.Text = tel
                    
                    If textfeld.Tag = "Mail" Then textfeld.Range.Text = mail
            Next textfeld
    End With
End If

'Zweites Dropdown:
If ContentControl.Tag = "Ansprechpartner1" Then

    With ActiveDocument
      
            Select Case Ansprechpartner
                Case Is = "Max"
                tel = "123"
                mail = "max@firma.de"
                
                Case Is = "Hans"
                tel = "456"
                mail = "hans@firma.de"
    
                Case Else
                MsgBox "Dieser Mitarbeiter wurde noch nicht angelegt"
                Exit Sub
            
            End Select
            
            .SelectContentControlsByTag("Telefon1").Item(1).Range.Text = tel
            .SelectContentControlsByTag("Mail1").Item(1).Range.Text = mail
            
    End With
End If
End Sub

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.11.2018, 17:56   #8
Julius123
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard Antwort

Hallo Gerhard,

vielen Dank für deine Lösung, funktioniert wie gewünscht!

Ich habe abschließend noch eine Frage. Ich möchte, dass mehrere Dropdown-Felder beim öffnen des Dokumentes "rot" hinterlegt sind. Wenn das Dropdown-Feld auf "Auswählen" steht, soll es rot sein. Nachdem etwas ausgewählt wurde, soll die Schriftfarbe wieder schwarz sein.

Einen VBA Code der funktioniert habe ich bereits. Mein Problem ist, wie bekomme ich jetzt beide Funktionen in einem Code unter? Ich habe verschiedene Sachen ausprobiert, leider ohne Erfolg.

Der generelle Code für die gewünscht Funktion lautet:


Option Explicit

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim ccInhalt As String

If ContentControl.Tag Like "Ansprechpartner" Then
ccInhalt = ContentControl.Range.Text

With ContentControl.Range.Shading
Select Case ccInhalt
Case Is = "Auswählen"
.BackgroundPatternColor = wdColorRed

Case Else
.BackgroundPatternColor = wdColorAutomatic
End Select
End With
End If
End Sub

Auf das Musterdokument bezogen soll die ursprüngliche Funktion mit dem automatischen erscheinen der Telefonnummer und Email nach Auswahl des Ansprechpartners erhalten bleiben. Zusätzlich soll bei Auswahl "Auswählen" im Dropdown-Feld das Dropdown-Feld rot hinterlegt sein.

Grüße Julius
Julius123 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.11.2018, 22:59   #9
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Julius,

die rote Hintergrundfarbe beim Dokumentstart kriegst du am einfachsten hin, indem du dein Dokument als Dokumentvorlage speicherst, wobei in den Dropdowns der Eintrag "Auswählen" eingestellt und rot unterlegt ist. Dann kriegt jeder, der per Doppelklick auf die Vorlage ein neues Dokument erstellt, diese Einstellungen automatisch.

Die Prüfung, ob beim Verlassen des Dropdowns tatsächlich ein Mitarbeiter ausgewählt wurde, kannst du gleich zu Anfang summarisch für beide Dropdowns machen, und zwar so:
Code:

'Kontrolle, ob Ansprechpartner ausgewählt
   If ContentControl.Tag Like "Ansprechpartner*" Then
        If ContentControl.Range.Text = "Auswählen" Then
            ContentControl.Range.Shading.BackgroundPatternColor = wdColorRed
            MsgBox "Bitte einen Ansprechpartner auswählen"
            Exit Sub
        Else
            ContentControl.Range.Shading.BackgroundPatternColor = wdColorAutomatic
        End If
End If
Das restliche Makro bleibt unverändert. Ich häng nochmal ein Muster an.
Angehängte Dateien
Dateityp: dotm Julius_zweiDropdowns.dotm (31,6 KB, 3x 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 15:40 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, 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.