ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 判断每一段最后的换行符(回车)前面的字符,是否是。?!)﹞〕〗」]”这些符号 ...

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-2 16:11 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我用文心一言,问了TA无数次,结果代码都报错。

请各位大神帮忙看看,究竟是哪错了。


————————————————————
我的提问:

在word里面写一个VBA代码,

格式:

sub 换行符()
…………
End Sub

这个样的格式



目的:

判断每一段最后的换行符(回车)前面的字符,是否是。?!)﹞〕〗」]”这些符号
如果有,就算了
没有的话,换行符删除


要求:
自变量尽量使用中文字符
每一行代码前,给出详细的注释。每一行都要!



我写的代码如下:
Sub 检查换行符()
    ' 定义变量
    Dim para As paragraph
    Dim rng As Range
    ' 遍历每个段落
    For Each para In ActiveDocument.Paragraphs
        ' 获取段落文本范围
        Set rng = para.Range
        ' 判断段落结束符前的字符是否为指定符号
        If rng.Characters.Last.InStr("。?!)﹞〕〗」]”") = 0 Then
            ' 如果不是,则删除换行符
            rng.MoveEnd wdCharacter, -1
            rng.Text = ""
        End If
    Next para
End Sub



但是不对!
在运行代码之后,把所有段的内容全部删除了,仅保留了换行符(回车)





请认真检查后,重新给出代码

————————————————————
————————————————————
————————————————————
接下来是文心一言的回答:(非常垃圾)




[color=rgba(0, 0, 0, 0.85)]谢谢你,非常感谢你的帮助。我怎样才能更好地理解你的代码呢我怎样才能更好地理解你的代码。



[color=rgba(0, 0, 0, 0.85)]

非常抱歉给您带来了困扰,我理解您对于代码的需求和要求。以下是根据您的要求重新编写的代码,并附上了详细的注释:
vba复制代码

Sub 检查换行符()  

    ' 遍历每个段落  

    Dim para As Paragraph  

    For Each para In ActiveDocument.Paragraphs  

        ' 获取段落文本范围  

        Dim rng As Range  

        Set rng = para.Range  

         

        ' 判断段落结束符前的字符是否为指定符号  

        Dim lastChar As String  

        lastChar = Right(rng.Text, 1) ' 获取最后一个字符  

         

        ' 检查最后一个字符是否为指定符号之一  

        If IsInList(lastChar, "。?!)﹞〕〗」]”“") Then  

            ' 如果最后一个字符是指定符号之一,则不进行任何操作  

            Exit Sub  

        Else  

            ' 如果最后一个字符不是指定符号之一,则删除换行符  

            rng.End = rng.End - 1 ' 将光标移到换行符之前  

            rng.Delete ' 删除换行符和其前面的字符  

        End If  

    Next para  

End Sub  

  

' 辅助函数:检查一个字符是否在给定的列表中  

Function IsInList(char As String, list As String) As Boolean  

    Dim charList As String  

    charList = "。?!)﹞〕〗」]”“" ' 要检查的字符列表  

    isInList = InStr(charList, char) > 0 ' 如果字符在列表中,则返回True;否则返回False  

End Function

这段代码应该能够满足您的需求,判断每个段落的最后一个字符是否是您指定的符号之一。如果是,则不进行任何操作;如果不是,则删除该换行符。同时,我也对之前代码中的错误表示歉意,并感谢您的耐心检查。如果您还有其他问题或需要进一步的帮助,请随时告诉我。





重新生成








[color=rgba(0, 0, 0, 0.85)]
我靠,你故意的吧。怎么翻来覆去的错?!?!?代码来来去去给的都是以一样的。你这个代码运行后,所有文本全部又被删除了!目的:判断每一段最后的换行符(回车)前面的字符,是否是。?!)﹞〕〗」]”这些符号如果有,就算了没有的话,换行符删除要求:自变量尽量使用中文字符每一行代码前,给出详细的注释。每一行都要!



[color=rgba(0, 0, 0, 0.85)]

非常抱歉之前的代码给您带来了困扰。经过仔细检查,我发现之前的代码中确实存在一些问题,导致所有文本被删除。以下是修正后的代码,应该能够正确实现您所需的功能:
vba复制代码

Sub 检查换行符()  

    ' 遍历每个段落  

    Dim para As Paragraph  

    For Each para In ActiveDocument.Paragraphs  

        ' 获取段落文本范围  

        Dim rng As Range  

        Set rng = para.Range  

         

        ' 判断段落结束符前的字符是否为指定符号  

        Dim lastChar As String  

        lastChar = Right(rng.Text, 1) ' 获取最后一个字符  

        If Not IsInList(lastChar, "。?!)﹞〕〗」]”“") Then  

            ' 如果不是指定符号,则删除换行符  

            rng.End = rng.End - 1 ' 将光标移到换行符之前  

            rng.Delete ' 删除换行符和其前面的字符  

        End If  

    Next para  

