G
Greg
Hi,
I consider myself a dabbler in Word VBA and a begginer (is there
anything less skilled than that
?) with Excel.
With my technical level established, a user in the Word VBA groups
asked how to populate a dropdown field in a Word document with data
from Excel and then populate other fields in Word with Excel data based
on the item selected in the dropdown.
First of all you can't have a dropdown field in Word that contains more
than 25 items so a Word UserForm is required.
I thought I would have a go at figure out this problem.
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 Excel file named: C:\myWorkbook1
The spreadsheet has 3 columns headed: "Name" "Age" "Address"
I named the excel range containing the data "mydatabase"
Next I populated the listbox from the spreadsheet column 1 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.
I appreciate any comments that would expain inefficiencies in my method
or explanations of a better method.
Thanks.
I consider myself a dabbler in Word VBA and a begginer (is there
anything less skilled than that

With my technical level established, a user in the Word VBA groups
asked how to populate a dropdown field in a Word document with data
from Excel and then populate other fields in Word with Excel data based
on the item selected in the dropdown.
First of all you can't have a dropdown field in Word that contains more
than 25 items so a Word UserForm is required.
I thought I would have a go at figure out this problem.
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 Excel file named: C:\myWorkbook1
The spreadsheet has 3 columns headed: "Name" "Age" "Address"
I named the excel range containing the data "mydatabase"
Next I populated the listbox from the spreadsheet column 1 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.
I appreciate any comments that would expain inefficiencies in my method
or explanations of a better method.
Thanks.