|
楼主 |
发表于 2011-6-12 10:50
|
显示全部楼层
条件:从当前用户桌面的Excel表获取数据源,Excel表数据源的名字从用户D盘的1.xls Sheet1!A1获取
运行第一个宏加载数据库必须先打开一个Excel表,否则会出错
运行第二个宏合并1-6条记录至桌面,并关闭
由于第一次写这种东东 好多地方还要优化,稍候在附上,后面将将实现一键实现从数据加载到合并至指定位置,简化大家的工作量
第一个宏编写:
Sub 加载数据库()
'
' 加载数据库 Macro
' 宏在 2011-6-11 由 雨林木风 录制
'
chan = DDEInitiate(app:="Excel", topic:="system") '打开一个DDE通道
DDEExecute channel:=chan, Command:="[open(" & Chr(34) & "D:\1.xls" & Chr(34) & ")]" '在一个应用程序中执行打开.xls文件命令,需要指出的是,系统要求所需文件必须放在D盘。
DDETerminate channel:=chan '关闭DDE通道
chan = DDEInitiate(app:="Excel", topic:="D:\1.xls") '打开一个DDE通道
Dim s As String
Dim q As String
Dim y As String
s = DDERequest(channel:=chan, Item:="R1C1")
DDETerminateAll
Dim excelClose As Object
Set excelClose = GetObject(, "Excel.Application")
excelClose.workbooks("1.xls").Close False
y = Left(s, Len(s) - 1)
q = "C:\Documents and Settings\" & Environ("USERNAME") & "\桌面\" & y & ".xls"
ActiveDocument.MailMerge.OpenDataSource Name:=q, _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=q;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Data" _
, SQLStatement:="SELECT * FROM `Sheet1$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
End Sub
第二个宏已经变相的实现:多谢这个帖子:http://club.excelhome.net/thread-729315-1-1.html
下面是代码:
Sub 保存至桌面()
'主文档的类型为信函
'合并全部数据记录
'假设主文档已链接好数据源,可以进行正常的邮件合并
Dim myMerge As MailMerge, i As Integer, myname As String
Application.ScreenUpdating = False
Set myMerge = ActiveDocument.MailMerge
With myMerge.DataSource
If .Parent.State = wdMainAndDataSource Then
.ActiveRecord = wdFirstRecord
.FirstRecord = 1
.LastRecord = 6
.Parent.Destination = wdSendToNewDocument
'取得数据源第1个和第2个字段(合并域)的当前数据字符串,用以命名文件,根据需要增减修改
myname = .DataFields(9).Value & " (" & .DataFields(35).Value & "Km" & ")"
.ActiveRecord = wdNextRecord
.Parent.Execute '每次合并一个数据记录
With ActiveDocument
.Content.Characters.Last.Previous.Delete '删除分节符
.SaveAs "C:\Documents and Settings\" & Environ("USERNAME") & "\桌面\" & myname & ".doc" '假设生成的各文档保存于c盘桌面
.Close '关闭生成的文档(已保存)
End With
End If
End With
End Sub
[ 本帖最后由 dyt2020 于 2011-6-12 16:20 编辑 ] |
|