ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助守柔、sylun word分割单选题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-6-12 22:19 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wang-way 于 2013-6-13 12:30 编辑

求助用WORD VBA分别获取单选题的 引言  题干 和A B C D四个选项,在网友的帮助下已经初步实现。但带有许多地方需要完善,求助大师们……
原文内容:(粘贴至WORD文档中哦)
一、选择题
1.下列四图中能够正确表示地理事物和现象之间关系的是
    A.①           B.②            C.③             D.④
2某地区植被退化或丧失、土壤物质和地表水流失、岩石溶蚀与侵蚀、基岩裸露、土地生物生产力退化。这一地表过程是
A.砂岩地区受风力强烈侵蚀作用产生的自然演化过程,形成甘新多沙漠戈壁的自然景观
   B黄土高原黄土塌陷,体现地下水的过度开采而造成的人为演化过程
   C.青藏多大河湖泊,体现水土流失严重的沟壑地区的环境演化过程
   D石灰岩地区在自然和人类活动作用下的综合演化过程,形成云贵川石漠化景观
右图是我国某省级行政区略图,读图完成第3题。
3.该省级行政区的城市发展特征是
A.   城市南多北少       B.城市沿河分布明显
C. 城市化水平高     D.处于逆城市化阶段
读我国东部某城市2005~2010年“外来人口流向调查统计图”,回答第4题。
4.该市外来人口流向的变化,将会
A.促进郊区的城市化进程,城市规模扩大
B中心城区的人口密度下降,解决城区的环境污染问题
C郊区的人口密度不断增加使城区的第三产业大量向郊区转移
D.使城市化水平下降,城市的服务范围缩小
5.根据表中数据,不能直接分析得出的结论是
A.人口素质有明显提升        B.经济发展中“人口红利”优势明显
C.劳动力向东部迁移增多   D.城市化进程处于加快阶段
右图表示对某地区不同等级的城市聚落分布进行模式化处理得出的图像。读图回答第6题。
6.右图所示地区,等级最高的城市是
A.a        B.b
C.c        D.d
右图表示上海市2004年制造业就业比重的空间分布,读图回答7~8题。
7.图中甲最可能的功能区是
A.住宅区    B.商业区
C.工业区    D.科教文化区
8.某大企业计划在上海布局产业各部门,关于该企业各部门布局及区位条件,下列对应关系最合理的是
A.甲——核心生产部门---配套企业多
B.乙——管理和研发部门---环境容量大
C.丙——配套生产部门---土地成本低
D.乙——营销部门---接近能源地
9.材料数据反映出我国目前存在的相关社会问题有
①人口基数大,净增人口多
自然增长率过快,人口增长类型处于“传统型”阶段
③开始出现人口老龄化现象,社会负担加重
④城市化水平较低,农村劳动力过剩
贫困人口增多,社会治安混乱
A①③④      B①②⑤
C②③④      D①③⑤
代码:(二楼哦)

求助大神们的问题:
1、第3题 A选项 后面有若干空格,运行代码后。获取的内容为问号??? 有没有办法只修改上述代码中通配符来获取?
2.1、求助办法,根据引言的内容(“回答第X题”)判断引言属于第X题。
2.2、同上根据引言的内容(“回答第X~Y题”)判断,第X~Y题为一组组合题。
3.第9题的题干内容比较特殊……没有办法得到1234点描述
4、假如试卷上有图片内容,有没有办法根据图片插入的位置(一般位于题目和四个选项之间)判断图片属于第X题?
5、其实,我是想做一个属于自己的题库,将来再学习如何组卷…… 求指导啊……


TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-12 22:28 | 显示全部楼层
[code=vb]Option Explicit
Type Dxt    '定义单选题数据结构
    Options(1 To 6) As String
End Type

Sub SplitDxts()    '分离单选题

    Dim dxts(1 To 100) As Dxt    '声明单选题数组
    Dim FindText(1 To 6) As String    '声明通配符形式数组
    Dim iCount, m, n As Integer

    '初始化查找文本通配符格式
    FindText(1) = "[^13]([!^13]@)([0-9]@)题>"
    FindText(2) = "<[0-9]{1,2}[..]*^13"
    FindText(3) = "<A[..]([!^13]@)[^32^13]"
    FindText(4) = "<B[..]([!^13]@)[^32^13]"
    FindText(5) = "<C[..]([!^13]@)[^32^13]"
    FindText(6) = "<D[..]([!^13]@)[^32^13]"

    For m = 1 To 6
        iCount = 0
        With Selection
            .HomeKey wdStory    '回到文档开始
            With .Find    '开始查询
                .Text = FindText(m)
                .MatchWildcards = 1
                .Forward = True
                Do While .Execute = True
                    'Selection.Bookmarks("\para").Range.Select
                    iCount = iCount + 1    '统计题目数量
                    If m = 1 Then
                        dxts(iCount).Options(m) = Replace(Selection.Range, Chr(13), "")
                    Else
                        dxts(iCount).Options(m) = Selection.Range
                    End If
                    'Selection.Collapse wdCollapseEnd
                Loop
            End With
        End With
    Next m
   
    '测试
    For m = 1 To 6
        For n = 1 To iCount
            Debug.Print n & "—" & dxts(n).Options(m)
        Next n
    Next m
   
