Sub shishi() '按ABCDE为多选题定义答案;
'A.沙利度胺 B.异烟肼 C.利福平
'd.氯法齐明 E.氨苯砜
'46.各型麻风病的首选药物为(D)
'A.沙利度胺 B.异烟肼 C.利福平
'd.氯法齐明 E.氨苯砜
'45.各型麻风病的首选药物为(E)
'A.沙利度胺 B.异烟肼 C.利福平
'd.氯法齐明 E.氨苯砜
'45645
'1532131
'46.各型麻风病的首选药物为(D)
Dim mt, mh, mk, oRng As Range, rg As Range, n&, m&, str$, d, rng As Range ',t
Set d = CreateObject("Scripting.Dictionary")
y = 4
With CreateObject("vbscript.regexp")
.Global = True: .IgnoreCase = False: .MultiLine = True
.Pattern = "^\d+.[^\r]+\(([A-E])\)\r(?:(?!^\d+.[^\r]+\((?:[A-E])\)\r).)+" '匹配题干+选项(非题干的多行,直到第二个题干前),有几个就有多少组
For Each mt In .Execute(ActiveDocument.Content)
y = y + 1 '这个是初始的题号;
m = mt.FirstIndex: n = mt.Length45.各型麻风病的首选药物为(E) Set oRng = ActiveDocument.Range(m, m + n) 'orng为题干+选项;
str = mt.submatches(0) 'str为题干后答案;
.Pattern = "([A-E].)((?:(?![A-E].).)+)" '匹配ABCDE选项;
For Each mh In .Execute(oRng.Text)
m = mh.FirstIndex: n = mh.Length
Set rg = ActiveDocument.Range(oRng.Start + m, oRng.Start + m + n) 'rg为具体选项;
Set d(Left(rg.Text, 1)) = rg '在字典内创建A与A选项内容间的对应;
Next
t = d.items 'item只能有5个,对应A-E5个选项,即t(0)-t(4);
Select Case y Mod 5 '是5的倍数则分配A,余数为1则分配B,其他以此类推;4为E;
Case 0
If str <> "A" Then
.Pattern = "\(\s*[A-E]\s*\)"
For Each mk In .Execute(oRng.Text)
m = mk.FirstIndex: n = mk.Length
Set rng = ActiveDocument.Range(oRng.Start + m, oRng.Start + m + n) '通常二次正则查找时需要用到加两次;
With rng
.MoveStart 1, 1: .MoveEnd 1, -1: .Text = "A" '这个就是从括号外移动到括号内;
End With
Next
With d(str) '字典直指Range对象(遥控);
.MoveStart 1, 2: .MoveEnd 1, -1: s1 = .Text '起点向后移动2,末点向前移动1;
End With
With t(0) '这里写成d.itme(1)是否可行?AHK中必须写成那样;
.MoveStart 1, 2: .MoveEnd 1, -1: s2 = .Text
.Text = s1
End With
d(str).Text = s2
End If '上面就是交换两个选项内容,而选项自身不变;
Case 1 '余下的都是重复性操作了,真正核心的也就是上面的代码部分了;
If str <> "B" Then
.Pattern = "\(\s*[A-E]\s*\)"
For Each mk In .Execute(oRng.Text)
m = mk.FirstIndex: n = mk.Length
Set rng = ActiveDocument.Range(oRng.Start + m, oRng.Start + m + n)
With rng
.MoveStart 1, 1: .MoveEnd 1, -1: .Text = "B"
End With
Next
With d(str)
.MoveStart 1, 2: .MoveEnd 1, -1: s1 = .Text
End With
With t(1)
.MoveStart 1, 2: .MoveEnd 1, -1: s2 = .Text
.Text = s1
End With
d(str).Text = s2
End If
Case 2
If str <> "C" Then
.Pattern = "\(\s*[A-E]\s*\)"
For Each mk In .Execute(oRng.Text)
m = mk.FirstIndex: n = mk.Length
Set rng = ActiveDocument.Range(oRng.Start + m, oRng.Start + m + n)
With rng
.MoveStart 1, 1: .MoveEnd 1, -1: .Text = "C"
End With
Next
With d(str)
.MoveStart 1, 2: .MoveEnd 1, -1: s1 = .Text
End With
With t(2)
.MoveStart 1, 2: .MoveEnd 1, -1: s2 = .Text
.Text = s1
End With
d(str).Text = s2
End If
Case 3
If str <> "D" Then
.Pattern = "\(\s*[A-E]\s*\)"
For Each mk In .Execute(oRng.Text)
m = mk.FirstIndex: n = mk.Length
Set rng = ActiveDocument.Range(oRng.Start + m, oRng.Start + m + n)
With rng
.MoveStart 1, 1: .MoveEnd 1, -1: .Text = "D"
End With
Next
With d(str)
.MoveStart 1, 2: .MoveEnd 1, -1: s1 = .Text
End With
With t(3)
.MoveStart 1, 2: .MoveEnd 1, -1: s2 = .Text
.Text = s1
End With
d(str).Text = s2
End If
Case 4
If str <> "E" Then
.Pattern = "\(\s*[A-E]\s*\)"
For Each mk In .Execute(oRng.Text)
m = mk.FirstIndex: n = mk.Length
Set rng = ActiveDocument.Range(oRng.Start + m, oRng.Start + m + n)
With rng
.MoveStart 1, 1: .MoveEnd 1, -1: .Text = "E"
End With
Next
With d(str)
.MoveStart 1, 2: .MoveEnd 1, -1: s1 = .Text
End With
With t(4)
.MoveStart 1, 2: .MoveEnd 1, -1: s2 = .Text
.Text = s1
End With
d(str).Text = s2
End If
End Select
d.RemoveAll
Next
End With
End Sub

  

