ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求教:如何用VBA实现“删除段首空格”...

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-4-6 11:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
运行到range()处报错,子过程或函数未定义。

TA的精华主题

TA的得分主题

发表于 2014-7-17 23:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
守柔 发表于 2004-7-4 17:07
请参考以下代码:Sub ReplSpace()
Dim i As Paragraph, MyStart As Long
Application.ScreenUpdating = F ...
  1. Sub ReplSpace()
  2. '删除段首空格
  3. Dim i As Paragraph, MyStart As Long
  4. Application.ScreenUpdating = False
  5. For Each i In ActiveDocument.Paragraphs
  6. MyStart = i.Range.Start
  7. Range(Start:=MyStart, End:=MyStart).Select
  8. Selection.EndKey Unit:=wdLine, Extend:=wdExtend
  9. With Selection
  10. .Find.ClearFormatting
  11. .Find.Replacement.ClearFormatting
  12. With .Find
  13. .Text = " "
  14. .Replacement.Text = "" '查找空格
  15. .Forward = True
  16. .MatchByte = False '不区分半角全角
  17. End With
  18. .Find.Execute Replace:=wdReplaceAll
  19. End With
  20. Next
  21. Application.ScreenUpdating = True
  22. End Sub
复制代码
首柔的代码删除了所有的空格,而不是段落首空格,需要修改。
  1. Sub InsertSpace()
  2. '插入段首空格
  3. Dim i As Paragraph
  4. For Each i In ActiveDocument.Paragraphs
  5. i.Range.InsertBefore "  " '注意此处是两个全角空格,请在全角下输入此处.
  6. Next
  7. End Sub
复制代码
有时间学习修改。

TA的精华主题

TA的得分主题

发表于 2020-3-24 11:56 | 显示全部楼层
hemd 发表于 2010-4-6 11:09
运行到range()处报错,子过程或函数未定义。

把range替换成 ActiveDocument.Range

TA的精华主题

TA的得分主题

发表于 2020-3-24 19:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
可以试下这个代码:
ActiveDocument.Content.Find.Execute FindText:="^p([  ]{1,})", MatchWildcards:=True, replacewith:="^p", Replace:=wdReplaceAll
上述代码在WPS中测试通过,WORD中因使用通配符反而出错。

另求各位大神指点在WPS中如何用代码替换不间断空格(\u00A0)。

TA的精华主题

TA的得分主题

发表于 2020-3-25 00:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
"不间断空格"用代码表示为:^s,建议 楼主 想玩 VBA,最好用 Word。

TA的精华主题

TA的得分主题

发表于 2020-3-25 16:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 删除段首空格()

Dim i As Integer

For i = 1 To ActiveDocument.Paragraphs.Count

   ActiveDocument.Paragraphs(i).Range.Select

    Call DelSpacesAheadPara

    Call 设置段落格式之缩进(0, 0, 0)

    Debug.Print ActiveDocument.Paragraphs(i).OutlineLevel, ActiveDocument.Paragraphs(i).Range.Font.Name

Next i

End Sub

Sub 设置段落格式()

Dim i As Integer

Dim flag As Boolean

Application.ScreenUpdating = False

For i = 1 To ActiveDocument.Paragraphs.Count

    Debug.Print ActiveDocument.Paragraphs(i).Range.Text

    If ActiveDocument.Paragraphs(i).Range.Text = "参考文献^p" Then

       Exit For '仅设置参考文献以前的段落

    End If

    '正文宋体的段落 颜色和缩进设置 蓝色

    If ActiveDocument.Paragraphs(i).OutlineLevel = wdOutlineLevelBodyText And ActiveDocument.Paragraphs(i).Range.Font.Name = "宋体" Then

       ActiveDocument.Paragraphs(i).Range.Select

      ActiveDocument.Paragraphs(i).Range.Font.ColorIndex = wdBlue

       Call 设置段落格式之缩进(0, 0, 2)

    End If

    '楷体_GB2312的段落颜色和缩进设置 红色

    If ActiveDocument.Paragraphs(i).OutlineLevel = wdOutlineLevelBodyText And ActiveDocument.Paragraphs(i).Range.Font.Name = "楷体_GB2312" Then

       ActiveDocument.Paragraphs(i).Range.Select

      ActiveDocument.Paragraphs(i).Range.Font.ColorIndex = wdRed

       Call 设置段落格式之缩进(2, 0, 2)

    End If

    '非单一字体的段落 颜色和缩进设置 粉色

    If ActiveDocument.Paragraphs(i).OutlineLevel = wdOutlineLevelBodyText And ActiveDocument.Paragraphs(i).Range.Font.Name = "" Then

       ActiveDocument.Paragraphs(i).Range.Select

      ActiveDocument.Paragraphs(i).Range.Font.ColorIndex = wdPink

       Call 设置段落格式之缩进(0, 0, 2)

    End If

