ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何让下面的代码重复多次运行?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-2-14 09:38 | 显示全部楼层 |阅读模式
Sub AA1() Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "%f\(([!}]@),([!}]@)\)" .Replacement.Text = "[SX(]\1[]\2[SX)]" .Forward = True .Wrap = wdFindContinue .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub 实际应用中,上面的代码运行时,对像下面的文本要运行2次: %f(a,b+%f(A, B)) 运行一次得:[SX(]a[]b+%f(A, B[SX)]) (这不符合要求) 再运行一次得:[SX(]a[]b+[SX(]A[] B[SX)][SX)] (这符合要求) 而像下面的则要运行3次才能符合要求: \f(a,b+\f(A, \f(A,B))) 更复杂的要运行更多次,怎样才能让文档中类似不论多么复杂的符合条件的字串都一次搞定。是不是要做一个循环语句,怎样实现?请高手指点。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-2-14 09:40 | 显示全部楼层
不好意思,上一帖中倒数第3行“\f(a,b+\f(A, \f(A,B)))”应为“%f(a,b+%f(A,%f(A,B)))”

TA的精华主题

TA的得分主题

发表于 2006-2-14 18:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下是引用[I]ssq1109[/I]在2006-2-14 9:38:39的发言:[BR]Sub AA1() Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "%f\(([!}]@),([!}]@)\)" .Replacement.Text = "[SX(]\1[]\2[SX)]" .Forward = True .Wrap = wdFindContinue .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub 实际应用中,上面的代码运行时,对像下面的文本要运行2次: %f(a,b+%f(A, B)) 运行一次得:[SX(]a[]b+%f(A, B[SX)]) (这不符合要求) 再运行一次得:[SX(]a[]b+[SX(]A[] B[SX)][SX)] (这符合要求) 而像下面的则要运行3次才能符合要求: \f(a,b+\f(A, \f(A,B))) 更复杂的要运行更多次,怎样才能让文档中类似不论多么复杂的符合条件的字串都一次搞定。是不是要做一个循环语句,怎样实现?请高手指点。
能不能看看楼主的WORD文档,是否什么样的查找内容?

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-2-15 09:19 | 显示全部楼层
fWQqfbqo.rar (3.17 KB, 下载次数: 31) 当然可以,请看附件。

TA的精华主题

TA的得分主题

发表于 2006-2-15 11:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

你能不能直接考虑上次代码获得文本的基础上,直接使用VBA.REPLACE函数?

你的格式设置非要保留吗?(上次的),我记得好象是,你最终的目的是什么?

TA的精华主题

TA的得分主题

发表于 2006-2-15 13:06 | 显示全部楼层

呵呵,楼主是要将word中用域代码打出的数学公式转换成方正书版格式的形式.

楼主的这个思路不是很好,一方面正如上所述,替换次数不好确定.

二方面这还只是分式,还有很多如根式,等很难达到预定的目的.

一个好的做法是用公式编辑器mathtype来将数学公式转换成文本后,再替换成方正书版的格式.

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-2-15 13:57 | 显示全部楼层
格式可以不保留,最后只得纯文本即可。怎样直接使用VBA.REPLACE函数?

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-2-15 14:58 | 显示全部楼层
6楼所说的方法我原试过,但它不支持全角字符只得再通过VBA代码实现,也好进一步学习VBA。有些已能很好的转换,但完美转换的确不易.

TA的精华主题

TA的得分主题

发表于 2006-2-16 07:18 | 显示全部楼层
以下是引用[I]ssq1109[/I]在2006-2-15 13:57:01的发言:[BR]格式可以不保留,最后只得纯文本即可。怎样直接使用VBA.REPLACE函数?
我记得我好象帮谁是楼主吧处理过一个EQ域转为带格式文本的代码贴子,这个贴子哪儿去了? 有的话,把你的上次我写的代码粘上来。 [em06]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-2-16 20:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

对不起,今天一天很忙,现在才看到此帖。马上又要去值班了,明天我再写个详细说明。

源码是在精英网那边。

测试一下以下代码
Option Explicit

Sub SetEQCodes()
Dim oField As Field, myRange As Range
Dim TF As Boolean, myDup As Font
'返回选项中的智能剪切与粘贴复选框状态(针对域代码中的空格有影响)
TF = Options.PasteSmartCutPaste
Options.PasteSmartCutPaste = False '清除复选框
Application.ScreenUpdating = False '关闭屏幕更新
For Each oField In ActiveDocument.Fields '遍历活动文档所有域
With oField
If .Type = wdFieldFormula Then '如果有EQ (公式域)域
.ShowCodes = True '显示域代码
.Select '选中
With Selection
Set myRange = .Range '定义一个RANGE对象
myRange.SetRange .Start + 1, .End - 1 '去除域标志后的RANGE对象
myRange.Cut '剪切(目的是保留原有格式)
.Delete '删除域
End With
With myRange
.Paste '粘贴
.InsertBefore "{"
.InsertAfter "}"
Set myDup = .Characters.Last.Font.Duplicate '取得最后一个字符的字体格式("}")
'它总是继承原有域中) 的格式
.Characters.First.Font = myDup '设置"{"的字体格式与"}"一致
End With
End If
End With
Next
Application.ScreenUpdating = True '恢复屏幕更新
Options.PasteSmartCutPaste = TF
End Sub

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

本版积分规则

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

GMT+8, 2024-11-16 09:38 , Processed in 0.035211 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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