我正在尝试创建一个子程序,它将调用其他一些子程序。
当我在if语句中使用调用时,我收到错误:
预期变量或程序,而不是模块。
这是通话程序:
Call schedule_3_day(shift1, ActiveWorkbook.Sheets("Employees"), ActiveWorkbook.Sheets("3 Day Template"))
这是它引用的功能。
Sub schedule_3_day(ByRef sourcesheet As Worksheet, ByRef employeesheet As Worksheet, ByRef template As Worksheet)
就它本身而言,即当它是一个自包含的子程序时,schedule_3_day按预期工作。我试图改变它以将用户定义的变量传递给它。
答案 0 :(得分:9)
<强>背景强>
当Excel创建模块时,它会命名为Module1
,Module2
,依此类推。如果像我一样将你的例程分成几组:Global,Task1,Task2等等,这会让人感到困惑。
并非所有人都知道您可以重命名Excel模块。这在Access中显而易见,要求您提供模块的名称。对于Excel,您必须自己发现这个设施。
选择模块,单击F4,模块属性将显示在浮动窗口中,就像对表单一样。唯一的属性是Name
,您可以将其更改为符合变量名称规则的任何内容。使用此工具我重命名我的模块:Global
,Task1
,Task2
等等,这使我可以轻松识别我今天要处理的模块。
<强>限制强>
我相信您在选择模块名称时遇到了一个限制。
如果我重命名模块Task1
,则该模块中名为Task1
的子,函数或全局变量在外部是不可见的。
如果包含sub schedule_3_day(ByRef ...
的模块名为schedule3_day
,则会出现错误消息“预期的变量或过程,而不是模块”。
答案 1 :(得分:0)
如果模块和宏具有相同的名称,请执行以下操作:
module.macro
因此,如果我的模块和宏都称为FreezeColumnFilter,则代码为:
FreezeColumnFilter.FreezeColumnFilter