ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] (求助) 英式英语词汇替换美式英语词汇

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-12 11:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢网友提出的方
*我也是编程爱好者,平时比较多与C#打交道,本来用C#来处理此贴问题,但后来想用VBA处理,可我不懂VBA,才发此帖请求老师们出手帮忙,我一旦有了VBA比较符合文本处理(其实此贴本身就是属于文本处理范畴),我就能将VBAb用C#写出来。我依然期盼老师们早点出手帮忙。
--------------
*网友,说的很对,先把单词列表(本贴单词是多列的)读取到缓冲区域,临时保存,这样避免每次读取txt,保存到缓冲区域可以可以反复读取,只要程序不被关闭,程序读取的始终是缓冲区域的单词列表。
*谢谢网友关注
----------------------------------------
再一次顶贴,希望老师给点比较完美的代码。

TA的精华主题

TA的得分主题

发表于 2020-12-12 22:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wdpfox:如确实需要,请提供一下模拟附件(包括各个要素)。

TA的精华主题

TA的得分主题

发表于 2020-12-13 16:57 来自手机 | 显示全部楼层
本帖最后由 wdpfox 于 2020-12-14 11:17 编辑
413191246se 发表于 2020-12-12 22:22
wdpfox:如确实需要,请提供一下模拟附件(包括各个要素)。

我只是想学习,感兴趣而已,明天单位发个附件。


English.rar (300.84 KB, 下载次数: 14)

TA的精华主题

TA的得分主题

发表于 2020-12-14 22:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wdpfox:我的天!5个文档是一样的,而且没有词汇表。怎么查找?

TA的精华主题

TA的得分主题

发表于 2020-12-15 07:30 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
词汇表用一楼的,文件内容一样只是为验证代码

TA的精华主题

TA的得分主题

发表于 2020-12-16 00:57 | 显示全部楼层
* 第 4 行代码:当 s=1 时,英式 转 美式 / 当 s=2 时,美式 转 英式(可自行修改,仅限 1/2 两个值)
* 为自己方便(因为我用的是 Win10-64位系统,汉字直接拷贝到帖子会变成乱码,所以全用英文字符)
  1. Sub aaaa_UK2US()

  2.     If Documents.Count = 0 Then MsgBox "Please open the text file - variants.txt!", 0 + 16: End
  3.     If ActiveDocument.Name <> "variants.txt" Then MsgBox "Please open the text file - variants.txt!", 0 + 16: End
  4.    
  5.     Const s As Long = 1 '(1=UK2US/2=US2UK)
  6.     Dim arr, brr, i&, y$
  7.    
  8.     'arr
  9.     ActiveDocument.Content.Find.Execute "^9*(^13)", , , 1, , , , , , "\1", 2
  10.     ActiveDocument.Paragraphs.Last.Range.Delete
  11.     arr = Split(ActiveDocument.Content.Text, vbCr)
  12.    
  13.     'brr
  14.     y = ActiveDocument.FullName
  15.     ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
  16.     Documents.Open FileName:=y
  17.     ActiveDocument.Content.Find.Execute "<*^9(*^13)", , , 1, , , , , , "\1", 2
  18.     ActiveDocument.Paragraphs.Last.Range.Delete
  19.     brr = Split(ActiveDocument.Content.Text, vbCr)
  20.     ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
  21.    
  22.     'replace
  23.     Dim pPath$, f As Object, fd As Object, fso As Object, Stack$(), top&, n&, stxt$, doc As Document, x&
  24.     pPath = MySelectFolder
  25.     Set fso = CreateObject("Scripting.FileSystemObject")
  26.     top = 1
  27.     ReDim Stack(0 To top)
  28.     Do While top >= 1
  29.         For Each f In fso.getfolder(pPath).Files
  30.             n = n + 1
  31.             stxt = f.Path
  32.             If stxt Like "*.doc*" Then
  33.                 Set doc = Documents.Open(FileName:=stxt)
  34. '-----------------------------------------------------------
  35.                 For i = 0 To UBound(arr) - 1
  36.                     With Selection
  37.                         .HomeKey 6
  38.                         With .Find
  39.                             .ClearFormatting
  40.                             If s = 1 Then
  41.                                 .Text = arr(i)
  42.                                 .Replacement.Text = brr(i)
  43.                             Else
  44.                                 .Text = brr(i)
  45.                                 .Replacement.Text = arr(i)
  46.                             End If
  47.                             .Forward = True
  48.                             .MatchWildcards = False
  49.                             .MatchWholeWord = True
  50.                             Do While .Execute
  51.                                 With .Parent
  52.                                     With .Font
  53.                                         .Color = wdColorRed
  54.                                         .Underline = wdUnderlineSingle
  55.                                     End With
  56.                                     .Start = .End
  57.                                 End With
  58.                             Loop
  59.                         End With
  60.                     End With
  61.                 Next
  62. '------------------------------------------------------------
  63.                 doc.Close SaveChanges:=wdSaveChanges
  64.                 x = x + 1
  65.             End If
  66.         Next
  67.         For Each fd In fso.getfolder(pPath).SubFolders
  68.             Stack(top) = fd.Path
  69.             top = top + 1
  70.             If top > UBound(Stack) Then ReDim Preserve Stack(0 To top)
  71.         Next
  72.         If top > 0 Then pPath = Stack(top - 1): top = top - 1
  73.     Loop
  74.     Set f = Nothing
  75.     Set fd = Nothing
  76.     Set fso = Nothing
  77.     MsgBox "Total files = " & n & vbCr & "Word Files(*.docx/*.doc) = " & x, 0 + 48
  78. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-2 19:52 | 显示全部楼层
