ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 提取部分内容

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-6-5 23:42 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我有很多个word文档,每个文档也有很多页,但我只想保留文档中偶数页面的学籍号及姓名,和注册码后面的小文本框(或者里面的数字更好)就是附件中的红色字体部分。谢谢

问题.rar

12.31 KB, 下载次数: 46

TA的精华主题

TA的得分主题

发表于 2015-6-6 09:33 | 显示全部楼层
本帖最后由 thunor 于 2015-6-6 09:38 编辑

我给你说一个思路,没时间写代码了。
1.用代码实现到第一个偶数页
2.使用通配符的代码查到偶数页的全国学籍号:([G])([0-9]{13,14})【注:你所给的第二个学生的学籍号前后不统一】,在选中状态将其复制到文档最后(单独占一行);或将其放入一个变量也可以。【不是all,是one】
3.再用使用通配符的代码查到学生的姓名:([姓][名][:])([ ]{1,2})([一-龥]{1,4}),在选中状态将其复制到文档最后;或将其放入一个变量也可以。【不是all,是one】
4.重复执行上述代码
5.从第一页开始查找shape,找到后看是否包含有16位数字,如果有,复制并将其放在文档结束处(单独占一行),如果没有执行下一个操作。
以下工作需要手动操作。
6.将其上的4过程得到的数据生成一个表格,【二列】。word中文字转表格很简单。
7.将6过程得到的数据生成一个表格,【一列】。
8.将7的表格拖到6的表格后面,合并成一张表格,全部工作完成。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-6 20:16 | 显示全部楼层
感谢你的热心,但我实在是太菜,所以你提的思路没有办法,如果你能帮我写一下代码,那就太感谢你了。其实每个学生的学籍号是一统一的,而且所有人的学籍号都一样多位数。

TA的精华主题

TA的得分主题

发表于 2015-6-7 08:44 | 显示全部楼层
楼主,不要着急!其实我现在是搞不定文本框,要不早出手了。我对文字和表格还有会编一点点,大家都看到了你的问题。

TA的精华主题

TA的得分主题

发表于 2015-6-8 00:12 | 显示全部楼层
——楼主,你的问题我忙了很久,但因为这个“文本框”实在搞不定,总出错,作罢!看来帮不上你的忙了,等高手来解决了(文字和表格我还会编一点点,以后尽量少用文本框和图文框,能不用表格也不用表格,文字是最好办的)。

TA的精华主题

TA的得分主题

发表于 2015-6-8 06:50 | 显示全部楼层
本帖最后由 守柔 于 2015-6-8 07:46 编辑
413191246se 发表于 2015-6-8 00:12
——楼主,你的问题我忙了很久,但因为这个“文本框”实在搞不定,总出错,作罢!看来帮不上你的忙了,等高 ...


感于413191246se兄的热情.
我随手写了一个,请413191246se兄和楼主测试一下.
特别说明:
请楼主千万不要问我如何运行宏代码,抱歉.

Private Sub OutputExaminees()
    Dim oShape As Word.Shape
    Dim myRange As Word.Range
    Dim astrExaminees() As String
    Dim astrSpliter() As String
    Dim strText As String
    Dim I As Integer
    Dim intPageNum As Integer
    I = 1    ''''初始化变量
    ReDim astrExaminees(1 To 3, 1 To I)    ''''动态定义一个数组,存储考生信息
    astrExaminees(1, I) = "全国学籍号"
    astrExaminees(2, I) = "姓名"
    astrExaminees(3, I) = "注册码"
    For Each oShape In ActiveDocument.Shapes    ''''遍历活动文档的图形
        With oShape
            If .Type = msoAutoShape Then    ''''为自选图形
                If .AutoShapeType = msoShapeRectangle Then    ''''为矩形
                    If .TextFrame.HasText Then    ''''具有文本内容时
                        strText = Replace$(.TextFrame.TextRange.Text, Chr$(13), Empty)   ''''删除段落标记
                        If strText Like String$(16, 35) Then    ''''为16位数字,即"################"
                            I = I + 1    ''''计数
                            ReDim Preserve astrExaminees(1 To 3, 1 To I)  ''''动态扩充数组
                            astrExaminees(3, I) = strText    ''''注册码
                            intPageNum = .Anchor.Information(wdActiveEndPageNumber)    ''''注册码所在矩形区域的页码
                            Set myRange = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Name:=CStr(intPageNum))    ''''定义到当前页
                            strText = Replace$(myRange.Paragraphs(1).Range.Text, Chr$(32), Empty, , , vbTextCompare)    ''''当前页面下第一个段落所在文本(全国学籍号/姓名)
                            astrSpliter = Split(strText, ChrW$(-230), , vbTextCompare)
                            If UBound(astrSpliter) = 2 Then
                                astrExaminees(1, I) = Replace$(astrSpliter(1), "姓名", Empty)    ''''Left$(astrSpliter(1), 14)   ''''全国学籍号,14位长度,发现示例文件中的蒋梦丹两页上的全国学籍号不一致!
                                astrExaminees(2, I) = Replace$(astrSpliter(2), Chr$(13), Empty)  ''''姓名,删除段落标记
                            End If
                        End If
                    End If
                End If
            End If
        End With
    Next
    If I > 1 Then
        ReDim astrSpliter(1 To I)    ''''动态定义一个一维数组,存储输出段落
        For I = 1 To UBound(astrExaminees, 2)
            astrSpliter(I) = astrExaminees(1, I) & vbTab & astrExaminees(2, I) & vbTab & astrExaminees(3, I)    ''''各字段之间使用TAB键分隔
        Next
        Application.Documents.Add.Content.InsertAfter Join(astrSpliter, Chr$(13))    ''''在新文档中输出提取结果
    End If
End Sub

TA的精华主题

TA的得分主题

发表于 2015-6-8 10:00 | 显示全部楼层
守版 代码,准确、干净! 就是看不太懂。——承蒙 守版 抬举,不胜感激,我会录制宏很多年,但真正入门是 2011年6月的事,最近几年虽有进步,但与 守版 等高手无法相比,谢谢 守版!
楼主 朋友,代码测试通过,但在运行前,把 Private 字样删除吧,否则,在宏名里找不到,在 VBE 中可以找到,最终结果,全选——插入表格 即可(第2名 梦丹 的前后学籍号不一致!)。

TA的精华主题

TA的得分主题

发表于 2015-6-21 18:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2015-6-8 10:00
守版 代码,准确、干净! 就是看不太懂。——承蒙 守版 抬举,不胜感激,我会录制宏很多年,但真正入门是 2 ...

413191246se兄

大家交流一下VBA的 吧  这个我都做过一个

守柔前辈 好久不见你露面;

TA的精华主题

TA的得分主题

发表于 2015-6-22 13:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 szqhb 于 2015-6-22 13:47 编辑
守柔 发表于 2015-6-8 06:50
感于413191246se兄的热情.
我随手写了一个,请413191246se兄和楼主测试一下.
特别说明:

前辈,我还要提取“基础信息表拍照上传号”,怎样补充修改代码?最好能把生成的数据显示在Word,或另存在Excel表格里

TA的精华主题

TA的得分主题

发表于 2015-6-22 22:14 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 02:58 , Processed in 0.024240 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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