|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
1.下面是一个简要的例题:
sub main()
[statement1]
call test
[statement2]
end sub
sub test()
'变量的定义略
[statement3]
'此处要确定是否修改表mytab?然后继续执行下面的语句.
[statement4]
end sub
整个程序在取得数据、输入几个参数后自动运行.其中[statement3]要建立一个临时表mytab(若原来存在则删除,新建),
用于存储数据分组的各组上下限,以计算数据的频数.如果是均匀分组,这些各组上下限是自动计算好的,以便[statement4]处理.如果
是非均匀分组,就需要手动输入上下限,由[statement4]同样处理.这两种情况都有可能出现.
曾经试验过,在VBA程序运行时修改表的数据,但没有成功.因为没有暂停这个命令且能将操作转到表上,修改数据后再转回去继续运行.
2.实际上VBA是有暂停这个方法的,即Wait方法.其一些应用可在网上查询.
据说,Wait方法暂停 Microsoft Excel 的所有操作,并且,Wait 起作用时可能禁止您对计算机做其他操作.
不过,后台操作(如打印和重新计算)将继续进行.简单试验了一下这种方法,确实如此.
这意味着要用此方法实现我们的目的,还是困难的.
3.本文给出一个简易的方法,能够解决这个问题.
首先要设置一个Public变量(公共变量),比如 PTest(默认值0).
然后在test()中增加一个判断结构(内含一个小判断结构):
Sub test()
'变量的定义略
If PTest = 0 Then '增加判断结构,将[statement3]包括是为了再次运行时,绕过[statement3],不破坏已建的表mytab及其数据
[statement3]
Sheets("mytab").Select '选择表mytab
Msg = "确定是需要手动修改表mytab的数据(Y)?还是不需要(N)"
Ans = MsgBox(Msg, vbYesNo)
If Ans = vbYes Then '小判断结构,如果选择手动修改则执行
PTest = 1
MsgBox "修改表mytab数据后,按菜单栏上方[保存]按钮,并重新调用main()"
Exit Sub
End If
End If
[statement4]
PTest = 0 '还原公共变量PTest的值
End Sub
第1次调用test()时,正常执行[statement3],其后的小判断结构是作出选择:修改与否.如果不修改,继续像原程序那样执行下去,不受影响.
这样就不用第2次调用test()了.如果要修改,自然要退出VBA,并将公共变量PTest置为1.修改表数据并保存后,再次执行main()和test(),
这时就绕过[statement3](已执行),执行[statement4],再将PTest的值还原.注意,勿在其它会话修改PTest的值,以免影响下一次程序的执行.
4.这个结构经过测试是成功的.解决了我们的问题.
本程序之前的版本,是用窗体上控件修改表的数据,虽然繁琐一些,也是可行的.
我们程序的一个重要目标是简化并减少用户的操作.如果另建一个表对应于手动修改数据的情况(还要将数据引入程序),还应为用户
提供一个数据模板.而由于频数问题的多样性,这样做也未必简单.
但哪一种方法更合适,是个见仁见智的问题.而且这里的方法对于更复杂的程序结构是否有效,也是未知的.就作为抛砖引玉吧.
(原程序参见[统计助理]-VBA-amain-计算数值型数据频数分布.地址 https://www.aliyundrive.com/s/bMivc8jXtFN)
|
|