Next i

Application.ScreenUpdating = True

End Sub

Sub 设置段落格式之缩进(LIndent, RIndent, FIndent)

    With Selection.ParagraphFormat

       .CharacterUnitLeftIndent = LIndent

       .CharacterUnitRightIndent = RIndent

       .CharacterUnitFirstLineIndent = FIndent

       .LeftIndent = CentimetersToPoints(LIndent)

       .RightIndent = CentimetersToPoints(RIndent)

       .FirstLineIndent = CentimetersToPoints(FIndent)

    End With

End Sub

Private Sub DelSpacesAheadPara()
'删除段首空格



    If Len(Selection.Text) < 2 Then Exit Sub

    On Error Resume Next



    Selection.MoveStart unit:=wdCharacter, Count:=-1   '向前移动一个字符,包含前回车符

    Call FindReplaceChar(Selection, "^p^w", "^p", wdFindStop, bByte:=False)

    If Selection.Start > ActiveDocument.Range.Start Then _

       Selection.MoveStart unit:=wdCharacter, Count:=1 '非起始位置

    End if
End Sub

Private Sub FindReplaceChar(ByVal objSel As Object, ByVal strFind As String, _

    ByVal strReplace As String, ByVal FindWrap As Integer, _

    Optional ByVal bWild As Boolean = False, Optional ByVal bByte As Boolean = True)

'执行查找替换操作



   objSel.Find.ClearFormatting

   objSel.Find.Replacement.ClearFormatting

    With objSel.Find

       .Text = strFind

       .Replacement.Text = strReplace

       .Forward = True

       .Wrap = FindWrap  'wdFindStop:停止,替换选定部分,若没选中,则默认替换至文档末尾

       .Format = False

       .MatchCase = False

       .MatchWholeWord = False

       .MatchByte = bByte

       .CorrectHangulEndings = False

       .MatchWildcards = bWild

       .MatchSoundsLike = False

       .MatchAllWordForms = False

    End With

    objSel.Find.Execute Replace:=wdReplaceAll

   ActiveDocument.Activate

   

End Sub
以上代码来自http://blog.sina.com.cn/s/blog_4 ... .html#commonComment并经过验证可用。

TA的精华主题

TA的得分主题

