Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 924|回复: 3

[已解决]窗体中可以自建过程供按钮调用吗

[复制链接]
发表于 2022-9-9 22:06 | 显示全部楼层 |阅读模式
各位网友好,在窗体中有按键程序,请问能不能在窗体程序中自建一个过程程序,可供按钮程序调用。这个自建程序中,窗体的通用变量可加载吗,如用dim定义一个窗体变量,在窗体的Initialize事件中,赋给变量的值,这个自建的程序能得到这个所赋的值吗
最佳答案
2022-9-16 08:48
向前650809 发表于 2022-9-15 10:02
窗体按钮程序过大,不能运行,打算把其中一部分自立一过程,然后调整。这个过程是不是可仍放在窗体中。
这 ...

楼主,您好!我水平有限,以我现有的理解,稍为您解答一下。当然,如解答有误或不够详尽的,欢迎网友们指正、补充。
1、您说“窗体按钮程序过大,不能运行”。
答:对于这一点,有点惭愧,我从没遇到、也没想过这个问题。刚刚在百度随便找了一下,可能是关键词不准确吧,也没找到答案。请问一下,您的代码的字符量得有多庞大?庞大到不能运行?运行时系统显示的错误提示是什么呢?这一点很重要,或者问题并不出在“程序过大”上。

2、您说“打算把其中一部分自立一过程……这个过程是不是可仍放在窗体中”。
答:当然可以。首先 VBA的代码是允许模块化的,而基于种种原因,我们也经常是这么干的。运行时,只需用Call调用即可(Call是可以省略的)。至于这个被调用的过程Sub(或函数Function)所“存放的位置”有一定的规律(限制),但如您所说,用窗体中的按钮来调用的过程,放在该窗体内(首选),或放在任一模块中,都是允许的,只是编程方法稍有不同。更建议放在该窗体内,省事。

3、您说“这个过程是不是也可调用窗体的Initialize事件”。
答:窗体的Initialize事件,是窗体初始化时自动执行的事件,涉及到的基本上都是初始化的情况。理论上,这个Initialize事件也是一个过程,是可以用Call来调用的,但没什么实际意义。试想,都初始化完了,再来一次初始化,有什么意义呢?很可能还会(因为重复初始化)导至冲突、出错呢。而有些情况(如清空某个控件中的内容、控件某个控件载入、显示数据的代码)可能会在初始化、以及后续使用时经常、频繁地使用,这样的代码就很值得单独编为一个过程。这样的一个过程,在窗体的Initialize事件中被调用一次,而在后续使用窗体时,也可以被按钮无限次调用。这种情况,倒是会经常出现的。

4、您说“窗体变量是不是也可调用”。
答:您的这个问题,可以归类到“参数传递”(简称“传参”)的问题中。因为上面提到了将一个过程拆分成多个过程,运行中互相调用,那就很自然地涉及到参数传递的问题。传参的方法有很多,常用的有两种。一种是用Call调用过程时,直接在Call语句中加入要传递的参数;另一种是设置公有变量。两种方法各有优缺点,要根据实际情况来选用,而且它们都有一定的语法知识和使用限制,并非三言两语就能解释清楚的,有兴趣的话,可以进一步了解。

发表于 2022-9-12 15:38 | 显示全部楼层
楼主,您好!
看不懂您说的“按键程序”、“窗体程序”,
要不,您直接说您想实现什么功能,例如“在窗体上按一下按钮,实现……”这样表达,
或许网友们更能理解和方便解答。
回复

使用道具 举报

 楼主| 发表于 2022-9-15 10:02 | 显示全部楼层
窗体按钮程序过大,不能运行,打算把其中一部分自立一过程,然后调整。这个过程是不是可仍放在窗体中。
这个过程是不是也可调用窗体的Initialize事件,窗体变量是不是也可调用。
回复

使用道具 举报

发表于 2022-9-16 08:48 | 显示全部楼层    本楼为最佳答案   
向前650809 发表于 2022-9-15 10:02
窗体按钮程序过大,不能运行,打算把其中一部分自立一过程,然后调整。这个过程是不是可仍放在窗体中。
这 ...

楼主,您好!我水平有限,以我现有的理解,稍为您解答一下。当然,如解答有误或不够详尽的,欢迎网友们指正、补充。
1、您说“窗体按钮程序过大,不能运行”。
答:对于这一点,有点惭愧,我从没遇到、也没想过这个问题。刚刚在百度随便找了一下,可能是关键词不准确吧,也没找到答案。请问一下,您的代码的字符量得有多庞大?庞大到不能运行?运行时系统显示的错误提示是什么呢?这一点很重要,或者问题并不出在“程序过大”上。

2、您说“打算把其中一部分自立一过程……这个过程是不是可仍放在窗体中”。
答:当然可以。首先 VBA的代码是允许模块化的,而基于种种原因,我们也经常是这么干的。运行时,只需用Call调用即可(Call是可以省略的)。至于这个被调用的过程Sub(或函数Function)所“存放的位置”有一定的规律(限制),但如您所说,用窗体中的按钮来调用的过程,放在该窗体内(首选),或放在任一模块中,都是允许的,只是编程方法稍有不同。更建议放在该窗体内,省事。

3、您说“这个过程是不是也可调用窗体的Initialize事件”。
答:窗体的Initialize事件,是窗体初始化时自动执行的事件,涉及到的基本上都是初始化的情况。理论上,这个Initialize事件也是一个过程,是可以用Call来调用的,但没什么实际意义。试想,都初始化完了,再来一次初始化,有什么意义呢?很可能还会(因为重复初始化)导至冲突、出错呢。而有些情况(如清空某个控件中的内容、控件某个控件载入、显示数据的代码)可能会在初始化、以及后续使用时经常、频繁地使用,这样的代码就很值得单独编为一个过程。这样的一个过程,在窗体的Initialize事件中被调用一次,而在后续使用窗体时,也可以被按钮无限次调用。这种情况,倒是会经常出现的。

4、您说“窗体变量是不是也可调用”。
答:您的这个问题,可以归类到“参数传递”(简称“传参”)的问题中。因为上面提到了将一个过程拆分成多个过程,运行中互相调用,那就很自然地涉及到参数传递的问题。传参的方法有很多,常用的有两种。一种是用Call调用过程时,直接在Call语句中加入要传递的参数;另一种是设置公有变量。两种方法各有优缺点,要根据实际情况来选用,而且它们都有一定的语法知识和使用限制,并非三言两语就能解释清楚的,有兴趣的话,可以进一步了解。

评分

参与人数 1学分 +6 收起 理由
大灰狼1976 + 6 描述详尽有耐心

查看全部评分

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-29 17:46 , Processed in 0.395069 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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