ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 选枝随机、答案调整,已解决。

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-14 15:22 | 显示全部楼层
zpy2 发表于 2020-4-14 05:50
楼主厉害了。。。

如果是我,一般都是专门把 题目内容 和选项 放一个表,然后固定数目,比如4个选项,乱 ...

那样随时可以,但我怕拖儿带女,行动不便,且易出错。我就吃透了Excel与Word合作又不共心的苦。有道是:生意好做,伙计难谋;两个和尚没水吃……

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-14 20:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sylun 发表于 2020-4-14 00:27
可试试如下代码(对原文本有要求),较复杂,只作字符处理,代码较长。

你能说一下,我的代码问题出在哪儿,还有救吗?
若可能,大侠在时间允许的前提下,给我开开塞。
上一次出现的问题,也可能给你这次依旧。
因为上次虽然得到大侠的援助,还是没有吃透和搞懂。
假设在我的代码基础上能实现,我更好消化。
如果再没搞懂,下次仍旧问原问题,我都感觉不好意思……

TA的精华主题

TA的得分主题

发表于 2020-4-14 22:37 | 显示全部楼层
本帖最后由 sylun 于 2020-4-14 22:40 编辑
weiyingde 发表于 2020-4-14 20:32
你能说一下,我的代码问题出在哪儿,还有救吗?
若可能,大侠在时间允许的前提下,给我开开塞。
上一次 ...

不好意思,其实我之前没看完楼主的代码,因楼主的代码并没有全部显式声明变量,也不是一行一段代码,读起来较吃力。
刚才测试了一下,觉得问题可能主要在rng2的范围并非解析段落范围,因为之前匹配各选项时,最后一个选项包含了解析文本,之前的替换改变了其位置。我觉得,其实调整选项字母而不是选项字母后的内容更可靠,因为前后都是一个字母,不会影响其他内容的实际位置。我的代码就是调整选项字母的。
只作简单了测试,其他细节,特别是对各变量所代表的内容没有一一核对

TA的精华主题

TA的得分主题

发表于 2020-4-14 22:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
另外,如果文档不是有特殊对象,应首先考虑用字符串处理调整内容。如果一定要用range对象处理,也可以考虑新建一个基于原文档的文档,然后对照着处理,以原文档对应的内容替换新文档的目标内容,段落对段落。从测试的角度看,这样也是较方便检查的

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-15 17:35 | 显示全部楼层
其实我的思路跟你的一样。
原思路是:现将选枝的内容写入数组arr。
          比如:
                 A.寻求医生的帮助,尽量回到以前的状态  B.寻求朋友的帮助,朋友怎么建议就怎么做
                 C.尽量不要抛头露面,以免别人笑话         D.欣然接受,因为这是成长过程中正常生理现象
           那么
                  arr(1)=“寻求医生的帮助,尽量回到以前的状态”
                  arr(2)="寻求朋友的帮助,朋友怎么建议就怎么做"
                  arr(3)=“尽量不要抛头露面,以免别人笑话"
                  arr(4)=“欣然接受,因为这是成长过程中正常生理现象那么”
                 因为这四个选枝是按照文档中的顺序写进数组的,那么arr(1)到arr(4)对应的选枝号一定是A、B、C、D。
            将arr随机后得到数组ar。这两个数组之间存在什么关系呢?
            他们之间:
            相同点:1、数组元素数量一样,都是四个;2、元素内容一样;
            不同点:但相同内容的元素,在arr和ar中的位置不一样。
            那么可以通过双循环找出arr之元素和ar中各元素的对应关系。
           比如:for i =1 to 4
                        for j=1 to 4
                         if  arr(i)=ar(j) then dic(i)=j
                       next
                   next
                   假如arr(1)=ar(4),那么可以迅速推断出选枝随机变动前后,他们序号的对应关系,
                   arr(1)是变动之前的第一项,其序号一定是A,ar(4)是随机之后的第四项,其序号一定是D。
                   即使说,将解析中所有的A都改为D。
                   如法炮制,进行其他三项的替换。
                  
                  替换的地址是每次查找到的【解析】内容range,替换的双方是dic的key值和item值
                  即:在每次找到的【解析】地方,将dic的键值替换为item值。