VBA注释临时的更多相关文章

  1. VBA Promming入门教程——变量的使用

    数据类型 VBA中的数据类型可分为两种 示例 String Sub Main Dim s as string s = "Hello" msgbox(s) End Sub Singl ...

  2. python 3.6 关于python的介绍

    python的官方网站 https://www.python.org/ python 3.6 的官方网站的下载地址 https://www.python.org/downloads/release/p ...

  3. 在Excel里用vba给合并的单元格添加注释

    Excel里使用VBA对已经合并的单元格添加注释,直接使用AddComment会报: 运行时错误 '1004':应用程序定义或者对象定义错误 找了很多文章都没找到怎么解决,最后发现在AddCommen ...

  4. Excel VBA入门(七)注释、宏按钮及错误处理

    系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容. 1. 注释 代码注释是一件利人利己的事,为了方便自己在代码需要更新修改时,依然能够快速地看懂自己完的每一行代码到底是什 ...

  5. VBA宏注释(四)

    注释用于记录程序逻辑和用户信息,其他程序员将来可以阅读并理解相同的代码无缝工作. 它包括由开发者,修改者以及还可以包括合并逻辑的信息. 解释器在执行时忽略注释. VBA中的注释用两种方法表示,它们分别 ...

  6. VBA续嘘嘘

    什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...

  7. VBA续嘘嘘——宏技巧集绵

    什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...

  8. Excel VBA入门(二)数组和字典

    数组和字典也是VBA的常用到数据类型之一.但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典. 事实上,字典不是VBA内置的类型,它是Wind ...

  9. shell注释

    sh里没有多行注释,只能每一行加一个#号.只能像这样: #-------------------------------------------- # 这是一个自动打ipa的脚本,基于webfrogs ...

随机推荐

  1. (剑指Offer)面试题59:对称的二叉树

    题目: 请实现一个函数,用来判断一颗二叉树是不是对称的. 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 思路: 对于一棵二叉树,从根结点开始遍历, 如果左右子结点有一个为NULL,那 ...

  2. Windows8连接网络后自动弹出Bing解决方法

    Windows8 网络连接速度很快( ADSL ),但是连接之后总是会打开 Bing,这是很烦人的一件事,因为你连接网络可能并不想打开浏览器,甚至,你讨厌 Bing. 我也一直被这个问题困扰了很久,用 ...

  3. WIN-8“内置管理员无法激活此应用”问题

    解决办法:在运行中输入:“gpedit.msc”,就会启动组策略编辑器,依次展开“计算机配置”里面的“Windows设置”,然后是“安全设置”,再就是“本地策略”里面的“安全选项”,在右边查找一项策略 ...

  4. centos 7安装tomcat

    1.下载安装包 http://tomcat.apache.org/download-80.cgi 2.安装tomcat 注:安装前需要安装jdk环境 #解压 [root@localhost soft] ...

  5. "Incorrect string value: '\\xE7\\x89\\x8C\\xE5\\xB1\\x80...' for column 'name' at row 1")

    出现这个错误的原因是,数据库的编码格式为latin1 而我要将utf8的中文插入到数据库中. mysql> alter database xxx default character set ut ...

  6. 关于epoll的IO模型是同步异步的一次纠结过程

    这篇文章的结论就是epoll属于同步非阻塞模型,这个东西貌似目前还是有争议,在新的2.6内核之后,epoll应该属于异步io的范围了,golang的高并发特性就是底层封装了epoll模型的函数,但也有 ...

  7. IntelliJ IDEA 2017.01配置jdk和tomcat

    之前开发Web项目都是用myeclipse或者eclipse,最近想用IDEA这个编辑器去配置一个Web项目,因为是新手,加上对界面的操作不熟练,所以在配置的过程中遇到了一些难题.最后配置成功,并且可 ...

  8. C++ 写的地图控件,支持google 百度 在线离线地图

    C++处理google  百度地图在网上查阅了很多都是通过浏览器方式显示地图信息, 跟我目前项目很不符合, 所以仔细研究了一下C++方式显示地图.通过地图投影以及墨卡托投影,在通过平面地图计算经纬度. ...

  9. 【linux基础】vim多窗口功能

    前言 实现多个文档文件在同一个屏幕上显示多个窗口. 实现过程 在指令列模式输入『:sp {filename}』即可!那个 filename 可有可无, 如果想要在新窗口启动另一个文件,filename ...

  10. HDU 1176:免费馅饼(DP,自认为很详细的解释)

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...