发表于 2020-3-25 16:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 删除段首空格()

  2. Dim i As Integer

  3. For i = 1 To ActiveDocument.Paragraphs.Count

  4.    ActiveDocument.Paragraphs(i).Range.Select

  5.     Call DelSpacesAheadPara

  6.     Call 设置段落格式之缩进(0, 0, 0)

  7.     Debug.Print ActiveDocument.Paragraphs(i).OutlineLevel, ActiveDocument.Paragraphs(i).Range.Font.Name

  8. Next i

  9. End Sub

  10. Sub 设置段落格式()

  11. Dim i As Integer

  12. Dim flag As Boolean

  13. Application.ScreenUpdating = False

  14. For i = 1 To ActiveDocument.Paragraphs.Count

  15.     Debug.Print ActiveDocument.Paragraphs(i).Range.Text

  16.     If ActiveDocument.Paragraphs(i).Range.Text = "参考文献^p" Then

  17.        Exit For '仅设置参考文献以前的段落

  18.     End If

  19.     '正文宋体的段落 颜色和缩进设置 蓝色

  20.     If ActiveDocument.Paragraphs(i).OutlineLevel = wdOutlineLevelBodyText And ActiveDocument.Paragraphs(i).Range.Font.Name = "宋体" Then

  21.        ActiveDocument.Paragraphs(i).Range.Select

  22.       ActiveDocument.Paragraphs(i).Range.Font.ColorIndex = wdBlue

  23.        Call 设置段落格式之缩进(0, 0, 2)

  24.     End If

  25.     '楷体_GB2312的段落颜色和缩进设置 红色

  26.     If ActiveDocument.Paragraphs(i).OutlineLevel = wdOutlineLevelBodyText And ActiveDocument.Paragraphs(i).Range.Font.Name = "楷体_GB2312" Then

  27.        ActiveDocument.Paragraphs(i).Range.Select

  28.       ActiveDocument.Paragraphs(i).Range.Font.ColorIndex = wdRed

  29.        Call 设置段落格式之缩进(2, 0, 2)

  30.     End If

  31.     '非单一字体的段落 颜色和缩进设置 粉色

  32.     If ActiveDocument.Paragraphs(i).OutlineLevel = wdOutlineLevelBodyText And ActiveDocument.Paragraphs(i).Range.Font.Name = "" Then

  33.        ActiveDocument.Paragraphs(i).Range.Select

  34.       ActiveDocument.Paragraphs(i).Range.Font.ColorIndex = wdPink

  35.        Call 设置段落格式之缩进(0, 0, 2)

  36.     End If

  37. Next i

  38. Application.ScreenUpdating = True

  39. End Sub

  40. Sub 设置段落格式之缩进(LIndent, RIndent, FIndent)

  41.     With Selection.ParagraphFormat

  42.        .CharacterUnitLeftIndent = LIndent

  43.        .CharacterUnitRightIndent = RIndent

  44.        .CharacterUnitFirstLineIndent = FIndent

  45.        .LeftIndent = CentimetersToPoints(LIndent)

  46.        .RightIndent = CentimetersToPoints(RIndent)

  47.        .FirstLineIndent = CentimetersToPoints(FIndent)

  48.     End With

  49. End Sub

  50. Private Sub DelSpacesAheadPara()
  51. '删除段首空格



  52.     If Len(Selection.Text) < 2 Then Exit Sub

  53.     On Error Resume Next



  54.     Selection.MoveStart unit:=wdCharacter, Count:=-1   '向前移动一个字符,包含前回车符

  55.     Call FindReplaceChar(Selection, "^p^w", "^p", wdFindStop, bByte:=False)

  56.     If Selection.Start > ActiveDocument.Range.Start Then _

  57.        Selection.MoveStart unit:=wdCharacter, Count:=1 '非起始位置

  58.      End if

  59. End Sub

  60. Private Sub FindReplaceChar(ByVal objSel As Object, ByVal strFind As String, _

  61.     ByVal strReplace As String, ByVal FindWrap As Integer, _

  62.     Optional ByVal bWild As Boolean = False, Optional ByVal bByte As Boolean = True)

  63. '执行查找替换操作



  64.    objSel.Find.ClearFormatting

  65.    objSel.Find.Replacement.ClearFormatting

  66.     With objSel.Find

  67.        .Text = strFind

  68.        .Replacement.Text = strReplace

  69.        .Forward = True

  70.        .Wrap = FindWrap  'wdFindStop:停止,替换选定部分,若没选中,则默认替换至文档末尾

  71.        .Format = False

  72.        .MatchCase = False

  73.        .MatchWholeWord = False

  74.        .MatchByte = bByte

  75.        .CorrectHangulEndings = False

  76.        .MatchWildcards = bWild

  77.        .MatchSoundsLike = False

  78.        .MatchAllWordForms = False

  79.     End With

  80.     objSel.Find.Execute Replace:=wdReplaceAll

  81.    ActiveDocument.Activate

  82.    

  83. End Sub
复制代码



以上代码来自http://blog.sina.com.cn/s/blog_4 ... .html#commonComment
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 12:11 , Processed in 0.043805 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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