|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 loquat 于 2015-6-25 23:10 编辑
看这个帖子中守柔大侠的代码有感,写了个获取不连续区域文本的宏:
http://club.excelhome.net/forum.php?mod=viewthread&tid=200648&page=1#pid1322412
刚好也有朋友问到怎么不使用剪贴板实现这个代码的功能:
- Sub 获取不连续字符()
- On Error Resume Next
- Dim MyData As Object
- Set MyData = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
- Selection.Copy
- MyData.GetFromClipboard
- t = MyData.GetText
- For i = 0 To UBound(Split(t, Chr(13))) - 1
- t1 = t1 & Split(t, Chr(13) & Chr(10))(i)
- Next i
- MsgBox t1
- Set MyData = Nothing
- End Sub
复制代码 以上代码为liuhoubin168提供
以下是小弟loquat的代码:
以下代码一:执行效率还行,但是有个问题,执行完毕后不会恢复代码执行前的选取状态
以下代码二:执行效率比较低,但是没有上述不足之处
以上代码都有个BUG:当选取包含了文档末尾的段落标记时,运行将会出错。
容后有空再修正。
- Sub 获取不连续区域文本一()
- Dim aRange As Word.Range, docEnd&, aBool As Boolean, aStr$
- If Application.Version < 11 Then Exit Sub '判断当前Word应用程序版本,如低于2003则退出
- If Selection.type <> wdSelectionNormal Then Exit Sub '如果所选内容为非常规文本则退出
- With ActiveDocument
- If .ProtectionType <> wdNoProtection Then Exit Sub '如果文档处于保护状态时则退出
- Application.ScreenUpdating = False
- aBool = .ActiveWindow.View.ShowHiddenText
- .ActiveWindow.View.ShowHiddenText = True '显示隐藏文字
- .ActiveWindow.View.ShadeEditableRanges = False '不显示用户可编辑区域的底纹
- Set aRange = .Content
- docEnd = aRange.End - 1
- With aRange.Find
- .ClearFormatting '清除查找格式
- .Font.Hidden = True '查找隐藏文字
- Do While .Execute = True '成功查找时
- Set aRange = .Parent '重置Range对象,为查找到的目标区域
- aRange.Editors.Add wdEditorEveryone '使用可编辑区域保存原始隐藏文字
- aRange.Font.Hidden = False '取消隐藏文字属性
- aRange.SetRange aRange.End, docEnd '重置Range对象
- Loop
- End With
- Selection.Font.Hidden = True '设置选择区域隐藏文字属性
- Set aRange = .Content '再次全文搜索
- With aRange.Find
- .ClearFormatting
- .Font.Hidden = True '查找隐藏文字
- Do While .Execute = True
- Set aRange = .Parent
- aStr = aStr & aRange.Text
- aRange.Font.Hidden = False '恢复原选区隐藏文字属性
- aRange.SetRange aRange.End, docEnd '重置Range对象
- Loop
- End With
- MsgBox aStr '返回原选区文字
- .SelectAllEditableRanges
- Selection.Font.Hidden = True '恢复原始的隐藏文字
- .DeleteAllEditableRanges wdEditorEveryone '删除所有可编辑区域
- .ActiveWindow.View.ShowHiddenText = aBool
- Application.ScreenUpdating = True
- End With
- End Sub
复制代码- Sub 获取不连续区域文本二()
- Dim aRange As Word.Range, docEnd&, aBool As Boolean, aStr$
- Dim aBookmark As Word.Bookmark, k&
- If Application.Version < 11 Then Exit Sub '判断当前Word应用程序版本,如低于2003则退出
- If Selection.type <> wdSelectionNormal Then Exit Sub '如果所选内容为非常规文本则退出
- With ActiveDocument
- If .ProtectionType <> wdNoProtection Then Exit Sub '如果文档处于保护状态时则退出
- Application.ScreenUpdating = False
- aBool = .ActiveWindow.View.ShowHiddenText
- .ActiveWindow.View.ShowHiddenText = True '显示隐藏文字
- .ActiveWindow.View.ShadeEditableRanges = False '不显示用户可编辑区域的底纹
- Set aRange = .Content
- docEnd = aRange.End - 1
- With aRange.Find
- .ClearFormatting '清除查找格式
- .Font.Hidden = True '查找隐藏文字
- Do While .Execute = True '成功查找时
- Set aRange = .Parent '重置Range对象,为查找到的目标区域
- aRange.Editors.Add wdEditorCurrent '使用当前用户可编辑区域保存原始隐藏文字
- aRange.Font.Hidden = False '取消隐藏文字属性
- aRange.SetRange aRange.End, docEnd '重置Range对象
- Loop
- End With
- Selection.Font.Hidden = True '设置选择区域隐藏文字属性
- Set aRange = .Content '再次全文搜索
- With aRange.Find
- .ClearFormatting
- .Font.Hidden = True '查找隐藏文字
- k = 0
- Do While .Execute = True
- Set aRange = .Parent
- aStr = aStr & aRange.Text '保存原选区文字
- aRange.Bookmarks.Add "_myTemp" & Format(k, "000"), aRange '使用书签保存原始选区
- aRange.Font.Hidden = False '恢复原选区隐藏文字属性
- aRange.SetRange aRange.End, docEnd '重置Range对象
- k = k + 1
- Loop
- End With
- .SelectAllEditableRanges wdEditorCurrent
- .DeleteAllEditableRanges wdEditorCurrent '删除当前用户可编辑区域
- Selection.Font.Hidden = True '恢复原始的隐藏文字
- For Each aBookmark In .Bookmarks
- If Left(aBookmark.Name, 7) = "_myTemp" Then
- aBookmark.Range.Editors.Add wdEditorCurrent
- aBookmark.Delete '删除书签
- End If
- Next
- .SelectAllEditableRanges wdEditorCurrent '恢复原始选区
- .DeleteAllEditableRanges wdEditorCurrent '删除当前用的可编辑区域
- .ActiveWindow.View.ShowHiddenText = aBool '恢复隐藏文字是否显示选项
- Application.ScreenUpdating = True
- End With
- MsgBox aStr '返回原选区文字
- End Sub
复制代码
|
评分
-
2
查看全部评分
-
|