ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 823|回复: 0

[推荐] VBA运行中修改表数据的一个方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-5-31 16:21 | 显示全部楼层 |阅读模式
[广告] 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)


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-19 10:11 , Processed in 0.028875 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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