ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么对选中的每一个单词实现如下效果(不知能否实现)?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-4-29 23:10 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 666611430 于 2020-4-30 19:26 编辑

在开发一个插件时,由于初学者,不知道怎么实现如下效果。请大佬出现帮忙,为此感激不尽。
1.在 ms word 离,有英文文章,手动选中了文章中的几个单词,如图所示。

1.png
2.要实现的效果,如图所示:
2.png


要求:如果有选中的内容,就对所选内容实现 图2所示的效果; 如果没有选中的内容,就对所有单词实现 图2 所示的效果,也就是说对每一个单词后,显示图2的效果。比如:file(file, 长度为:4), 括号里有单词本身,长度。

有如下几个要求:
1.有选中的内容(包括 :单选,多选,连续选中,不连续选中),就对选中的内容实现上述效果。
2.如果没有选中内容,就对所有的内容要实现上述效果。
3.英文文章是以各种英文内容单词以标点符号隔开的,无论是哪一种选中,如果选中内容有标点符号,只对单词实现上述效果。
4.无论文字方向从左还是从右(有些语言是从右开始,有的从左开始)都能实现




补充内容 (2020-5-3 10:29):
*问题已解决。感谢 ming0018,sylun 等老师们的关注和指点。

TA的精华主题

TA的得分主题

发表于 2020-4-30 08:44 | 显示全部楼层
如果有选中的内容,是单选还是多选?或者两者皆可?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-30 10:06 | 显示全部楼层
ming0018 发表于 2020-4-30 08:44
如果有选中的内容,是单选还是多选?或者两者皆可?

谢谢你的回复。
  
两者都可以,只要有选中的内容只对选中的内容实现上述效果,如果没有选中任何内容,就对所有的单词进行上述效果。

希望你帮忙。

TA的精华主题

TA的得分主题

发表于 2020-4-30 11:38 | 显示全部楼层
666611430 发表于 2020-4-30 10:06
谢谢你的回复。
  
两者都可以,只要有选中的内容只对选中的内容实现上述效果,如果没有选中任何内容, ...

下午有空的时候看一下吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-30 13:06 | 显示全部楼层
ming0018 发表于 2020-4-30 11:38
下午有空的时候看一下吧

谢谢你抽空回复。因为能力有限,没法实现这个效果。英文文章内容特别多,能在速度上达到最快吗?这个有点急了,能不能分享思路?希望你尽快帮个忙一下。谢谢。

TA的精华主题

TA的得分主题

发表于 2020-4-30 15:08 | 显示全部楼层
666611430 发表于 2020-4-30 13:06
谢谢你抽空回复。因为能力有限,没法实现这个效果。英文文章内容特别多,能在速度上达到最快吗?这个有点 ...
  1. Sub main()
  2.     Dim doc As Document, Rng As Range, RngS As Range, WordStr As String, reg As Object, Par As Paragraph
  3.     Set doc = ActiveDocument
  4.     Set reg = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
  5.     With reg
  6.         .Global = True    '设置全局可用
  7.         .Pattern = "[a-zA-Z]+"
  8.     End With
  9.     If Len(Selection.Range.Text) > 0 Then
  10.         Set Rng = Selection.Range
  11.         Do While Rng.Characters(1) = " " And Len(Rng.Text) > 0
  12.             Rng.MoveStart wdCharacter, 1
  13.         Loop
  14.         If Len(Rng.Text) > 0 Then
  15.             Rng.SetRange Rng.Words(1).Start, Rng.End
  16.             Set RngS = doc.Range(Rng.End, Rng.End)
  17.             Do While RngS.Start <> Rng.Start
  18.                 RngS.Move wdWord, -1
  19.                 WordStr = RTrim(RngS.Words(1).Text)
  20.                 If reg.test(WordStr) Then
  21.                     RngS.Words(1).Characters(Len(WordStr)).InsertAfter "(" & WordStr & ",长度为:" & Len(WordStr) & ")"
  22.                 End If
  23.             Loop
  24.         End If
  25.     Else
  26.         For Each Par In doc.Paragraphs
  27.             Set Rng = doc.Range(Par.Range.End - 1, Par.Range.End - 1)
  28.             Do While Rng.Start <> Par.Range.Start
  29.                 Rng.Move wdWord, -1
  30.                 WordStr = RTrim(Rng.Words(1).Text)
  31.                 If reg.test(WordStr) Then
  32.                     Rng.Words(1).Characters(Len(WordStr)).InsertAfter "(" & WordStr & ",长度为:" & Len(WordStr) & ")"
  33.                 End If
  34.             Loop
  35.         Next
  36.     End If
  37. End Sub