End Sub[/code]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-12 23:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
坐等回复!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-13 03:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wang-way 于 2013-6-13 04:02 编辑
  1. Option Explicit
  2. Type YinYan
  3.     Content As String
  4.     Start As Integer
  5.     End As Integer
  6.     Combine As Boolean    '是否为组合题
  7. End Type
  8. Type Dxt    '定义单选题数据结构
  9.     Yy As YinYan
  10.     Question As String
  11.     Options(1 To 4) As String
  12. End Type
  13. Sub SplitDxts()    '分离单选题

  14.     Dim dxts(1 To 100) As Dxt    '声明单选题数组
  15.     Dim OptionFindText(1 To 6) As String    '声明通配符形式数组
  16.     Const QuestionFindText As String = "<[0-9]{1,2}[..]*^13"
  17.     Const YyFindText As String = "[^13]([!^13]@)([0-9]@)题>"
  18.     Dim iCount, m, n, yyCount As Integer
  19.     '初始化查找文本通配符格式
  20.     OptionFindText(1) = "<A[..]([!^13]@)[^32^13]"
  21.     OptionFindText(2) = "<B[..]([!^13]@)[^32^13]"
  22.     OptionFindText(3) = "<C[..]([!^13]@)[^32^13]"
  23.     OptionFindText(4) = "<D[..]([!^13]@)[^32^13]"

  24.     yyCount = 0
  25.     Selection.HomeKey wdStory
  26.     Dim tempYy As YinYan
  27.     With ActiveDocument.Content.Find
  28.         .Text = YyFindText
  29.         .MatchWildcards = 1
  30.         .Forward = True
  31.         Do While .Execute
  32.             yyCount = yyCount + 1
  33.             tempYy.Content = Replace(.Parent.Text, Chr(13), "")
  34.             .Parent.Select    '不写出错
  35.             If InStr(1, .Parent.Text, "-") > 0 Then
  36.                 With Selection.Find
  37.                     .Text = "([0-9]@)-([0-9]@)"
  38.                     .MatchWildcards = 1
  39.                     .Forward = True
  40.                     If .Execute = True Then
  41.                         tempYy.Combine = True
  42.                         tempYy.Start = CInt(Mid(.Parent.Text, 1, InStr(1, .Parent.Text, "-") - 1))
  43.                         tempYy.End = CInt(Mid(.Parent.Text, InStr(1, .Parent.Text, "-") + 1))

  44.                         dxts(tempYy.Start).Yy.Content = tempYy.Content
  45.                         dxts(tempYy.Start).Yy.Combine = tempYy.Combine
  46.                         dxts(tempYy.Start).Yy.Start = tempYy.Start
  47.                         dxts(tempYy.Start).Yy.End = tempYy.End
  48.                     End If
  49.                 End With
  50.             Else
  51.                 With Selection.Find
  52.                     .Text = "[!^1-^127][0-9]@题"
  53.                     .MatchWildcards = 1
  54.                     .Forward = True
  55.                     If .Execute = True Then
  56.                         tempYy.Combine = False
  57.                         tempYy.Start = CInt(Mid(.Parent.Text, 2, Len(.Parent.Text) - 2))
  58.                         tempYy.End = tempYy.Start

  59.                         dxts(tempYy.Start).Yy.Content = tempYy.Content
  60.                         dxts(tempYy.Start).Yy.Combine = tempYy.Combine
  61.                         dxts(tempYy.Start).Yy.Start = tempYy.Start
  62.                         dxts(tempYy.Start).Yy.End = tempYy.End
  63.                     End If
  64.                 End With
  65.             End If
  66.         Loop
  67.     End With

  68.     iCount = 0
  69.     Selection.HomeKey wdStory
  70.     With ActiveDocument.Content.Find
  71.         .Text = QuestionFindText
  72.         .MatchWildcards = 1
  73.         .Forward = True
  74.         Do While .Execute = True
  75.             iCount = iCount + 1
  76.             dxts(iCount).Question = .Parent.Text
  77.         Loop
  78.     End With


  79.     For m = 1 To 4
  80.         iCount = 0
  81.         Selection.HomeKey wdStory
  82.         With ActiveDocument.Content.Find
  83.             .Text = OptionFindText(m)
  84.             .MatchWildcards = 1
  85.             .Forward = True
  86.             Do While .Execute = True
  87.                 iCount = iCount + 1
  88.                 dxts(iCount).Options(m) = .Parent.Text
  89.             Loop
  90.         End With
  91.     Next m

  92.     For m = 1 To iCount
  93.         If dxts(m).Yy.Content = "" Then
  94.             Debug.Print "########无引言的题目【开始】##########"
  95.             Debug.Print dxts(m).Question
  96.             Debug.Print dxts(m).Options(1)
  97.             Debug.Print dxts(m).Options(2)
  98.             Debug.Print dxts(m).Options(3)
  99.             Debug.Print dxts(m).Options(4)
  100.             Debug.Print "#########无引言的题目【结束】##########"
  101.         Else
  102.             If dxts(m).Yy.Combine = False Then
  103.                 Debug.Print "################################有引言单题【开始】###"
  104.                 Debug.Print dxts(m).Yy.Content
  105.                 Debug.Print dxts(m).Question
  106.                 Debug.Print dxts(m).Options(1)
  107.                 Debug.Print dxts(m).Options(2)
  108.                 Debug.Print dxts(m).Options(3)
  109.                 Debug.Print dxts(m).Options(4)
  110.                 Debug.Print "################################有引言单题【结束】###"
  111.             Else
  112.                 Debug.Print "#####有引言组合题【开始】#############################"
  113.                 Debug.Print dxts(m).Yy.Content
  114.                 For n = dxts(m).Yy.Start To dxts(m).Yy.End
  115.                     Debug.Print dxts(n).Question
  116.                     Debug.Print dxts(n).Options(1)
  117.                     Debug.Print dxts(n).Options(2)
  118.                     Debug.Print dxts(n).Options(3)
  119.                     Debug.Print dxts(n).Options(4)
  120.                 Next
  121.                 Debug.Print "####有引言组合题【结束】##############################"
  122.                 m = n - 1
  123.             End If
  124.         End If
  125.     Next m

  126. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-6-14 15:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1.对于第7-9题这样的引言可用通配符:第[0-9-]@题来查找;
