强烈请求帮助解决WORD组织机构图的数据核对难题
时间:2011-01-14
来源:互联网
每年都要编制组织机构图,编制画图本来就很麻烦,加上数据核对,因WORD统计计数没有EXCEL方便,经常是算来算去的,常常出错,这种表要做N个,很着急上火。编写WORD程序本人不太会,以前还在本论坛和高手探讨过,恳请帮助编写核对程序。
要求:每个组织框内最上面有两个合计数,下面有代数的文本框,要求核对下面的和上面的的数,有九个文本框要核对,结果要和全部人数一致。见图有颜色标出。
附文件:
[ 本帖最后由 weiguoyin868 于 2011-1-14 07:18 编辑 ]
未命名1.JPG(54.52 KB)
组织机构图核对.rar(11.62 KB)
要求:每个组织框内最上面有两个合计数,下面有代数的文本框,要求核对下面的和上面的的数,有九个文本框要核对,结果要和全部人数一致。见图有颜色标出。
附文件:
[ 本帖最后由 weiguoyin868 于 2011-1-14 07:18 编辑 ]
附件

2011-1-14 07:15

2011-1-14 07:15, 下载次数: 5
作者: weiguoyin868 发布时间: 2011-01-14
不会复杂的编程。提供一个笨方法:
在EXCEL表中设置好每个单位的职能、岗位、实际用工人数及长期在工人数,用粘贴链接的方法,分单位、岗位等粘贴到WORD文本中为无格式文本,当单位的职能、岗位、实际用工人数及长期在工人数有变化时,直接在EXCEL表中修改,打开WORD文档时,出现“该文档包含引用其他文件的链接,确定要用链接文件中的数据更新文档吗?”的提示,点“是”。
在EXCEL表中设置好每个单位的职能、岗位、实际用工人数及长期在工人数,用粘贴链接的方法,分单位、岗位等粘贴到WORD文本中为无格式文本,当单位的职能、岗位、实际用工人数及长期在工人数有变化时,直接在EXCEL表中修改,打开WORD文档时,出现“该文档包含引用其他文件的链接,确定要用链接文件中的数据更新文档吗?”的提示,点“是”。
作者: fengbin7506 发布时间: 2011-01-14
以下代码是在以前写过的代码(http://club.excelhome.net/viewthread.php?tid=631787)基础上修改而成,可试试:
复制内容到剪贴板
'只针对画布中的组合图形对象
Dim S As Shape, S2 As Shape
For Each S In ActiveDocument.Shapes
If S.Type = msoCanvas Then
For Each S2 In S.CanvasItems
If S2.Type = msoGroup Then MsgBox myGroupItems(S2)
Next
End If
Next
End Sub
Function myGroupItems(myShape As Shape) As String
'假设组合图形中第一个文字框包含合计数
Dim S As Shape, n As Integer, t As String, t2 As String
For Each S In myShape.GroupItems
S.Select
With S.TextFrame
If .HasText Then
n = n + 1
If n = 1 Then
t = GetFind(.TextRange)
Else
t2 = GetFind(.TextRange)
If t2 <> "0|0" Then Exit For
End If
End If
End With
Next
myGroupItems = IIf(t = t2, "数据对应! " & t, "数据不对应! " & vbCrLf & vbCrLf & t & vbTab & t2)
End Function
Function GetFind(myRange As Range) As String
Dim n As Integer, n2 As Integer
With myRange.Find
.Text = "[0-9]@[ (]@[0-9]@)"
.MatchWildcards = True
Do While .Execute
n = n + Val(Split(.Parent.Text, "(")(0))
n2 = n2 + Val(Split(.Parent.Text, "(")(1))
.Parent.Collapse wdCollapseEnd
Loop
End With
GetFind = n & "|" & n2
End Function
[ 本帖最后由 sylun 于 2011-1-14 12:47 编辑 ] 代码:
Sub test()'只针对画布中的组合图形对象
Dim S As Shape, S2 As Shape
For Each S In ActiveDocument.Shapes
If S.Type = msoCanvas Then
For Each S2 In S.CanvasItems
If S2.Type = msoGroup Then MsgBox myGroupItems(S2)
Next
End If
Next
End Sub
Function myGroupItems(myShape As Shape) As String
'假设组合图形中第一个文字框包含合计数
Dim S As Shape, n As Integer, t As String, t2 As String
For Each S In myShape.GroupItems
S.Select
With S.TextFrame
If .HasText Then
n = n + 1
If n = 1 Then
t = GetFind(.TextRange)
Else
t2 = GetFind(.TextRange)
If t2 <> "0|0" Then Exit For
End If
End If
End With
Next
myGroupItems = IIf(t = t2, "数据对应! " & t, "数据不对应! " & vbCrLf & vbCrLf & t & vbTab & t2)
End Function
Function GetFind(myRange As Range) As String
Dim n As Integer, n2 As Integer
With myRange.Find
.Text = "[0-9]@[ (]@[0-9]@)"
.MatchWildcards = True
Do While .Execute
n = n + Val(Split(.Parent.Text, "(")(0))
n2 = n2 + Val(Split(.Parent.Text, "(")(1))
.Parent.Collapse wdCollapseEnd
Loop
End With
GetFind = n & "|" & n2
End Function
作者: sylun 发布时间: 2011-01-14
用域引用 也是可以的。ref
作者: wudixin96 发布时间: 2011-01-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28