复制代码


没时间 随便写了一下 你先参考一下吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-30 15:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ming0018 发表于 2020-4-30 15:08
没时间 随便写了一下 你先参考一下吧

谢谢大神抽空看了。我试了一下,结果是如果有不连续多选内容的话,只对最后一个选中单词有效果了。其他还是跟原来一样,你再看一下,大神。我先自己先参考参考。谢谢你

论坛里有一个“编码转换” 的帖子,我项参考那儿的代码,但始终没有成功。希望你再一次优化代码,提高运行速度,因为文章内容非常多,手动修改也很棘手。希望你再一次看一下,谢谢。

TA的精华主题

TA的得分主题

发表于 2020-4-30 16:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
666611430 发表于 2020-4-30 15:51
谢谢大神抽空看了。我试了一下,结果是如果有不连续多选内容的话,只对最后一个选中单词有效果了。其他还 ...

多选请大神来帮忙吧,小神的方法不是太效率。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-30 16:36 | 显示全部楼层
ming0018 发表于 2020-4-30 16:04
多选请大神来帮忙吧,小神的方法不是太效率。

请你不要误会,我根本没有说你代码不太效率的意思,已经很不错了。这个代码已经很大程度上满足了我的要求,如果对多选情况也能实现就更好了。我已经老半天了没法完成。有你的代码,我先用一下。希望你再抽空优化一下代码,谢谢你了。

TA的精华主题

TA的得分主题

发表于 2020-4-30 20:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
可试试如下代码:
  1. Sub test()
  2.     Dim i As Integer
  3.    
  4.     Application.ScreenUpdating = False
  5.     Options.DefaultHighlightColorIndex = 7 'wdYellow
  6.     With Selection
  7.         If .Type = 1 Then  '无选中内容时
  8.             For i = .Paragraphs.First.Range.Words.Count To 1 Step -1
  9.                 With .Paragraphs.First.Range.Words(i)  '暂只针对光标所在段落
  10.                     If Right(.Text, 1) = Chr(32) Then .End = .End - 1
  11.                     '只针对含字母或数字的词,可自行调整
  12.                     If .Text Like "*[0-9A-Za-z]*" Then
  13.                         .Text = .Text & "(" & Trim(.Text) & ",长度为:" & Len(.Text) & ")"
  14.                     End If
  15.                 End With
  16.             Next
  17.         ElseIf .Type = 2 Then  '普通选定时
  18.             Dialogs(742).Execute
  19.             With ActiveDocument.Content.Find
  20.                 .Highlight = True
  21.                 Do While .Execute
  22.                     With .Parent
  23.                         If .Text Like "*[0-9A-Za-z]*" Then
  24.                             If Right(.Text, 1) = Chr(32) Then .End = .End - 1
  25.                             .Text = .Text & "(" & Trim(.Text) & ",长度为:" & Len(Trim(.Text)) & ")"
  26.                             .Editors.Add -1
  27.                             .Collapse 0
  28.                         End If
  29.                     End With
  30.                 Loop
  31.                 .Replacement.Highlight = False
  32.                 .Parent.WholeStory
  33.                 .Execute Replace:=2
  34.                 ActiveDocument.SelectAllEditableRanges -1
  35.                 ActiveDocument.DeleteAllEditableRanges -1
  36.             End With
  37.         End If
  38.     End With
  39.     Application.ScreenUpdating = True
  40.     MsgBox "Ok!"
  41. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 11:39 , Processed in 0.032269 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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