ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何删除段落中的空格而保留表格中的空格

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-1-13 21:07 | 显示全部楼层

回复 10楼 我爱myvba 的帖子

试了一下,可以运行啊,还很快的
雨雪霏霏老师,能注释一下吗?
能否变通一下,比如对表格外的文字进行字体、字号、段落设置等操作?
只对表格进行设置,又该怎样写?

[ 本帖最后由 szqhb 于 2010-1-13 21:16 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-1-14 11:03 | 显示全部楼层

VBA:删除表格外的空格、删除表格内的空格

原帖由 我爱myvba 于 2010-1-13 12:40 发表
谢谢雨雪霏霏朋友,这段代码从理论上是可行的,但实际运行就不行了,每个字符都要检查,实在是太慢了。

  是的,以上代码对付短文还行。如果在长文档中运行,就近似死机了。

原帖由 szqhb 于 2010-1-13 21:07 发表
试了一下,可以运行啊,还很快的
雨雪霏霏老师,能注释一下吗?
能否变通一下,比如对表格外的文字进行字体、字号、段落设置等操作?
只对表格进行设置,又该怎样写?

  称“老师”不敢当!家园里,神仙排班列队,我给孙大圣提蟠桃篮子都不够格!呵呵。
  注释刚才补上了,请见前页。

  以下是新的两段代码,请 我爱myvba 兄、szqhb兄试试:

Sub 删除全文表格外的空格__隐藏和解隐藏文字法()
'2010.01.14 雨雪霏霏试写。
'此宏通过“全文的文字设为隐藏”等一系列关于“隐藏文字”的操作进行迂回空格替换,
'如果您的文档不方便进行“隐藏文字”的一系列操作,请改以其他文字格式进行。


    Dim myRange As Range, myTable As Table
    Application.ScreenUpdating = False '关闭屏幕更新

   
    ActiveDocument.Range.Font.Hidden = True '隐藏文档中所有文字
    For Each myTable In ActiveDocument.Tables '逐个在所有表格中循环
        myTable.Range.Font.Hidden = False '显示表格中的所有文字
    Next '继续此一循环

   
    Set myRange = ActiveDocument.Range '为下一步的“替换”定义一个作用范围,新范围为全文档
    With myRange.Find '在此范围内“查找”
        .ClearFormatting '清除“查找”时的所有格式
        .Font.Hidden = True '重新定义“查找”时的格式为隐藏文字,只查找隐藏文字,亦即对表格外的全文进行查找
        .Execute FindText:="[  ]", replacewith:="", Wrap:=wdFindContinue, MatchWildcards:=True, Replace:=wdReplaceAll
        '执行查找。
        '查找文本为半角空格或全角空格。
        '替换文本为空。
        '“继续查找”而不显示“是否继续查找”的对话框,
        '查找时使用“通配符”。
        '全文档替换。

    End With
    myRange.Font.Hidden = False '显示全文档的文字

   
    Application.ScreenUpdating = True '恢复屏幕更新
End Sub



Sub 删除全文表格中的空格()
'2010.01.14 雨雪霏霏试写。


    Dim myRange As Range, myTable As Table
    Application.ScreenUpdating = False    '关闭屏幕更新

   
    For Each myTable In ActiveDocument.Tables    '逐个在所有表格中循环
        Set myRange = myTable.Range '为下一步的“替换”定义一个作用范围,新范围为表格之一
        With myRange.Find
            .ClearFormatting    '清除“查找”时的所有格式
            .Execute FindText:="[  ]", replacewith:="", Wrap:=wdFindStop, MatchWildcards:=True, Replace:=wdReplaceAll
            '执行查找。
            '查找文本为半角空格或全角空格。
            '替换文本为空。
            '“不再继续查找全文”而不显示“是否继续查找”的对话框,
            '查找时使用“通配符”。
            '某一表格内全部替换。

        End With
    Next

   
    Application.ScreenUpdating = True    '恢复屏幕更新
End Sub


[ 本帖最后由 雨雪霏霏 于 2010-1-14 11:05 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-1-14 14:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有注释很好,收藏研究,据实应用

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-14 23:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
雨雪霏霏老师的上面两段代码真是不错,非常好,解决了我的大问题。谢谢。
想再请教一下,如果文档中有英文,能不能保留英文之间的半角空格,如果都删除的话,英文字母就都连在一起了。

TA的精华主题

TA的得分主题

发表于 2010-1-14 23:59 | 显示全部楼层
这个题目就有挑战性,不过,一般遇不到的

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-15 22:25 | 显示全部楼层
  以下是 ... [/quote]
以下是新的两段代码,请 我爱myvba 兄、szqhb兄试试:

Sub 删除全文表格外的空格__隐藏和解隐藏文字法()
'2010.01.14 雨雪霏霏试写。
'此宏通过“全文的文字设为隐藏”等一系列关于“隐藏文字”的操作进行迂回空格替换,
'如果您的文档不方便进行“隐藏文字”的一系列操作,请改以其他文字格式进行。


    Dim myRange As Range, myTable As Table
    Application.ScreenUpdating = False '关闭屏幕更新

   
    ActiveDocument.Range.Font.Hidden = True '隐藏文档中所有文字
    For Each myTable In ActiveDocument.Tables '逐个在所有表格中循环
        myTable.Range.Font.Hidden = False '显示表格中的所有文字
    Next '继续此一循环

   
    Set myRange = ActiveDocument.Range '为下一步的“替换”定义一个作用范围,新范围为全文档
    With myRange.Find '在此范围内“查找”
        .ClearFormatting '清除“查找”时的所有格式
        .Font.Hidden = True '重新定义“查找”时的格式为隐藏文字,只查找隐藏文字,亦即对表格外的全文进行查找
        .Execute FindText:="[  ]", replacewith:="", Wrap:=wdFindContinue, MatchWildcards:=True, Replace:=wdReplaceAll
        '执行查找。
        '查找文本为半角空格或全角空格。
        '替换文本为空。
        '“继续查找”而不显示“是否继续查找”的对话框,
        '查找时使用“通配符”。
        '全文档替换。
    End With
    myRange.Font.Hidden = False '显示全文档的文字

   
    Application.ScreenUpdating = True '恢复屏幕更新
End Sub



Sub 删除全文表格中的空格()
'2010.01.14 雨雪霏霏试写。


    Dim myRange As Range, myTable As Table
    Application.ScreenUpdating = False    '关闭屏幕更新

   
    For Each myTable In ActiveDocument.Tables    '逐个在所有表格中循环
        Set myRange = myTable.Range '为下一步的“替换”定义一个作用范围,新范围为表格之一
        With myRange.Find
            .ClearFormatting    '清除“查找”时的所有格式
            .Execute FindText:="[  ]", replacewith:="", Wrap:=wdFindStop, MatchWildcards:=True, Replace:=wdReplaceAll
            '执行查找。
            '查找文本为半角空格或全角空格。
            '替换文本为空。
            '“不再继续查找全文”而不显示“是否继续查找”的对话框,
            '查找时使用“通配符”。
            '某一表格内全部替换。
        End With
    Next

   
    Application.ScreenUpdating = True    '恢复屏幕更新
End Sub

雨雪霏霏老师的上面两段代码真是不错,非常好,解决了我的大问题。谢谢。
想再请教一下,如果文档中有英文,能不能保留英文之间的半角空格,如果都删除的话,英文字母就都连在一起了。

[ 本帖最后由 我爱myvba 于 2010-1-15 22:28 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-1-16 08:57 | 显示全部楼层

VBA:删除表内或表外的空格__保留英文间空格

原帖由 我爱myvba 于 2010-1-15 22:25 发表
  ……
  雨雪霏霏老师的上面两段代码真是不错,非常好,解决了我的大问题。谢谢。
  想再请教一下,如果文档中有英文,能不能保留英文之间的半角空格,如果都删除的话,英文字母就都连在一起了。...

  请 我爱myvba 兄试试以下代码:


Sub 删除全文表格中的空格__保留英文间空格()
'2010.01.16 雨雪霏霏试写。


    Dim myRange As Range, myTable As Table
    Application.ScreenUpdating = False    '关闭屏幕更新

   
    For Each myTable In ActiveDocument.Tables    '逐个在所有表格中循环
        Set myRange = myTable.Range '为下一步的“替换”定义一个作用范围,新范围为表格之一
        With myRange.Find
            .ClearFormatting    '清除“查找”时的所有格式
            '以下两个替换(必须是两次)将表格内所有英文间的一个或多个空格替换为“刀牛试小”
            .Execute FindText:="([a-zA-Z.,])[  ]{1,}([a-zA-Z])", replaceWith:="\1刀牛试小\2", _
                                Wrap:=wdFindStop, MatchWildcards:=True, Replace:=wdReplaceAll
            .Execute FindText:="([a-zA-Z.,])[  ]{1,}([a-zA-Z])", replaceWith:="\1刀牛试小\2", _
                                Wrap:=wdFindStop, MatchWildcards:=True, Replace:=wdReplaceAll
            '以下将表格内所有空格去除
            .Execute FindText:="[  ]{1,}", replaceWith:="", _
                                Wrap:=wdFindStop, MatchWildcards:=True, Replace:=wdReplaceAll
            '以下将所有“刀牛小试”替换为一个半角空格
            .Execute FindText:="刀牛试小", replaceWith:=" ", _
                                Wrap:=wdFindStop, MatchWildcards:=False, Replace:=wdReplaceAll
        End With
    Next
   
    Application.ScreenUpdating = True    '恢复屏幕更新
End Sub



Sub 删除全文表格外的空格__隐藏和解隐藏文字法__保留英文间空格()
'2010.01.16 雨雪霏霏试写。
'此宏通过“全文的文字设为隐藏”等一系列关于“隐藏文字”的操作进行迂回空格替换,
'如果您的文档不方便进行“隐藏文字”的一系列操作,请改以其他文字格式进行。



    Dim myRange As Range, myTable As Table
    Application.ScreenUpdating = False    '关闭屏幕更新


    ActiveDocument.Range.Font.Hidden = True    '隐藏文档中所有文字
    For Each myTable In ActiveDocument.Tables    '逐个在所有表格中循环
        myTable.Range.Font.Hidden = False    '显示表格中的所有文字
    Next    '继续此一循环


    Set myRange = ActiveDocument.Range    '为以下“替换”定义一个作用范围,新范围为全文档
    With myRange.Find    '在此范围内“查找”
        .ClearFormatting    '清除“查找”时的所有格式
        .Font.Hidden = True    '重新定义“查找”时的格式为隐藏文字,只查找隐藏文字,亦即对表格外的全文进行查找
        '以下两次替换(必须是两次)将表格外所有英文间的一个或多个空格替换为“刀牛试小”
        .Execute FindText:="([a-zA-Z.,])[  ]{1,}([a-zA-Z])", replaceWith:="\1刀牛试小\2", _
                            Wrap:=wdFindStop, MatchWildcards:=True, Replace:=wdReplaceAll
        .Execute FindText:="([a-zA-Z.,])[  ]{1,}([a-zA-Z])", replaceWith:="\1刀牛试小\2", _
                            Wrap:=wdFindStop, MatchWildcards:=True, Replace:=wdReplaceAll
        '以下将表格外所有空格去除
        .Execute FindText:="[  ]{1,}", replaceWith:="", _
                            Wrap:=wdFindStop, MatchWildcards:=True, Replace:=wdReplaceAll
        '以下将所有“刀牛小试”替换为一个半角空格
        .Execute FindText:="刀牛试小", replaceWith:=" ", _
                            Wrap:=wdFindStop, MatchWildcards:=False, Replace:=wdReplaceAll
    End With
   

    myRange.Font.Hidden = False '显示全文档的文字


    Application.ScreenUpdating = True    '恢复屏幕更新
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-16 13:07 | 显示全部楼层
原帖由 雨雪霏霏 于 2010-1-16 08:57 发表

  请 我爱myvba 兄试试以下代码:


Sub 删除全文表格中的空格__保留英文间空格()
'2010.01.16 雨雪霏霏试写。


    Dim myRange As Range, myTable As Table
    Application.ScreenUpdating = False  ...

非常漂亮的代码,谢谢雨雪霏霏老师。
遇到这样技术好、人又好的老师是我的荣幸,再次谢谢雨雪霏霏老师!

TA的精华主题

TA的得分主题

发表于 2012-3-8 17:25 | 显示全部楼层
雨雪霏霏 发表于 2010-1-16 08:57
  请 我爱myvba 兄试试以下代码:

myTable As Table 怎么不能运行呀?

TA的精华主题

TA的得分主题

发表于 2014-4-3 20:53 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 17:43 , Processed in 0.044915 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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