2.对于第九题的情况,可修改下else后面的部分:
                    Else
                        If m = 2 Then
                            Set mg = Selection.Range
                            Do While InStr(mg.Next(wdParagraph, 1), "A") = False
                                mg.MoveEnd wdParagraph, 1
                                js = js + 1
                                If js > 6 Then js = 0: Exit Do
                                Debug.Print mg
                            Loop
                        End If
                        dxts(iCount).Options(m) = mg

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-14 20:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhanglei1371 发表于 2013-6-14 15:53
1.对于第7-9题这样的引言可用通配符:第[0-9-]@题来查找;
2.对于第九题的情况,可修改下else后面的部分: ...

大致明白您的思路了  在题干下一段查找字母A 直到查到为止。谢谢您!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-14 21:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhanglei1371 发表于 2013-6-14 15:53
1.对于第7-9题这样的引言可用通配符:第[0-9-]@题来查找;
2.对于第九题的情况,可修改下else后面的部分: ...

还要继续请教下一个问题!第4问

TA的精华主题

TA的得分主题

发表于 2013-6-15 11:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
第四个问题,昨天QQ不是已发给你了?
其实思路就是,从上到下循环段落,判断每一段是否有图形,有的话就选中该段内容,判断该段第一个字是否含有0-9,没有的话再判断选中段落的前后段,找到为止
Sub 选择图片所在段落()
    With ActiveDocument.ActiveWindow.View
        .Type = wdPrintView
        .ShowObjectAnchors = True
    End With
    Dim s As Shape
    For Each s In ActiveDocument.Shapes
        Dim pa As Paragraph
        For Each pa In s.Anchor.Paragraphs
            pa.Range.Select
            If Asc(pa.Range.Characters(1)) > 48 And Asc(pa.Range.Characters(1)) < 57 _
               Or Asc(pa.Previous.Range.Characters(1)) > 48 And Asc(pa.Previous.Range.Characters(1)) < 57 _
               Or Asc(pa.Range.Characters(1)) > 48 And Asc(pa.Range.Characters(1)) < 57 _
               Then
                Dim mry As Range
                Set mry = ActiveDocument.Range(pa.Previous.Range.Start, pa.Next.Range.End)
                mry.Find.Execute "[0-9]@.", , , 1
                Debug.Print mry.Find.Parent
            End If
        Next
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-15 13:17 | 显示全部楼层
本帖最后由 wang-way 于 2013-6-15 14:25 编辑
zhanglei1371 发表于 2013-6-15 11:22
第四个问题,昨天QQ不是已发给你了?
其实思路就是,从上到下循环段落,判断每一段是否有图形,有的话就选 ...

等我看明白  调试一下就很好了!再次感谢.  
试了一下,发现普适性不强。跟代码无关,而是跟平时大家排版不遵守一定规范有关。实在难以统一。

TA的精华主题

TA的得分主题

发表于 2019-3-23 21:45 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 00:24 , Processed in 0.053615 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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