网友,你在16的代码是写给本贴的还是? 如果不是再一次顶贴

TA的精华主题

TA的得分主题

发表于 2021-1-2 22:36 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-9 11:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-1-20 22:42 | 显示全部楼层
可试试如下代码。仅针对一个文档,未提供选择。
在我的win10 和Office 2019环境下测试,正则部分的代码运行超慢,而在WPS下运行正常,两者速度相差可超100倍,未知原因。另外,代码在WPS下运行,不能实现单词相应的大小写格式替换,需改变思路另行转换。
  1. Sub test()
  2.     '英式与美式英语单词替换
  3.     Dim fso, f
  4.     Dim myRegExp, myMatches, myMatch
  5.     Dim c As Integer
  6.     Dim i As Integer
  7.     Dim n As Integer
  8.     Dim sum As Integer
  9.     Dim txt As String
  10.     Dim data() As String '对照表文件词条数据
  11.     Dim data2() As String '有实例词条的匹配信息
  12.     Dim info() As String '词条对照表数据
  13.     Dim info2() As String '实际查找替换数据
  14.     Dim st As Single
  15.    
  16.     st = Timer
  17.     Set fso = CreateObject("Scripting.FileSystemObject")
  18.     Set f = fso.OpenTextFile("d:\临时\variants.txt", 1) '自行指定词汇文件地址
  19.     data = Split(f.Readall, vbCrLf)
  20.     f.Close
  21.     c = UBound(data)
  22.     ReDim info(1, c)
  23.     For i = 0 To c
  24.         info(0, i) = Split(data(i), vbTab)(0)
  25.         info(1, i) = Split(data(i), vbTab)(1)
  26.     Next
  27.   
  28.     txt = ActiveDocument.Content.Text
  29.     Set myRegExp = CreateObject("VBScript.RegExp")
  30.     For i = 0 To c
  31.         With myRegExp
  32.             .Pattern = "\b" & info(0, i) & "\b"
  33.             .Global = True
  34.             .Ignorecase = True
  35.             Set myMatches = .Execute(txt)
  36.             If myMatches.Count > 0 Then
  37.                 sum = sum + myMatches.Count
  38.                 ReDim Preserve info2(1, n)
  39.                 info2(0, n) = info(0, i)
  40.                 info2(1, n) = info(1, i)
  41.                 ReDim Preserve data2(n)
  42.                 data2(n) = n + 1 & vbTab & info(0, i) & vbTab & myMatches.Count & vbTab & info(1, i)
  43.                 n = n + 1
  44.             End If
  45.         End With
  46.     Next

  47.     Options.DefaultHighlightColorIndex = wdYellow
  48.     Application.ScreenUpdating = False
  49.     For i = 0 To UBound(info2, 2)
  50.         With ActiveDocument.Content.Find
  51.             .Text = info2(0, i)
  52.             .Replacement.Text = info2(1, i)
  53.             .Replacement.Highlight = True
  54.             .MatchWholeWord = True
  55.             .Execute Replace:=wdReplaceAll
  56.         End With
  57.     Next
  58.    
  59.     With Documents.Add '新文档输出处理信息
  60.         .Content.Text = "共找到" & UBound(data2) + 1 & "个词汇," & sum & "处,用时" & Round(Timer - st, 2) & "秒。内容见下表:" & vbCrLf _
  61.             & "序号" & vbTab & "匹配词" & vbTab & "匹配数" & vbTab & "替换的词" & vbCrLf & Join(data2, vbCrLf)
  62.         .Range(.Paragraphs(2).Range.Start, .Range.End).ConvertToTable.Borders.Enable = True
  63.         .Tables(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
  64.     End With
  65.     Application.ScreenUpdating = True
  66. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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