ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 让常量"变量"起来!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-9-27 19:41 | 显示全部楼层 |阅读模式
我们写了一段通用的模块 但是由于用户的需求不同
比如一组数据的计算结果不同的用户希望结果输出在不同的位置
由于事先不可能知道用户输出的表名称及单元格位置 我们无法使程序"智能化"
你可以在程序中加入inputbox让用户自由选定
但是用户每次使用都选定一次非常麻烦
能不能一次设定 永远有效?

稍微有编程基础的同学都会想到 那就是常量
常量是在程序运行过程中不可改变的量 这样就可以只设定一次!
我们通常在使用固定不变的参数的时候 运用常量来表示 使程序不但易于理解 更方便日后的修改
但这一切都是程序员"一厢情愿"的在做 用户的意志没有得到体现
问题二就来了,能不能让用户参与常量的设定?

在日常工作中 我会告诉同事 ALT+F11 然后 你把某某模块中的 Const SHNAME = "Sheet1!$A$1" 改成你需要输出的表格的位置就可以了
这就是最简单的用户参数常量的设定
但是我敢打赌 对于不关心程序的人来说 他会连ALT+F11快捷键都会在一周内忘光
更别说某某模块的某某常量了
所以 我们需要一个引导流程来帮助完全不懂VBA的用户来完成这一切

正规软件都会有一个设置选项 用于设定这些常量参数 一般储存在注册表或ini配置文件中
但对于我们EXCEL来讲 就小题大做了
我们需要的只是一个inputbox就足够了
不同于之前提到inputbox那样每次都需要用户来设置一次,因为那时候用户影响的仅仅是变量而已
我们直接用inputbox来操作常量!
这样一切的问题都迎刃而解了

但是!(故弄玄虚一下^^)
常量可接受的数据类型 大概可以分为两种 字符串型和数值型
把参与权交给用户 就代表了不确定性
你希望用户传递一个单元格地址 用户却直接输入了一个数值0
当然 你可以用数不胜数的if嵌套来处理这些用户可能让你程序崩溃的非法参数
好在Excel已经提供了限定型的Inputbox
那就是Application.Inputbox 仅仅多了一个type参数 一切就简单了

走到这一步 已经万事俱备 只欠东风了
下面就是需要实现这一切的代码了
没什么神秘的 操作VBA来写VBA代码必须信任对于 Visual Basic 项目的访问 必须引入 Microsoft Visual Basic Application Extensibility 的引用
然后...
让常量也"变量"起来吧!

给出一个最简单的示例 本示例实现最基本的效果
用户打开工作簿 会参与常量的设定
设定后运行会显示用户的设定值 且设定只需一次 可重设定

常量变量化.rar (10.51 KB, 下载次数: 212)


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-27 19:43 | 显示全部楼层
一楼是我的....看看这次会不会见光死{:soso_e149:}

TA的精华主题

TA的得分主题

发表于 2012-9-27 19:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我猜你的思路就是inputbox输入值后,向模块里写代码定义输入值为常量吧?

TA的精华主题

TA的得分主题

发表于 2012-9-27 21:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
收藏分享了。
希望能尽快应用到实际运用中。

TA的精华主题

TA的得分主题

发表于 2012-9-27 22:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-27 22:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 zhyzhsh 于 2012-9-27 22:33 编辑
AVEL 发表于 2012-9-27 21:33
收藏分享了。
希望能尽快应用到实际运用中。


监察,您的依据是这条吧?

“为了回复而回复,内容无实质意义。
b、纯表情类:只有论坛表情而没有实际内容”
http://club.excelhome.net/thread-410527-1-1.html

可我发的表情是表达了对楼主的支持,是有实际内容和实质意义的。这样扣分会有点儿让人心寒吧?



TA的精华主题

TA的得分主题

发表于 2012-9-27 22:37 | 显示全部楼层
zhyzhsh 发表于 2012-9-27 22:31
监察,您的依据是这条吧?

“为了回复而回复,内容无实质意义。

如果真要表达对楼主支持, 就不要只发表情。

TA的精华主题

TA的得分主题

发表于 2012-9-27 22:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
AVEL 发表于 2012-9-27 22:37
如果真要表达对楼主支持, 就不要只发表情。

还给楼主评分了。

TA的精华主题

TA的得分主题

发表于 2012-9-27 22:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhyzhsh 发表于 2012-9-27 22:31
监察,您的依据是这条吧?

“为了回复而回复,内容无实质意义。

你如果当初就把你想表达的意思打字打出来,就不会有这个事情发生了。


…………
既然已经定了这样的规矩,那么你再声辩也毫无意义。

动机论一般说不是执法者考虑的问题。……尤其是可以事后解释的行为。


TA的精华主题

TA的得分主题

发表于 2012-9-27 22:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2012-9-27 22:40
你如果当初就把你想表达的意思打字打出来,就不会有这个事情发生了。

表情里有字呀。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 06:34 , Processed in 0.038086 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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