VBA注释临时
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注释临时的更多相关文章
- VBA Promming入门教程——变量的使用
数据类型 VBA中的数据类型可分为两种 示例 String Sub Main Dim s as string s = "Hello" msgbox(s) End Sub Singl ...
- python 3.6 关于python的介绍
python的官方网站 https://www.python.org/ python 3.6 的官方网站的下载地址 https://www.python.org/downloads/release/p ...
- 在Excel里用vba给合并的单元格添加注释
Excel里使用VBA对已经合并的单元格添加注释,直接使用AddComment会报: 运行时错误 '1004':应用程序定义或者对象定义错误 找了很多文章都没找到怎么解决,最后发现在AddCommen ...
- Excel VBA入门(七)注释、宏按钮及错误处理
系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容. 1. 注释 代码注释是一件利人利己的事,为了方便自己在代码需要更新修改时,依然能够快速地看懂自己完的每一行代码到底是什 ...
- VBA宏注释(四)
注释用于记录程序逻辑和用户信息,其他程序员将来可以阅读并理解相同的代码无缝工作. 它包括由开发者,修改者以及还可以包括合并逻辑的信息. 解释器在执行时忽略注释. VBA中的注释用两种方法表示,它们分别 ...
- VBA续嘘嘘
什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...
- VBA续嘘嘘——宏技巧集绵
什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...
- Excel VBA入门(二)数组和字典
数组和字典也是VBA的常用到数据类型之一.但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典. 事实上,字典不是VBA内置的类型,它是Wind ...
- shell注释
sh里没有多行注释,只能每一行加一个#号.只能像这样: #-------------------------------------------- # 这是一个自动打ipa的脚本,基于webfrogs ...
随机推荐
- storage路径问题
1 概念总述 android开发中,关于存储路径,我们经常听到以下几个概念:内存.内部存储和外部存储,现在我们就来详细说说这三者区别与联系. 内存:英文中记为memory,即RAM 内部存储:英文记为 ...
- POJ 3295 Tautology 构造 难度:1
Tautology Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9580 Accepted: 3640 Descrip ...
- mysql 到postgresql
1 import pandas as pd 2 import psycopg2 3 from io import StringIO 4 import pymysql 5 conf={"mys ...
- CCF CSP 201703
CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...
- python __new__ __init__
写过python类的都会知道__init__,可能也了解__new__.我之前也了解__new__,但只做的它发生在__init__之前.其他的就比较模糊了 今天在学习单例模式时,看到有人用__new ...
- GMTcolor
http://gmt-tutorials.org/coloring_topography.html gmt grdcut topo15.grd -R -Gcut gmt grdgradient cut ...
- sonarqube 代码检查
再好的程序员也会出bug,所以代码检查很有必要.今天就出一个简单的检查工具代替人工检查. 参考: http://www.cnblogs.com/qiaoyeye/p/5249786.html 环境及版 ...
- v-text、v-html、v-cloak、v-pre.md
本篇文章,我们简单的介绍几个Vue内置指令的实现. v-text v-text的用法很简单,以下两个表达式的作用相同. <span v-text="msg"></ ...
- 7.3 5种IO模型与IO复用
5种IO模型分别如下: 1.阻塞IO模型 当上层应用app1调用recv系统调用时,如果对等方没有发送数据(缓冲区没有数据),上层app1将阻塞(默认行为,被linux内核阻塞). 当对等方发送了数据 ...
- 手机连不上eclipse
在进行android开发时,有时候会很奇怪,手机连不上eclipse了,打开eclipse的ddms也没有,重启adb也不行,这时候我们应该怎么办呢. 首先打开资源管理器,找到 adb.exe 结束掉 ...