David,
After some hair pulling frustration with Excel, I would have to agree
with Doug. First, you can't have a dropdown field in Word with over 25
entries. You will have to use a UserForm ListBox control.
I am neither a master of Word VBA or Excel, but I did scrabble together
some code that appears to work as you intend. I may post it is an
Excel group in hopes of learning if I have made gross errors ;-).
For this example, I created auser form (named UF) contain one listbox
and one command button.
I call the userform with:
Sub CallUF()
Dim myFrm As UF
Set myFrm = New UF
myFrm.Show
Unload myFrm
Set myFrm = Nothing
End Sub
I created a test Excel file named: C:\myWorkbook1
The spreadsheet had 3 columns "Name" "Age" "Address"
I named the excel range containing the data "mydatabase"
Next I populated the listbox from the spreadsheet column 1 (or listed
all of the names) using the Userform Initialize event.
'First, you need to set a reference in your project to the
"Microsoft DAO 3.51
'(or 3.6) Object Library".
Private Sub UserForm_Initialize()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = OpenDatabase("C:\MyBook1.xls", False, False, "Excel 8.0")
Set rs = db.OpenRecordset("SELECT * FROM `mydatabase`")
While Not rs.EOF
Me.ListBox1.AddItem rs.Fields(0).Value
rs.MoveNext
Wend
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Sub
In the document, I created bookmarks "Name" "Age" "Address" where I
wanted the data to appear. I used the Command Button click event to
process the UserForm Listbox selection and populate the data in the
document:
Private Sub CommandButton1_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim oNameRng As Word.Range
Dim oAgeRng As Word.Range
Dim oAddressRng As Word.Range
Dim oBM As Bookmarks
Dim i As Long
Set db = OpenDatabase("C:\MyBook1.xls", False, False, "Excel 8.0")
Set rs = db.OpenRecordset("SELECT * FROM `mydatabase`")
Set oBM = ActiveDocument.Bookmarks
Set oNameRng = oBM("Name").Range
Set oAgeRng = oBM("Age").Range
Set oAddressRng = oBM("Address").Range
i = Me.ListBox1.ListIndex
oNameRng.Text = Me.ListBox1.Text
oBM.Add "Name", oNameRng
rs.Move (i)
oAgeRng.Text = rs.Fields(1).Value
oBM.Add "Age", oAgeRng
oAddressRng.Text = rs.Fields(2).Value
oBM.Add "Address", oAddressRng
Me.Hide
End Sub
Like I said, I am no expert with Excel and while it appears to work in
this simplified example it may actually be a real dog's breakfast.