ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[补附件]基于域和变量实现WORD动态创建表格,遇到困难

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-4-2 15:23 | 显示全部楼层 |阅读模式

一个基于域和变量来实现WORD中动态创建表格的想法,但遇到困难

===============================

在WORD中动态创建表格的方法,比较常见的是直接定位到要插入的地方(一般用书签定位),然后selection.tables.add...然后cells(1,1).text="aaa".....

但是这种解决方法有一个很大的问题,就是不能够避免重复插入的问题(就是这个地方已经插了一个表格了,如果再执行一次,就会有两个表格了。)我曾经试图使用检查有没有插入过表格,有就不插,没有就重新插的方法来解决,但是代码不稳定,有的时候成功,有的时候不成功。

而我研究发现,其实我们在WORD中引用EXCEL的时候,其实也是加了一个:

 LINK Excel.Sheet.8 "Book1.xls" "Sheet1!R1C1:R3C3" \a \h

的方法。所以我想到一个新的方法,就是定义一个文档变量Variables,然后在指定的位置加个域,只要设置一下变量的值,然后document.fields.update就可以实现动态插入一个表格或者更新这个表格。那么问题来了,我发现无论我怎样传值,都没有办法让这个域显示出来的时候,象一个表格。

我的附件显示了我的两个尝试,希望有对WORD域有了解的大侠帮助解答。谢谢

请解压附件后打开DOC1.DOC。然后点击两个按钮来查看我的代码运行效果。谢谢


---------
'思路1,先在WORD中随便引用一个EXCEL,然后拷贝这个引用域的值到我新插入的域中去,看看能不能成功
Private Sub CommandButton1_Click()
     '获得引用域的内容
    Dim f As Field
    Dim qq As String
    For Each f In ThisDocument.Fields
        Debug.Print f.Code
        If InStr(1, f.Code, "LINK") > 0 Then
            qq = f.Result.Text
        End If
    Next f
    Debug.Print qq


    '把这个内容,插入到一个新的DOCVARIABLE域中,结果看不到表格!!
    Dim varName As String, varValue As String
    Dim a, t
    varName = "t1"
    varValue = qq
    'varValue = "<table><tr><td>1</td></tr></table>"
   
    '加变量
    Set a = ThisDocument.Variables(varName)
    If a Is Nothing Then
        Set a = ThisDocument.Variables.Add(Name:=varName, Value:=varValue)
    Else
        a.Value = varValue
    End If
   
    '回到表头
    Application.Selection.HomeKey Unit:=wdStory
    '在WORD中插入引用这个变量的域
    Set t = Application.Selection.Fields.Add(Application.Selection.Range, wdFieldEmpty, "DOCVARIABLE " & varName, True)
       
    Set t = Nothing
    Set a = Nothing
   
End Sub

''这个换了一个思路,直接把值做成HTML,看看行不行,还是不行
Private Sub CommandButton2_Click()
    Dim f As Field
   
    '回到表头
    Application.Selection.HomeKey Unit:=wdStory
   
    Dim varName As String, varValue As String
    Dim a
    varName = "t2"
    varValue = "<table><tr><td>1</td></tr></table>"
   
    Set a = ThisDocument.Variables(varName)
    If a Is Nothing Then
        Set a = ThisDocument.Variables.Add(Name:=varName, Value:=varValue)
    Else
        a.Value = varValue
    End If
   
    '在WORD中插入引用这个变量的域
    Set t = Application.Selection.Fields.Add(Application.Selection.Range, wdFieldEmpty, "DOCVARIABLE " & varName, True)
   
    Set a = Nothing
End Sub

ykqJqNkC.zip (14.24 KB, 下载次数: 45)
[此贴子已经被作者于2007-4-4 3:09:51编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-2 15:25 | 显示全部楼层

我无法上传附件。唉。

只要请大家看上面的代码了。

方案一,需要大家新建一个WORD,然后引用一个EXCEL,然后再去执行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-4 03:04 | 显示全部楼层

3天了,看来这个问题有难度哈.

给大家汇报一下近况吧,我还是转回使用link域的方法了.

但是又发现了WORD的一个小小的BUG,如果是粘贴链接,格式为[无格式文本]或者[RTF文本]的话,引用的区域是一个隐藏的SHEET,也可以看到数据.

如果格式是[HTML文本]的话,引用隐藏的SHEET,就看不到数据了.有意思吧.TNND的比尔盖子.真是不可信赖啊.

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-4 03:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

今天阅读了版规,发现了如何上传附件的方法.看来还是我太菜了.

补充了问题附件.欢迎大家下载讨论.

另外还发现这个论坛的一个BUG,我修改原来的帖子,上传附件成功,但是把标题录入超过60个,退回去重新修改后确定,刚才的附件是看不到D.

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

本版积分规则

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

GMT+8, 2024-11-17 18:51 , Processed in 0.037017 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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