ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3623|回复: 10

守柔兄进来看下。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-5-7 04:11 | 显示全部楼层 |阅读模式

如图:前不久搞定了用word读取mdb数据库,现在我在宏里面自动提取mdb中的数据库来替换当前页面中相应位置的字符,以达让临时输出倒word的文档符合我们的要求,但是现在我遇到了两个问题,一是替换回来的字符在mdb中字数不一样,有时候只有一排,有时候有四排,导致文档第二页的文字顺序的上下游走,例如如果替换后胡适的那段话有四排,如果我在制作模板的时候页空四排给给胡适这段话,那么如果以后替换其他人的话假如只有一排的话第二页的字符就会跑到第一页来。

有什么方法能够固定第一页的版面,就是不管本页的数据有多少都不影响第二页的数据(或者是判断判断第二页固定的字符在文档中的位置,假如判断出来他跑到第一页来了就在他前面增加几个回车然他回到第二页开头去)

还有就是如何替换当前页面中的图片(我存了很多背景图片在word文件的当前文件夹中,,在mdb数据库中页存放了用户选择的图片背景),然他页能够象替换字符一样的随意替换,

还有就是如果替换了背景图片,让他浮于文字下面,叠放次序为地层

hnp3gkQ6.rar (65.11 KB, 下载次数: 23)

[此贴子已经被作者于2005-5-10 0:40:57编辑过]

一个固定排版的问题。

一个固定排版的问题。

nlUxeTN5.rar

220.03 KB, 下载次数: 22

一个固定排版的问题。

TA的精华主题

TA的得分主题

发表于 2005-5-7 07:04 | 显示全部楼层

请楼主把你的作品供大家学习一下,我也很感兴趣。

谢谢!!!

TA的精华主题

TA的得分主题

发表于 2005-5-7 08:44 | 显示全部楼层

累!

把你的附件传上来吧.把具体要求也附在附件中.

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-8 02:14 | 显示全部楼层

文件上传了。两个文件,因为不能大于250k所以弄了两个,

希望实现的功能就是:

1.增加自动替换背景,让背景浮于文字下面,并置于底层(我在2003中无法录制宏,所以没有作代码)的功能,背景图片存放在背景资料目录里面。data数据库里面有一个字段“背景”里面存放的是要替换的背景文件名,

2.数据库中“temp1”对应的数据是保险计划书内容,因为数据库行数大于一行,请高手指点用什么方法来把他们替换在word表格中。

3.还有就是我在vc里面在调用这个word文件的时候如何在打开的时候就然他执行文件中的宏,

4.还有就是如果这个文件放到其他机器上面用什么方法能够让他自动引用active data objects library、而不需要手动引用。

就这些了,谢谢了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-8 02:28 | 显示全部楼层

我找到的第二个问题的解决办法,这样也可以批量的输出数据倒word中建立一个表格,但是有个问题就是这样建立的表格没有格式,就是样子很单调,还有就是插入的表格位置怎么定位的问题.我还没解决....

以下是我找到的代码

Set rs = New ADODB.Recordset rs.CursorType = adOpenKeyset rs.LockType = adLockOptimistic SQL = "select 产品名称,单位数量,单价,库存量 from 产品 where 单价>10.00" rs.Open SQL, cnn total_fields = rs.Fields.Count total_records = rs.RecordCount ActiveDocument.Range.Font.Size = "9" '步骤3:将记录集rs中的字段名称和字段内容输出到Word文档,各字段之间用制表符分隔 For I = 0 To total_fields - 2 Selection.TypeText Text:=rs.Fields(I).Name & vbTab Next I Selection.TypeText Text:=rs.Fields(total_fields - 1).Name & vbCrLf Do While Not rs.EOF For I = 0 To total_fields - 2 tmpstr = rs.Fields(I).value If rs.Fields(I).Name = "单价" Then tmpstr = Format(tmpstr, "####.00") End If Selection.TypeText Text:=tmpstr & vbTab Next I Selection.TypeText Text:=rs.Fields(total_fields - 1).value & vbCrLf rs.MoveNext Loop '步骤4:关闭记录集和连接 rs.Close cnn.Close Set rs = Nothing Set cnn = Nothing '步骤5:对Word中的数据进行格式化处理 ActiveWindow.View.Type = wdNormalView Selection.EndKey Unit:=wdStory Selection.Delete Unit:=wdCharacter, Count:=1 Selection.WholeStory Selection.ConvertToTable Separator:=wdSeparateByTabs, DefaultTableBehavior:=wdWord8TableBehavior Selection.HomeKey Unit:=wdStory Set Temp_Table = ActiveDocument.Tables(1) Temp_Table.Rows.Alignment = wdAlignRowCenter Temp_Table.AutoFitBehavior wdAutoFitContent Temp_Table.Rows(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter Temp_Table.Rows(1).Range.Rows.HeadingFormat = wdToggle Temp_Table.Borders(wdBorderLeft).LineWidth = wdLineWidth150pt Temp_Table.Borders(wdBorderRight).LineWidth = wdLineWidth150pt Temp_Table.Borders(wdBorderTop).LineWidth = wdLineWidth150pt Temp_Table.Borders(wdBorderBottom).LineWidth = wdLineWidth150pt Temp_Table.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter Selection.HomeKey Unit:=wdStory Selection.SplitTable Selection.Font.Name = "黑体" Selection.TypeText Text:=Title & vbCrLf Application.ScreenRefresh Msg = "数据提取完毕。" & vbCrLf & vbCrLf Msg = Msg & "总记录数=" & total_records & " 条" MsgBox Msg, vbOKOnly, "数据提取完毕" End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-8 23:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-10 00:48 | 显示全部楼层

