Thema Datum  Von Nutzer Rating
Antwort
Rot ContentControl DropdownListEntries Value
28.11.2013 12:03:39 Daniel
NotSolved

Ansicht des Beitrags:
Von:
Daniel
Datum:
28.11.2013 12:03:39
Views:
1925
Rating: Antwort:
  Ja
Thema:
ContentControl DropdownListEntries Value

Hallo liebes Forum,

kurz zu mir - Ich bin kein Programmierer, kann kein Programmcode schreiben, verstehe diesen aber ziemlich gut und kann ihn nach meinen Anforderungen prinzipiell abändern.

Ich bin gerade dabei, eine Word 2010-Serienbrief-Vorlage etwas aufzupeppen. Ziel ist es, dass auf Grund einer Auswahl in einem Dropdown-Feld und der Auswahl von 4 Radio-Buttons in ein Textfeld ein Wert aus einer Excel-Datei geschrieben wird.

Was habe ich bisher :

Das Dropdown wird mit Werten aus der Excel-Datei befüllt. Das Event wird durch das zu unserem Adressmanagement gehörende Makro gestartet. Funktioniert auch reibungslos.

Um auf die richtige Zeile für die VersNummer zu kommen, haben ich jedem Dropdown-Eintrag als Value du Zeilenzahl mitgegeben.

Was auch Funktioniert, ist, dass das Array VersNum mit den richtigen Werten aus der Excel-Datei befüllt wird.

Mein Problem ist, dass ich in der Funktion VersNummer() die Funktion GetValue aufrufen muss, damit ich an das richtige Value komme. GetValue() habe ich nach langer Internetsuche iwo gefunden. Leider bekomme ich den Aufruf nicht hin und verstehe auch nicht, wie ich das Dropdownfeld ContentControl(1) an GetValue übergeben kann.

Vielleicht kann mir einer von euch auch was dazu sagen, ob mein Ansatz mit dem Array VersNum() so umsetzbar ist. dieser ist ja in Modul1 definiert und wird auch dort befüllt. Das OnClick-Event für die Radio-Buttons steht ja aber unter Microsoft Word Object - This Document.

 

Hier mal mein bisheriger Code im Modul1:

 

Option Explicit
Public VersNum(3) As String 'Array als Public deklariert, da nachher aus dem On_Click-Event der Radiobuttons darauf zugegriffen werden muss

Sub Excel_connect()
'Einlesen der Einheiten aus der Excel-Datei
'Aufruf der Sub erfolgt über das Modul Target
Dim appExcel As Excel.Application
Dim wbkExcel As Excel.Workbook
Dim wbsExcel As Excel.Worksheet
Dim rngExcel As Excel.Range
Dim rngZeile As Integer
Dim Cell As Range
Dim veAnzeige As String
Dim veText As String


Set appExcel = Excel.Application
Set wbkExcel = appExcel.Workbooks.Open("M:\WV\SB\VE 00 Unterlagen alle VEs\06 Versicherungen\Gesamtübersichtsliste Versicherungen.xlsx", , True, , , , , , , , , , False)
Set wbsExcel = wbkExcel.Worksheets("Versicherungen")
Set rngExcel = wbsExcel.UsedRange

'Debug.Print rngExcel.AddressLocal

'Titel für das Dropdown setzen, wird für Document_ContentControlOnExit benötigt, da diese nur beim Verlassen des Dropdown ausgeführt werden soll
ActiveDocument.ContentControls(1).Title = "VEAuswahl"

For rngZeile = 2 To rngExcel.Rows.Count

    veAnzeige = rngZeile 'Zeile des Eintrags als Value im Dropdown speichern, wird für das Auslesen der VersNummer wieder benötigt
    veText = wbsExcel.Cells(rngZeile, 1).Value & " - " & wbsExcel.Cells(rngZeile, 3).Value & " in " & wbsExcel.Cells(rngZeile, 4).Value 'Text für den Eintrag in Dropdown zusammensetzen
     
    'Aufruf der Funciton um den Dropdown-Eintrag zu machen
    Modul1.VE_Liste veAnzeige, veText
    