问题出现的地方,一定是每一次界定的【解析】地址出了问题。
至于思路应该是可行的。

TA的精华主题

TA的得分主题

发表于 2020-4-15 19:03 | 显示全部楼层
weiyingde 发表于 2020-4-15 17:35
其实我的思路跟你的一样。
原思路是:现将选枝的内容写入数组arr。
          比如:

后面对rng2的查找替换循环有两个问题:1,collapse的默认值是wdcollapsestart,导致无法移动区域,应添加参数wdcollapseend或其值0。2.因用了折叠方法,正常会一直向前查找,以至会超出限定区域,可重新设定区域范围或者设定循环的退出条件。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-15 19:43 | 显示全部楼层
sylun 发表于 2020-4-15 19:03
后面对rng2的查找替换循环有两个问题:1,collapse的默认值是wdcollapsestart,导致无法移动区域,应添加 ...

我对word中查找的原理一点都不熟悉,按你的意思,该怎样重新定位新的查找到的范围?请你再看一下我那代码。
我这代码的原始思路和duquancai大侠的是一样的。
前两个流程很顺利,而且通用性比较强:
1、用了test方法进行判断,所以无论有否【解析】都能运行。
2、四个选枝无论是自成一段还是多段,都能随机。
这就是你所说的,你的代码对格式要求较严格:必须是四个选枝自成一段,非四段不可。这个要求在选枝随机前非得对源文档进行预处理,而且这个预处理还不好进行。因为有可能会将“【解析】”部分拆散成几段。打破了原文档的格式,使其格式会不伦不类。

TA的精华主题

TA的得分主题

发表于 2020-4-15 21:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
weiyingde 发表于 2020-4-15 19:43
我对word中查找的原理一点都不熟悉,按你的意思,该怎样重新定位新的查找到的范围?请你再看一下我那代码 ...

因如果查找到匹配,原查找范围会自动调整为匹配区域范围。重新定位不外乎重新设置start或end属性值、或用setrange,collapse等调整range或selection范围的办法。find对象是在word VBA中经常会用到的,楼主应该查看一下其具体用法。至于退出条件,可以设置end值大于某个值时退出。
另外,其实我前面的代码并不是必须有四个选项才能匹配,就算五六个或者只有一个选项应该也可匹配的。原pattern代码只是用了楼主之前的代码。代码定了,匹配自然是按代码进行的。如果对代码稍作调整,也可以匹配没有解析内容的题目,或者并不是自成一段的选项格式,但必须得让选项之前有一个区别于其他的特定标记以识别,比如制表符,否则会造成混乱,当然,后面的处理代码也应作相应调整,这些都是可行的。

TA的精华主题

TA的得分主题

发表于 2020-4-16 16:21 | 显示全部楼层
sylun 发表于 2020-4-14 00:27
可试试如下代码(对原文本有要求),较复杂,只作字符处理,代码较长。

测试有20道选择题的文档,出现“下标越界”提示。程序复杂,实在看不懂,请老师核查。
选择题重排.rar (63.6 KB, 下载次数: 10)



TA的精华主题

TA的得分主题

发表于 2020-4-17 20:28 | 显示全部楼层
wdpfox 发表于 2020-4-16 16:21
测试有20道选择题的文档,出现“下标越界”提示。程序复杂,实在看不懂,请老师核查。

6楼代码只是针对每个选项一个段落的情形的,并不适用选项间以制表符分隔的情形,要同时适用于该两种情形,需要修改代码。而且就算是用制表符分隔,选项间也应该只用一个制表符间隔,而不是两个或以上,且同一题中不宜段落标记和制表符两者皆用。
原代码只是一种与楼主交流用的测试代码,重在思路,思路清了,代码就好办。当然需要一定基础,但也不需专业级的基础。您如果想测试,可添加一些调试代码。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-28 04:34 , Processed in 0.047894 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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