http://www.office-cn.net/Article/Class45/Class47/200502/807.html这是五楼代码出处

作者最后总结了一段话,就是 "另外,也可以直接向文档中输出表格,再逐行增加表格或逐单元格地填写数据"我想问问如何来实现把mdb数据库中几行的数据批量输入到word中(并显示为表格)而不是象五楼代码中那么繁琐(先把数据提取到word并用tab分隔,然后再组合成表格)

这就是mdb中的数据.如何才能把它搬到word中那

[此贴子已经被作者于2005-5-10 0:52:09编辑过]
SdP30DdJ.jpg

TA的精华主题

TA的得分主题

发表于 2005-5-10 06:05 | 显示全部楼层

你这么多的问题,一下子咋能全部回答呢?

第一个问题:

"一是替换回来的字符在mdb中字数不一样,有时候只有一排,有时候有四排,导致文档第二页的文字顺序的上下游走,例如如果替换后胡适的那段话有四排,如果我在制作模板的时候页空四排给给胡适这段话,那么如果以后替换其他人的话假如只有一排的话第二页的字符就会跑到第一页来。"

可以在第一页的最后插入分页符,无论文字多少,第一页与第二页之间是有"分隔的".

第二个问题:

"还有就是如何替换当前页面中的图片(我存了很多背景图片在word文件的当前文件夹中,,在mdb数据库中页存放了用户选择的图片背景),然他页能够象替换字符一样的随意替换,还有就是如果替换了背景图片,让他浮于文字下面,叠放次序为地层"

可以使用VBA的方法,先删除图片,再插入指定位置指定名称的图片,可以论坛中搜索一下我的相关回复贴子,包括还有设置图片格式的贴子.

我也有一个问题,希望楼主把中文语言学好一点,好吗?我看到太多的别字,很不爽!

第三个问题:

"还有就是如果这个文件放到其他机器上面用什么方法能够让他自动引用active data objects library、而不需要手动引用。"

可以直接在本文档的VBE/工具/引用中勾选对于ADO的引用,则文档保存后,运作于其它机器时,亦能找到相应引用(除非版本问题或者没有此控件,才会出错)

第四个问题,关于生成表格的事宜并WORD中有关SELECTION对象的使用:

在WORD中,使用大量的SELECTION是不利的,WORD需要反复调用内存来完成\移动和设置该对象的格式位置选定和屏幕刷新等.通常情况下,类似楼主代码的,我们可以使用一个STRING变量的累加来完成,最后一次性插入到WORD文档中,然后,通过将文本转化为表格(指定分隔符,如制表位等),完成表格的处理,然后设置表格文本格式.

如:

Sub Example() Dim CNN As New ADODB.Connection, RST As New ADODB.Recordset Dim Stpath As String, strSQL As String, i As Integer, MyString As String Stpath = "C:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.mdb" '数据库路径 '打开指定数据库 CNN.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & Stpath 'SQL查询语句,从名为Properties的表中读取StrVal列为0的Name列数据 strSQL = "select * from Publishers " '读取数据库 RST.Open strSQL, CNN, adOpenKeyset, adLockOptimistic, adCmdText With RST Do While Not .EOF MyString = MyString & .Fields("Name") & vbTab & .Fields("Company Name") & vbCrLf .MoveNext '向下移动记录指针 Loop .Close '关闭数据表 End With Set RST = Nothing '释放对象 Set CNN = Nothing '翻译对象 Selection.InsertAfter MyString '将文本插入 End Sub '----------------------对于固定化的表格,也可以使用带格式的自动图文集进行处理.关于第四个问题的相关代码,本论坛中很多.

第五:

由于是WORD版面,我们不可能过多地处理数据查询的问题,希望楼主能够建立在自己思索得差不多的情况下,提出相关的问题.就象前几次楼主的提问,我感觉很满意.

好了,先说到这儿,有问题,再交流吧.

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-14 15:02 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-15 02:47 | 显示全部楼层

守柔兄,谢谢你给我的建议.另外我查找了论坛中关于插入图文集的帖子.但是没有查到我需要的东西.很遗憾,在word中插入图文集后把那张固定格式的表格设置为图文集后我不知道下一步该怎样把数据一个一个分别插入到表格中去, 能给点提示么.还有就是我用了第二种方法就是插入 Selection.InsertAfter MyString '将文本插入 后将文字转换为表格,因为这时候本身插入进来的数据"保险利益"这个字段种就有个别数据是代制表符号的,所以转换成表格后数据不能该要求排成需要的表格,

这段话中的"vbtab"能不能换成其他的符号啊.以避免在转换表格的时候遇到表格错行的问题.MyString = MyString & .Fields("Name") & vbTab & .Fields("Company Name") & vbCrLf

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-14 15:04 , Processed in 0.041603 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表