Next

wbkExcel.Close (False)

End Sub


Function VE_Liste(veAnzeige As String, veText As String)

Dim objCC As ContentControl
Dim objMap As XMLMapping

'If-Anweisung, falls nochmals Target ausgeführt wird um keine Fehlermeldung zu bekommen, dass Eintrag schon vorhanden ist.
If veAnzeige = "2" And ActiveDocument.ContentControls(1).DropdownListEntries.Count > 0 Then
    ActiveDocument.ContentControls(1).DropdownListEntries.Clear
End If
 
Set objCC = ActiveDocument.ContentControls(1)
 
'List entries
objCC.DropdownListEntries.Add Text:=veText, Value:=veAnzeige


End Function

Function VersNummer()

'Function wird durch Document_ContentControlOnExit beim Verlassen des DropDownFelds ausgelöst
'Beim Verlassen des DropDown sollen die Versicherungsnummern in den Array VersNum() gespeichert werden

Dim appExcel As Excel.Application
Dim wbkExcel As Excel.Workbook
Dim wbsExcel As Excel.Worksheet
Dim rngExcel As Excel.Range
Dim rngZeile As Integer

Set appExcel = Excel.Application
Set wbkExcel = appExcel.Workbooks.Open("M:\WV\SB\VE 00 Unterlagen alle VEs\06 Versicherungen\Gesamtübersichtsliste Versicherungen.xlsx", , True, , , , , , , , , , False)
Set wbsExcel = wbkExcel.Worksheets("Versicherungen")
Set rngExcel = wbsExcel.UsedRange

'Hier muss das Value aus dem ausgewählten Dropdown übertragen werden. Value entspricht der Zeile in der Excel-Tabellenblatt.
'Die Übergabe des ??? an die Function um den Value als Rückgabewert zu erhalten klappt nicht!!!
rngZeile = GetValue(ActiveDocument.ContentControls(1))

'Debug.Print rngZeile

VersNum(1) = wbsExcel.Cells(rngZeile, 5).Value
VersNum(2) = wbsExcel.Cells(rngZeile, 6).Value
VersNum(3) = wbsExcel.Cells(rngZeile, 7).Value

'Debug.Print VersNum(1)

'MsgBox VersNum(1)

wbkExcel.Close (False)

End Function

Function GetValue(ByVal CC As ContentControl) As String
'Funktion um aus dem gewählten Eintrag des Dropdown den Value-Wert zu bekommen. Dieser wird benötigt, weil er der Zeilen-Zahl des Excel-Tabellenblatts entspricht.
'Aufruf der Funktion aus VersNummer klappt noch nicht.

    Dim entry As ContentControlListEntry
    Dim rtn As String  ' defaults to ""
    
    If CC.Type = wdContentControlDropdownList Then
        For Each entry In CC.DropdownListEntries
          ' If Not CC.ShowingPlaceholderText Then   ' if the placeholder has a Value, uncomment this and the End If
                If CC.Range.Text = entry.Text Then
                    rtn = entry.Value
                    Exit For
                End If
          ' End If
        Next
    End If
    Debug.Print rtn
    MsgBox rtn
    GetValue = rtn
    
End Function

 

Und hier mal aus ThisDocument:

'Document_ContentControlOnEnter aus Internet kopiert und nach Anforderung geändert.
'Ursprünglich erfolgte Prüfung auf Änderung des Textes

Private Sub Document_ContentControlOnEnter(ByVal currentCC As ContentControl)
ActiveDocument.Variables("CCContent").Value = currentCC.Title
End Sub

Private Sub Document_ContentControlOnExit(ByVal currentCC As ContentControl, Cancel As Boolean)

'If-Anweisung, damit nur bei dem Dropdown ausgeführt wird
If ActiveDocument.Variables("CCContent").Value = "VEAuswahl" Then
    Modul1.VersNummer
End If

End Sub

 

Vielen Dank schonmal für eure Mühe und Hilfe!

Daniel


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot ContentControl DropdownListEntries Value
28.11.2013 12:03:39 Daniel
NotSolved