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. canvas环形进度条

    <style> canvas { border: 1px solid red; margin: 100px; }</style> <canvas id="rin ...

  2. Dash:程序员的好帮手(转载)

    作为一名死coder,每天最常见的动作就是查看各种API文档,你一定也有过同时打开N个窗口(HTML.PDF.CHM),不停的在编辑器与文档之间切换的感受吧?怎么说呢,其实我很讨厌这种枯燥无味的动作, ...

  3. delete p和delete [] p的区别(转)

    operator new 和 operator delete函数有两个重载版本,每个版本支持相关的new表达式和delete表达式: void* operator new (size_t); // a ...

  4. windowsphone开发页面跳转到另一个dll中的页面

    WP的页面跳转一般是只能跳转到本DLL的页面, 如果要跳转到其他DLL的页面则需要这样写 (Application.Current.RootVisual as PhoneApplicationFram ...

  5. web.xml的schema文件

    2.3和2.4: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLI ...

  6. SharePoint 元数据服务-PowerShell

    1. 获取元数据服务应用程序标识 Get-SPServiceApplication 2. 获取指定的元数据服务应用程序实例 $metadataApp = Get-SPMetadataServiceAp ...

  7. JDK安装和环境变量配置-成功经验

    JDK安装和环境变量配置1.下载安装软件 2.安装JDK--开发环境,路径 3.之后打开安装路径下的bin文件夹路径,我的是默认安装C:\Program Files\Java\jdk1.6.0_10\ ...

  8. SQL之join

    QL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表可通过键将彼此联系起来. ...

  9. Global.asax 详解

    在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void ...

  10. mysql命令小结

    MySQL 数据库常用命令 1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删 ...