ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用代码提取文档中的英文单词数量?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-6 20:27 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

附件.zip (15.01 KB, 下载次数: 3)

TA的精华主题

TA的得分主题

发表于 2023-4-6 20:49 | 显示全部楼层
Sub test()
    With CreateObject("VBScript.RegExp")
         .Global = True
         .Pattern = "[a-zA-Z']"
         For i = 1 To ActiveDocument.Content.Words.Count
             'MsgBox ActiveDocument.Content.Words(i)
             If .test(ActiveDocument.Content.Words(i)) Then r = r + 1
         Next i
    End With
    MsgBox r
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-6 20:51 | 显示全部楼层
我自己鼓捣了一段,统计结果有点误差。
Sub InsertTextAndCountWords()
    ' 获取文档的第一段
    Set first_paragraph = ActiveDocument.Paragraphs(1)
    ' 在段落开头插入指定文本
    first_paragraph.Range.InsertBefore "体裁 记叙文 难度★★★★ 词数(" & CountWords(ActiveDocument.Range) & "个单词)" & vbNewLine
    ' 居中对齐
    first_paragraph.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
End Sub

Function CountWords(rng As Range) As Long
    ' 统计单词数
    Dim words As Long
    words = 0
    With rng.Find
        .MatchWildcards = True
        .Text = "<[A-Za-z]{1,}>"
        .Execute
        Do While .Found
            words = words + 1
            .Execute
        Loop
    End With
    CountWords = words
End Function

TA的精华主题

TA的得分主题

发表于 2023-4-6 22:53 | 显示全部楼层
  1. Sub kkkk()
  2.     Dim rg As Range, ostr$, n&
  3.     ostr = ActiveDocument.Content
  4.     ostr = Replace(Replace(ostr, vbCrLf, " "), vbCr, " ")
  5.     ostr = Trim(ostr)
  6.     n = UBound(Split(ostr, " ")) + 1
  7.     Set rg = Application.ActiveDocument.Range(0, 0)
  8.     rg.Select
  9.     Selection.TypeParagraph
  10.     rg.Text = "体裁 记叙文 难度★★★★  词数 (" & n & ")"
  11.     With ActiveDocument.Paragraphs(1)
  12.         .Format.Alignment = wdAlignParagraphCenter
  13.         .Range.Font.Size = 14
  14.         .Range.Font.Bold = wdToggle
  15.     End With
  16. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-7 07:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
问题已解决,谢谢各位高手的神代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-15 20:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zzpsx 于 2023-4-15 20:42 编辑

高手您好,代码计算单词和手动统计数量略有差距。

image.png

167.zip

15.32 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2023-4-15 21:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zzpsx 发表于 2023-4-15 20:26
高手您好,代码计算单词和手动统计数量略有差距。

多出来的字是插入的那一行的,自己数数看看。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-16 08:07 | 显示全部楼层
本帖最后由 zzpsx 于 2023-4-16 08:23 编辑
杨建营 发表于 2023-4-15 21:46
多出来的字是插入的那一行的,自己数数看看。

我的理解不是这样的。截图中167/191表示,167为选中部分的英文词数,191为整个文档的词数。
代码计算的英语词数为163,和word自己计算的167有差距。可能代码没有把阿拉伯数字计算进去。我想把阿拉伯数字也算进去。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-16 12:29 | 显示全部楼层
Sub GetWordsCount_ActivePage()
'UpdatebyExtendoffice20180829
    Dim xWord As Long
    xWord = ActiveDocument.Bookmarks("\Page").Range.ComputeStatistics(wdStatisticWords)
    MsgBox "The number of words of atcive page: " & xWord, vbInformation, "Kutools for Word"
End Sub
这个代码好像是准确统计的

TA的精华主题

TA的得分主题

发表于 2023-4-16 13:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zzpsx 发表于 2023-4-15 20:26
高手您好,代码计算单词和手动统计数量略有差距。

删掉第一行(即标题)看看,

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-16 02:13 , Processed in 0.047592 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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