ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] WORD同时选择表格和含数字段落的方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-10-26 22:58 | 显示全部楼层 |阅读模式
要在word文件中一次性选择所有包含数字的段落,以及所有的表格,我要同时选择它们复制到一个空白文档中。我搜索了论坛内容,都找不到什么解决的办法呢。
注意,有些段落的开头有用数字作为编号,这种情况就要排除掉,
比如
(1)
(2)
(3)

1、
2、
3、
这些就不一定都能选择了,我只要选在正文中有数字的段落。
目前能找到的方法,只有单独选择所有表格这种方法,而且就算按这种方法复制到新文档中,也只有单纯的文字内容,而没有整张表格,这个没有用。
另外还有单纯选择所有包含数字的段落的方法,用通配符来查找整个文档,[!^11^13]@[0-9]*^13
但运行时WORD一直都没反应,难道是通配符太复杂吗,所以这个也没用啊。
要同时选表格和含数字段落,有什么好方法,好难啊,求帮助。

TA的精华主题

TA的得分主题

发表于 2015-10-27 09:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一楼主未提到会不会使用宏(这个问题,每个提问者都不说,都得需要我问,需要我说多少遍?),二是可以反向来处理,把不含数字的段落(不包括表格)删除,只须把原文件复制一份即可。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-27 19:42 | 显示全部楼层
不好意思,我会使用宏。

还有单独选择所有表格的我试的是下面的方法,能选择所有表格内容
但是将选择好的内容再复制到新建的空白文档时,得到的结果只有单纯的文字内容,而不是表格,这个怎么解决呢

Sub 选中所有表格()
    Dim T As Table
    Application.ScreenUpdating = False
    ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
    For Each T In ActiveDocument.Tables
        T.Range.Editors.Add wdEditorEveryone
    Next
    ActiveDocument.SelectAllEditableRanges wdEditorEveryone
    ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-27 19:47 | 显示全部楼层
“二是可以反向来处理,把不含数字的段落(不包括表格)删除,只须把原文件复制一份即可。”

但是怎样选择才能不包括表格啊,用通配符查找可以吗,如果不行,那有什么VBA代码能用的,再次求助,谢谢

TA的精华主题

TA的得分主题

发表于 2015-10-28 10:05 | 显示全部楼层
楼主,试试如下代码:(先创建副本,然后将副本中的非数字、非表格段落删除,有自动编号、列表的段落也删除)
Sub test()
    ActiveDocument.SaveAs FileName:=ActiveDocument.Path & "\" & Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 4) & "_副本" & ".doc"
    Dim i As Paragraph
    For Each i In ActiveDocument.Paragraphs
        If i.Range.ListFormat.ListType <> 0 Then i.Range.Delete
        If i.Range.Information(wdWithInTable) = False And Not (i.Range Like "*#*") Then i.Range.Delete
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-28 21:32 | 显示全部楼层
楼上,我试了你的代码,但运行不了,有提示窗口 “无法编辑Range”

TA的精华主题

TA的得分主题

发表于 2015-10-28 22:58 | 显示全部楼层
可以选中,没问题,但是表格好像复制不出来
  1. Sub 选中内容()
  2. Application.ScreenUpdating = False
  3. Dim oDoc As Document, oReg As New RegExp
  4. Dim oTable As Table, oPara As Paragraph
  5. Set oDoc = ActiveDocument
  6. oDoc.DeleteAllEditableRanges wdEditorEveryone
  7. For Each oTable In ActiveDocument.Tables
  8.     oTable.Range.Editors.Add wdEditorEveryone
  9. Next
  10. For Each oPara In oDoc.Paragraphs
  11.     If Not (oPara.Range.Information(wdWithInTable)) Then
  12.         oReg.Pattern = "[^0-9]"
  13.         oReg.Global = True
  14.         If oReg.Replace(oPara.Range.Text, "") <> "" Then
  15.             oPara.Range.Editors.Add wdEditorEveryone
  16.         End If
  17.     End If
  18. Next
  19. oDoc.SelectAllEditableRanges wdEditorEveryone
  20. oDoc.DeleteAllEditableRanges wdEditorEveryone
  21. Application.ScreenUpdating = True
  22. End Sub
复制代码

所以干脆反向操作吧,5#代码即可。

TA的精华主题

TA的得分主题

发表于 2015-10-28 22:59 | 显示全部楼层
楼主需要再运行一遍:ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
再运行5#的代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-29 07:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼上我试了,还是提示 “无法编辑Range”呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-29 07:17 | 显示全部楼层
我先按你说的需要再运行一遍:ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
修改成
Sub test()
ActiveDocument.DeleteAllEditableRanges wdEditorEveryone

    ActiveDocument.SaveAs FileName:=ActiveDocument.Path & "\" & Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 4) & "_副本" & ".doc"
    Dim i As Paragraph
    For Each i In ActiveDocument.Paragraphs
        If i.Range.ListFormat.ListType <> 0 Then i.Range.Delete
        If i.Range.Information(wdWithInTable) = False And Not (i.Range Like "*#*") Then i.Range.Delete
    Next
End Sub
还是提示“无法编辑Range”

又干脆删除另存为副本的功能
Sub test()
    Dim i As Paragraph
    For Each i In ActiveDocument.Paragraphs
        If i.Range.ListFormat.ListType <> 0 Then i.Range.Delete
        If i.Range.Information(wdWithInTable) = False And Not (i.Range Like "*#*") Then i.Range.Delete
    Next
End Sub
也还是提示“无法编辑Range”



还有我也试了你的Sub 选中内容()
但运行到代码oReg As New RegExp时,会提示“用户定义类型未定义”


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

本版积分规则

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

GMT+8, 2024-5-17 21:41 , Processed in 0.034187 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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