ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] word vba怎样才能选择不包含表格的文字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-11-18 09:52 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在word中同时包含有文字和表格,表格可用ActiveDocument.Tables选择,但表格以外的文字部分如何选择?并且对该部分文字选择后进行修改又不会影响到表格内的文字?刚学word vba,请高人指点,谢谢!!!

TA的精华主题

TA的得分主题

发表于 2018-11-18 23:51 | 显示全部楼层
    * 楼主,你好!刚学 VBA 如果使用的是 Word2003 的话,强烈建议反复研读《Microsoft Office Word 2003 Visual Basic 参考》,即:微软官方 Word2003VBA 帮助这个文档,它的文件名是:VBAWD10.CHM,具体位置:C:\Program Files\Microsoft Office\OFFICE11\2052 文件夹中;或搜索网络也可得到。
    * 关于你提出的问题,我有一个解决方案,供你参考,另外,你看没看到我的帖子《Word2003VBA通用模板宏》,如果你也使用 Word2003 版本,建议下载我的宏代码,会帮助到你的。
    * 楼主,如果你使用的是 Word2003/2007,请按 ALT+F11 复制本代码到你的 VBE 中,按 F8 键可逐语句调试。
    * 下面是 Word2003VBA 公文自动排版(一键)部分代码,请新建包含文本和表格的文档试用之:
  1. Sub 公文()
  2.     Dim doc As Document, t As Table, j As Long, k As Long
  3.     Set doc = ActiveDocument
  4.     ActiveWindow.View.Type = wdPrintView

  5.     With doc
  6.         With .Content.Find
  7.             .Execute "^13", , , , , , , , , "^p", 2
  8.             .Execute "^11", , , , , , , , , "^p", 2
  9.             .Parent.ListFormat.ConvertNumbersToText
  10.         End With

  11.         If .Tables.Count = 0 Then
  12.             .Select
  13.             正文样式
  14.         Else
  15.             '取消环绕
  16.             For Each t In .Tables
  17.                 With t.Range
  18.                     With .Rows
  19.                         .WrapAroundText = False
  20.                         .Alignment = wdAlignRowCenter
  21.                     End With
  22.                     .Font.Name = "仿宋_GB2312"
  23.                     .Font.Color = wdColorPink
  24.                 End With
  25.             Next

  26.             '首表上方
  27.             If .Paragraphs(1).Range.Information(wdWithInTable) = False Then
  28.                 .Range(Start:=0, End:=.Tables(1).Range.Start).Select
  29.                 正文样式
  30.             End If

  31.             '表间循环
  32.             k = .Tables.Count
  33.             For j = 1 To k
  34.                 If j = k Then Exit For
  35.                 .Range(Start:=.Tables(j).Range.End, End:=.Tables(j + 1).Range.Start).Select
  36.                 正文样式
  37.             Next j

  38.             '末表下方
  39.             .Range(Start:=.Tables(k).Range.End, End:=.Content.End).Select
  40.             正文样式

  41.             '表下加空
  42.             For Each t In .Tables
  43.                 With t.Range.Next
  44.                     If Asc(.Text) <> 13 Then .InsertParagraphBefore: .MoveEnd 1, -1
  45.                     .Font.Size = 4
  46.                 End With
  47.             Next
  48.         End If
  49.     End With
  50.     Selection.HomeKey Unit:=wdStory
  51. End Sub
  52. Sub 正文样式()
  53.     Dim i As Paragraph, r As Range
  54.     With Selection
  55.         .ClearFormatting
  56.         CommandBars.FindControl(ID:=122).Execute
  57.         CommandBars.FindControl(ID:=123).Execute
  58.         With .Font
  59.             .Name = "仿宋_GB2312"
  60.             .Size = 16
  61.             .Color = wdColorBlue
  62.             .Kerning = 0
  63.             .DisableCharacterSpaceGrid = True
  64.         End With
  65.         With .ParagraphFormat
  66.             .LineSpacing = LinesToPoints(1.5)
  67.             .CharacterUnitFirstLineIndent = 2
  68.             .AutoAdjustRightIndent = False
  69.             .DisableLineHeightGrid = True
  70.         End With
  71.         Set r = .Range
  72.         For Each i In r.Paragraphs
  73.             If Asc(i.Range) = 13 Then i.Range.Delete
  74.         Next
  75.     End With
  76. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-11-19 08:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-11-19 17:07 | 显示全部楼层
