ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]请帮我修改代码以完全达到目的,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-2-12 23:01 | 显示全部楼层 |阅读模式

我本想用下面的代码使附件中的“原始”文档变以“结果”文档,即先根据标记将标记间的内容变为繁体,但它会跳行执行,即只是奇数行执行了,我也知道是第一次执行时把第二行的首标记选中了而跳过了第二行,但不知怎样避免此问题。

Sub Macro1()
'
   Application.ScreenUpdating = False
    Selection.HomeKey Unit:=wdStory
   With Selection.Find
   .ClearFormatting
   .Replacement.ClearFormatting
      Do
        .Execute findtext:="\[HTRW*\](*)\[HT*\]", _
                 replacewith:="^&"
        .MatchWildcards = True
        If .Found = False Then
        Exit Do
        End If
         WordBasic.ToolsSCTCTranslate
        .Parent.Collapse Direction:=wdCollapseEnd
       Loop
   End With
End Sub

还一附加要求,即将文本前加了“[RWO]”,文本后加了“[RW]”(均不含引号)的文本若是繁体汉字就变为简体(因包括这些标记在内的文本还可能被上面所述的标记包含了而先应被转成了繁体)

两种情况的原始标记均不删除。


MIrEwMtI.rar (5.9 KB, 下载次数: 10)
[此贴子已经被作者于2007-2-13 10:26:46编辑过]

fEZwugHe.rar

4.8 KB, 下载次数: 6

[求助]请帮我修改代码以完全达到目的,谢谢!

TA的精华主题

TA的得分主题

发表于 2007-2-13 07:12 | 显示全部楼层

我觉得楼主是否应该把你的逻辑思维告诉我们,而不是以你的代码来干扰我们的思路,当然,代码附上更好。

我提个问题:

在你的附件中,出现了三种标记:[HTRWM]、[RWO]、[RW],它们的结束标记在哪儿?是段落标记吗?还是标点符号?

在你的附件(原始)中,第五第六段落,没有任何标记,结果文档中,它们无需转换成繁体中文,而最后两个段落,也没有任何标记,为何却转化成了繁体中文?

会不会出现其它的组合情况?

谢谢!

[此贴子已经被作者于2007-2-13 7:13:08编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-13 10:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
很对不起,原附件的确会引起误解。我在顶楼已更换了附件,并在其中加了说明。

TA的精华主题

TA的得分主题

发表于 2007-2-13 11:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
对vba我只看懂一点点,只从查找替换角度,看附件两文档,第一次查找替换的特征文本可否改为:
\[HTRW[!^13]{1,}

TA的精华主题

TA的得分主题

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

不知下面的代码是否还有别的问题,或还需要简化?请指点。

Sub Macro1()
'
 '先据标记转繁体
   Application.ScreenUpdating = False
    Selection.HomeKey Unit:=wdStory
   With Selection.Find
   .ClearFormatting
   .Replacement.ClearFormatting
      Do
        .Execute findtext:="\[HTRW*\](*)\[HT([!R?])", _
                 replacewith:="^&"
        .MatchWildcards = True
        If .Found = False Then
        Exit Do
        End If
         WordBasic.ToolsSCTCTranslate
        .Parent.Collapse Direction:=wdCollapseEnd
       Loop
   End With
 '再据标记转简体
  Selection.HomeKey Unit:=wdStory
   With Selection.Find
   .ClearFormatting
   .Replacement.ClearFormatting
      Do
        .Execute findtext:="\[RWO\](*)\[RW\]", _
                 replacewith:="^&"
        .MatchWildcards = True
        If .Found = False Then
        Exit Do
        End If
         WordBasic.ToolsTCSCTranslate Direction:=0, _
             Varients:=0, TranslateCommon:=0
        .Parent.Collapse Direction:=wdCollapseEnd
       Loop
   End With
   Application.ScreenUpdating = True
 
End Sub

[此贴子已经被作者于2007-2-13 12:11:52编辑过]

TA的精华主题

TA的得分主题

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

请楼主测试一下:

Sub TCSC()
    Dim myRange As Range
    Application.ScreenUpdating = False
    Set myRange = ActiveDocument.Content
Again1:     With myRange.Find
        .ClearFormatting
        .MatchWildcards = True
        .Text = "\[HTRW*\[HT[!R]"
        Do While .Execute = True
            myRange.Select
            myRange.TCSCConverter wdTCSCConverterDirectionSCTC, True, True
            myRange.SetRange myRange.End, ActiveDocument.Content.End - 1
            GoTo Again1
        Loop
    End With
    Set myRange = ActiveDocument.Content
Again2:     With myRange.Find
        .ClearFormatting
        .MatchWildcards = True
        .Text = "\[RWO*\[RW\]"
        Do While .Execute = True
            myRange.Select
            myRange.TCSCConverter wdTCSCConverterDirectionTCSC, True, False
            myRange.SetRange myRange.End, ActiveDocument.Content.End - 1
            GoTo Again2
        Loop
    End With
    Application.ScreenUpdating = True
End Sub

此代码中,发现一个“BUG”,故我加上了SELECT方法。

TA的精华主题

TA的得分主题

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

谢谢守柔大侠!

真是不可思议,我测试时发现是死循环,我怀疑是系统问题,重启后运行问题依旧。也看不出有何问题。

我逐语句测试时,发现到了“说明”中的[HTRW*]标记起,到出现[HT*]=出现的问题,文档中删除说明后即可通过。怎样避免这个问题呢?

TA的精华主题

TA的得分主题

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

请楼主再测试一下:

Sub TCSC()
    Dim myRange As Range, lngEnd As Long
    Application.ScreenUpdating = False
    Set myRange = ActiveDocument.Content
Again1:     With myRange.Find
        .ClearFormatting
        .MatchWildcards = True
        .Text = "\[HTRW*\[HT[!R]"
        Do While .Execute = True
            myRange.Select
            lngEnd = myRange.End
            myRange.TCSCConverter wdTCSCConverterDirectionSCTC, True, True
            myRange.SetRange lngEnd, ActiveDocument.Content.End - 1
            GoTo Again1
        Loop
    End With
    Set myRange = ActiveDocument.Content
Again2:     With myRange.Find
        .ClearFormatting
        .MatchWildcards = True
        .Text = "\[RWO*\[RW\]"
        Do While .Execute = True
            myRange.Select
            lngEnd = myRange.End
            myRange.TCSCConverter wdTCSCConverterDirectionTCSC, True, False
            myRange.SetRange lngEnd, ActiveDocument.Content.End - 1
            GoTo Again2
        Loop
    End With
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-14 14:21 | 显示全部楼层

That's wonderful! Thanks a lot!

I've seen the adding sentences.

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

本版积分规则

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

GMT+8, 2024-11-17 13:41 , Processed in 0.063640 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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