调用子程序“预期的变量或过程,而不是模块”时出错。

时间:2013-01-01 22:51:25

标签: excel vba

我正在尝试创建一个子程序,它将调用其他一些子程序。

当我在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按预期工作。我试图改变它以将用户定义的变量传递给它。

2 个答案:

答案 0 :(得分:9)

<强>背景

当Excel创建模块时,它会命名为Module1Module2,依此类推。如果像我一样将你的例程分成几组:Global,Task1,Task2等等,这会让人感到困惑。

并非所有人都知道您可以重命名Excel模块。这在Access中显而易见,要求您提供模块的名称。对于Excel,您必须自己发现这个设施。

选择模块,单击F4,模块属性将显示在浮动窗口中,就像对表单一样。唯一的属性是Name,您可以将其更改为符合变量名称规则的任何内容。使用此工具我重命名我的模块:GlobalTask1Task2等等,这使我可以轻松识别我今天要处理的模块。

<强>限制

我相信您在选择模块名称时遇到了一个限制。

如果我重命名模块Task1,则该模块中名为Task1的子,函数或全局变量在外部是不可见的。

如果包含sub schedule_3_day(ByRef ...的模块名为schedule3_day,则会出现错误消息“预期的变量或过程,而不是模块”。

答案 1 :(得分:0)

如果模块和宏具有相同的名称,请执行以下操作:

module.macro

因此,如果我的模块和宏都称为FreezeColumnFilter,则代码为:

FreezeColumnFilter.FreezeColumnFilter