楼上老师,反选用哪条语句?

TA的精华主题

TA的得分主题

发表于 2018-11-19 17:55 | 显示全部楼层
413191246se 发表于 2018-11-19 17:07
楼上老师,反选用哪条语句?

    .SelectAllEditableRanges (wdEditorEveryone)    '选择所有可编辑区域
    .DeleteAllEditableRanges (wdEditorEveryone)    '删除所有可编辑区域

TA的精华主题

TA的得分主题

发表于 2018-11-20 00:14 | 显示全部楼层
虽然 5 楼 ming0018 老师 提供的代码已经包含在《表格全选》宏中,我也有这个宏,但是,经不断尝试,竟然误打误撞成功解决了《表外文字选定》这个专项问题(虽然是循环遍历所有段落,但竟然比我 2 楼的代码“块”选择快了一些),但不知可靠不可靠,大家请试试吧!
  1. Sub 选定表外文字()
  2.     Dim i As Paragraph
  3.     With ActiveDocument
  4.         For Each i In .Paragraphs
  5.             If Not i.Range.Information(12) Then i.Range.Editors.Add -1
  6.         Next
  7.         .SelectAllEditableRanges -1
  8.         .DeleteAllEditableRanges -1
  9.     End With
  10. 'Sub 正文样式()
  11.     With Selection
  12.         .ClearFormatting
  13.         CommandBars.FindControl(ID:=122).Execute
  14.         CommandBars.FindControl(ID:=123).Execute
  15.         With .Font
  16.             .Name = "仿宋_GB2312"
  17.             .Size = 16
  18.             .Color = wdColorBlue
  19.             .Kerning = 0
  20.             .DisableCharacterSpaceGrid = True
  21.         End With
  22.         With .ParagraphFormat
  23.             .LineSpacing = LinesToPoints(1.5)
  24.             .CharacterUnitFirstLineIndent = 2
  25.             .AutoAdjustRightIndent = False
  26.             .DisableLineHeightGrid = True
  27.         End With
  28.     End With
  29. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-20 10:58 | 显示全部楼层
413191246se 发表于 2018-11-20 00:14
虽然 5 楼 ming0018 老师 提供的代码已经包含在《表格全选》宏中,我也有这个宏,但是,经不断尝试,竟然误 ...

感谢老师指点,结合您说的帮助文档,把发的代码的意思弄明白了。想再请教个问题,若是在word文档中,有文字,有表格,有图片,那么该如何去选择表外和图片外的文字呢?能否用Range.Information来判断?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-20 11:57 | 显示全部楼层
感谢413191246se老师指点,结合您说的帮助文档,把发的代码的意思弄明白了。运行代码出现了个问题,在第二次发的代码中'Sub 正文样式()上面加入 MsgBox Selection,运行后只显示了最后一个表格下方的文字,而不是全部的表外文字,这是怎么回事?再请教个问题,若word中同时存在文字,表格,图片,该如何选择图片和表格以外的文字?

TA的精华主题

TA的得分主题

发表于 2018-11-21 19:36 | 显示全部楼层
楼主,请提供一个包含文字、表格、图片(图形)的示例文档,大家共同研究,我从未考虑包含图片这种情况,因为觉得图片也是占用一个字符的位置。

TA的精华主题

TA的得分主题

发表于 2019-3-14 00:24 | 显示全部楼层
413191246se 发表于 2018-11-20 00:14
虽然 5 楼 ming0018 老师 提供的代码已经包含在《表格全选》宏中,我也有这个宏,但是,经不断尝试,竟然误 ...

413191246se老师,好不容易找见不包含表格的代码,太感谢您啦!如果在指定段落间(如第5段至第12段之间)选择没有表格的文字,怎么修改代码?向您请教。谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 15:21 , Processed in 0.036835 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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