ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么用VBA判断段落结尾是否为某些字符?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-14 14:53 | 显示全部楼层 |阅读模式
我想判断,是否所有段落的最后一个字符都是以。 ? ! 这样的字符为结尾,如果不是,则标红段落。
这个用VBA怎么写?

TA的精华主题

TA的得分主题

发表于 2012-2-14 15:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这好规则好像用正则表达示可以吧。
具体的我不太会有。
呵呵。
还是请高的手来解决了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-14 16:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-2-14 16:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
注意都是全角
Sub Macro1()
Dim s As Paragraph, p As Integer
For Each s In ActiveDocument.Paragraphs
p = Len(s.Range.Text)
If p <> 1 Then
If Left(Right(s.Range.Text, 2), 1) <> "?" And Left(Right(s.Range.Text, 2), 1) <> "!" Then s.Range.Font.Color = wdColorDarkRed
End If
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2012-2-14 17:23 | 显示全部楼层
4楼也可以用Like运算符进行比较,如:
If s.Range.Text Like "*[?!]?" = False Then
将所要求的单个字符一起放进中括号内即可。
当然,如果段落是在表格中时,代码要稍作修改

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-15 07:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
多谢sylun指点,原来总以为[]只用在查找替换

TA的精华主题

TA的得分主题

发表于 2012-2-15 03:16 | 显示全部楼层
本帖最后由 413191246se 于 2012-2-25 10:59 编辑

Sub 最后字符判断()
' 如果段落最后一个字符是,。?(全角标点)中的一种,则段落变红色
    Dim i As Paragraph
    For Each i In ActiveDocument.Paragraphs
        If i.Range Like "*[,。?]" & vbCr Then i.Range.Font.Color = wdColorRed
    Next
End Sub

*** 在 SQH 老弟代码的基础上,在 sylun 大侠 的指导下,我完善了一下楼主的问题解决代码,如上所示!又学到了一些知识,比我个人的理解又进一步,谢谢两位!3Q!
*** 从下面两行代码可以看得出我和 SQH 老弟的差别(我的落后,他的先进——原来最后一个字符还可以用两个函数来取值!——实际上真正的最后的字符是段落标记,也叫回车符,这里知道要取段落文本,不包含回车符就行了):

' Display Last Character
' my code
    MsgBox Selection.Range.Characters(Len(Selection.Range) - 1)
' sqh's code
    MsgBox Left(Right(Selection.Range.Text, 2), 1)

TA的精华主题

TA的得分主题

发表于 2012-2-15 12:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
同感!——看过网上有人说这个 range 可带可不带,关于取 TXT 值时,我刚才又试了一下,见鬼了!以下五行代码都是取段落最后一个字符的,效果是一样的!(但楼主还是应用6楼的宏即可,我也喜欢这个LIKE语句)
' 显示段落最后一个字符(以下五行代码效果相同)
    MsgBox Selection.Range.Characters(Len(Selection.Range) - 1)
    MsgBox Left(Right(Selection.Range.Text, 2), 1)
    MsgBox Left(Right(Selection.Range, 2), 1)
    MsgBox Left(Right(Selection.Text, 2), 1)
    MsgBox Left(Right(Selection, 2), 1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-21 13:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢各位帮助,如果是对于查找段落中是否包含有 字符串1 ,如果包含,则删除当前段落。
然后检查整个文档。
这个用vba怎么写。谢谢。
另外, 学习word的vba,有什么书或是电子书可以看的吗?

TA的精华主题

TA的得分主题

发表于 2012-2-23 12:44 | 显示全部楼层
Sub test3()
Dim s As Paragraph
For Each s In ActiveDocument.Paragraphs
If s.Range Like "*字符串1*" Then s.Range.Delete'
Next
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 14:59 , Processed in 0.038543 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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