I have a macro for taking the data from a database sheet and filling out a template sheet over and over again with the data.
Data Into Template
The macro fills out the template and saves each one as a separate file OR creates a separate sheet, your choice. That last part can be tweaked to do other things, this is mainly to demonstrate a simple way to fill out a form from a row-based database.
There is a sample file there for simple testing and to get you going.
Here's the main guts of that macro:
'Jerry Beaucaire 4/25/2010
'From Sheet1 data fill out template on sheet2 and save
'each sheet as its own file.
Dim LastRw As Long, Rw As Long, Cnt As Long
Dim dSht As Worksheet, tSht As Worksheet
Dim MakeBooks As Boolean, SavePath As String
Application.ScreenUpdating = False 'speed up macro execution
Application.DisplayAlerts = False 'no alerts, default answers used
Set dSht = Sheets("Data") 'sheet with data on it starting in row2
Set tSht = Sheets("Template") 'sheet to copy and fill out
'Option to create separate workbooks
MakeBooks = MsgBox("Create separate workbooks?" & vbLf & vbLf & _
"YES = template will be copied to separate workbooks." & vbLf & _
"NO = template will be copied to sheets within this same workbook", _
vbYesNo + vbQuestion) = vbYes
If MakeBooks Then 'select a folder for the new workbooks
MsgBox "Please select a destination for the new workbooks"
.AllowMultiSelect = False
If .SelectedItems.Count > 0 Then 'a folder was chosen
SavePath = .SelectedItems(1) & "\"
Else 'a folder was not chosen
If MsgBox("Do you wish to abort?", _
vbYesNo + vbQuestion) = vbYes Then Exit Sub
'Determine last row of data then loop through the rows one at a time
LastRw = dSht.Range("A" & Rows.Count).End(xlUp).Row
For Rw = 2 To LastRw
tSht.Copy After:=Worksheets(Worksheets.Count) 'copy the template
With ActiveSheet 'fill out the form
'edit these rows to fill out your form, add more as needed
.Name = dSht.Range("A" & Rw)
.Range("B3").Value = dSht.Range("A" & Rw).Value
.Range("C4").Value = dSht.Range("B" & Rw).Value
.Range("D5:D7").Value = dSht.Range("C" & Rw, "E" & Rw).Value
If MakeBooks Then 'if making separate workbooks from filled out form
ActiveWorkbook.SaveAs SavePath & Range("B3").Value, xlNormal
Cnt = Cnt + 1
If MakeBooks Then
MsgBox "Workbooks created: " & Cnt
MsgBox "Worksheets created: " & Cnt
Application.ScreenUpdating = True