End Sub  

  

' 辅助函数:检查一个字符是否在给定的列表中  

Function IsInList(char As String, list As String) As Boolean  

    Dim charList As String  

    charList = "。?!)﹞〕〗」]”“" ' 要检查的字符列表  

    isInList = InStr(charList, char) > 0 ' 如果字符在列表中,则返回True;否则返回False  

End Function

这段代码应该能够正确判断每个段落的最后一个字符是否是您指定的符号,如果不是,则删除该换行符。请注意,这段代码会直接修改当前活动文档的内容,请在运行前保存好您的文档。同时,我也对之前代码中的错误表示歉意,并感谢您的耐心检查。如果您还有其他问题或需要进一步的帮助,请随时告诉我。











[color=rgba(0, 0, 0, 0.85)]
错错错!这样代码运行后,所有文本全部被删除了!请认真检查后,重新给出代码。请你结合上面给出的那么多错误的代码,认认真真的检查!!!!



貌似贴不下了
https://yiyan.baidu.com/share/mHdYmihRFh











TA的精华主题

TA的得分主题

发表于 2024-2-2 21:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 检查换行符()
'先全选==>Ctrl+E,Ctrl+L,去除段尾空格
     ' 遍历每个段落
     Dim para As Paragraph
     For Each para In ActiveDocument.Paragraphs
         ' 获取段落文本范围
         Dim rng As Range
         Set rng = para.Range
         ' 判断段落结束符前的字符是否为指定符号
         Dim lastChar As String
         last2Char = Right(Trim(rng.Text), 2) ' 获取最后2个字符
         lastChar = Left(last2Char, 1) ' 获取左边1个字符
         ' 检查最后一个字符是否为指定符号之一
         If IsInList(lastChar, "。?!)﹞〕〗」]”“") = False Then
             ' 如果最后一个字符不是指定符号之一,则删除换行符
             rng.Start = rng.End - 1 ' 将光标移到换行符之前
             rng.Delete ' 删除换行符和其前面的字符
         End If
     Next para
End Sub

' 辅助函数:检查一个字符是否在给定的列表中

Function IsInList(char As String, list As String) As Boolean
     Dim charList As String
     charList = "?!)﹞〕〗」]”“" ' 要检查的字符列表
     IsInList = InStr(charList, char) > 0 ' 如果字符在列表中,则返回True;否则返回False
End Function

TA的精华主题

TA的得分主题

发表于 2024-2-3 09:14 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 过客fppt 于 2024-2-3 09:15 编辑

我想了很久,不知道楼主想干什么,我以为楼主的意思是删除所有空白行,后来是觉得楼主是想把一些段落连接起来,但是某些符号的不要连接在一块,所以我有一个想法:
1,删除所有回车符号
2,在这些特定符号后加上回车
这样还可以把所有的空行也删掉了,不知道楼主觉得是否可行?

TA的精华主题

TA的得分主题

发表于 2024-2-3 09:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-2-3 12:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-2-3 12:30 | 显示全部楼层
Sub test()
    Dim s, s1
    s = "。?!)﹞〕〗」]"
    With ThisDocument.Range.Find
        .Text = "^p"
        Do While .Execute
            .Parent.Select
            With Selection
                .MoveStart 1, -1
                .MoveEnd 1, -1
                s1 = .Text
                If InStr(s, s1) = 0 Then
                    .MoveEnd 1, 1
                    .MoveStart 1, 1
                    .Delete
                End If
                .Start = .End
            End With
        Loop
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2024-2-3 14:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
过客fppt 发表于 2024-2-3 09:14
我想了很久,不知道楼主想干什么,我以为楼主的意思是删除所有空白行,后来是觉得楼主是想把一些段落连接起 ...

那不必要换行的。?!……之类的符号后面都增加换行符了,恐怕不是楼主所愿。

楼主也可参考 https://club.excelhome.net/thread-1681424-1-1.html

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-2-3 15:13 | 显示全部楼层
liuxi001 发表于 2024-2-3 14:52
那不必要换行的。?!……之类的符号后面都增加换行符了,恐怕不是楼主所愿。

楼主也可参考 https://c ...

说得对,我的方法会让所以?都会加上回车,不管原来是不是在段落结束的位置

TA的精华主题

TA的得分主题

发表于 2024-2-4 17:07 | 显示全部楼层
本帖最后由 tcdatongye 于 2024-2-4 17:09 编辑

查找替换:([!。?!)﹞〕〗」]”])^13,替换成\1

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-6 17:08 | 显示全部楼层
zhanglei1371 发表于 2024-2-2 21:31
Sub 检查换行符()
'先全选==>Ctrl+E,Ctrl+L,去除段尾空格
     ' 遍历每个段落

你这个非常哇塞
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 18:37 , Processed in 0.046500 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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