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
|