ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 通配符替换问题,以及如何做到排序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-6-9 20:08 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yzcg 于 2016-6-9 20:09 编辑

求助1:文中有大量类似“【您的答案】A     [正确]”的段落,要替换为空。本以为很简单,查找内容 【*^p(或^13),但是就是查找不到上述内容,我记得以前干过这种事啊,怎么就不行了呢?
求助2:有没有办法做到按每条题目的第一个字排序,方便查找,(是指没有题目序号的情况下)。用word,excel无所谓。可能有点异想天开了。
谢谢。

一.rar

16.16 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2016-6-9 22:14 | 显示全部楼层
本帖最后由 duquancai 于 2016-6-10 01:03 编辑

请测试(注意备份!)

Sub test()
Dim oAer As Range
On Error Resume Next
Set oAer = ActiveDocument.Content
oAer.Cut: oAer.PasteSpecial , , wdInLine, , wdPasteText
With ActiveDocument.Content.Find
        .MatchWildcards = True
        .Text = "您的答案"
    Do While .Execute
        With .Parent
           .Expand wdParagraph
           .Delete
         End With
    Loop
End With
End Sub
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sub test2()
Dim oAer As Range, str$
Application.ScreenUpdating = False
With ActiveDocument.Content.Find
    .Replacement.Text = "^p"
    .Execute "^l", , , 1, , , , , , , wdReplaceAll
    .Text = "您的答案"
    Do While .Execute
        Set oAer = .Parent
        With .Parent
            .Expand wdParagraph
            oAer = str
            .Collapse wdCollapseEnd
        End With
    Loop
End With
Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-10 08:43 | 显示全部楼层
辛苦您了,谢谢。替换用vba太费事了吧?
运行时显示语法错误。主要是我不怎么懂vba

TA的精华主题

TA的得分主题

发表于 2016-6-10 10:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 duquancai 于 2016-6-10 11:06 编辑

你认为是简单的替换而已,那何必问呢?你要是闲使用VBA就感觉麻烦,你忽视吧!等别人给你解答吧!

TA的精华主题

TA的得分主题

发表于 2016-6-10 15:01 | 显示全部楼层
本帖最后由 jiny680p 于 2016-6-10 15:21 编辑

应该是因为都是表格的缘故。
复制到EXCEL中可以实现,筛选后删除。

排序可能会造成混乱。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-10 17:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2016-6-10 10:57
你认为是简单的替换而已,那何必问呢?你要是闲使用VBA就感觉麻烦,你忽视吧!等别人给你解答吧!

对不起,我表达的不好,让您误会了,非常抱歉。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-10 17:31 | 显示全部楼层
jiny680p 发表于 2016-6-10 15:01
应该是因为都是表格的缘故。
复制到EXCEL中可以实现,筛选后删除。

谢谢,果真是表格的缘故,将表格转换为文本后就可以了。感觉有点奇怪!
排序我也是想着玩的,估计就是可行也会很复杂。

TA的精华主题

TA的得分主题

发表于 2016-6-10 19:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yzcg 发表于 2016-6-10 17:31
谢谢,果真是表格的缘故,将表格转换为文本后就可以了。感觉有点奇怪!
排序我也是想着玩的,估计就是可 ...

你这个问题看似简单,实则是涉及了许多知识概念:
1、你的word文档中的所有“字符”我姑且称为“目标文本”(根据你的提问,字符是我们的研究对象(表格也算,等会儿分析),暂不分析word中图形、图像,当然你的word文档中也没有这些对象)。你提问的操作方式:例如我们把在word文档打开查找替换对话框的操控word文档的方式我们称为:前台操控;我跟你的用wordVBA来处理word文档的方式我们称为:后台操控。
2、根据你word文档中字符分析:(1)手动换行符(为了区别换行符(用\n表示,或者LF),准确点:叫软回车,前台操控:查找对话框中,通配符^11或者^l; 非通配符模式11或者^l,后台操控也一样,但是还可以表示chr(11)),你文档中有大量的软回车。(2)段落标记,也叫硬回车(前台操控:查找对话框中,通配符^13 非通配符模式^p;后台操控:通配符^13 或者chr(13)或者\r或者CR,非通配符模式^p)。
3、word文档中“段落”的概念:段落包含一个段落标记(硬回车,不是软回车)以及所有位于此段落标记和前一个段落标记之间的文本(不包括前一个段落标记)。请注意段落的定义中标志是硬回车而非软回车。
4、这里开始说表格了(表格的行“结束符”和单元格“结束符”是一样的),表格中的单元格中的字符,在单元格中有且只有唯一的一个单元格结束符(并非硬回车和软回车),单元格中可以包含0个或者0个以上的硬回车或者软回车,前台操控:是找不到这个“单元格结束符”的;后台操控:查找“关键词”在进行Expand wdParagraph(段落扩展)能找到包含关键词的段落,并且我测试过,在后台操控中发现:单元格结束符有“两个”符号组合成为的整体 即:\n\r(当然也不能简单的这样理解)他们是一个整体存在的。
     通过以上分析:前台操控,可以这样分2步进行(因为你的文档中有的是软回车(大多数),也有硬回车的情况),(1)在全文档中查找^11替换^p(目的统一进行真正的进行分段,软回车不能算分段的标记,这前面已经说过了);(2)在全文档中,使用通配符  查找^13【您[!^13]{1,}替换“空”(这样可以达到你的目的了),这两部操作都是在不改变你的原文档格式(隐藏了表格边框的),这也是我后台操控的第二种方法“Sub test2()”;还有就是,前台操控:ctrl+a 再ctrl+x  再“无格式文本”粘贴(目的:清楚所有的表格以及所有软回车,这时软回车就会转化为硬回车),最后再查找替换(这里就不在赘述)。这是我后台操控的第一种方法“Sub test()”

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-11 09:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
duquancai 发表于 2016-6-10 19:01
你这个问题看似简单,实则是涉及了许多知识概念:
1、你的word文档中的所有“字符”我姑且称为“目标文 ...

谢谢您的详细的解答,高手!
对于我们来说,这种有详细解释的帖子是最有营养的了。
只是苦了您了,再次感谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-11 09:21 | 显示全部楼层
试过了,佩服佩服佩服。
[!^13]{1,}   这个是个好思路,您不讲真不会想到,谢谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-14 02:20 , Processed in 0.031687 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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