执行代码时,执行不会在 excel vba 函数中移动
Posted
技术标签:
【中文标题】执行代码时,执行不会在 excel vba 函数中移动【英文标题】:when code is executed execution won't move inside a excel vba function 【发布时间】:2015-04-22 22:18:04 【问题描述】:对于 VBA 函数和大多数编程,我理解一般程序执行会发生这样的事情......
如果在子过程中调用一个函数(它应该返回一个值),在这种情况下它会返回一个值给变量 num。
扩展这意味着执行到达我调用函数的行,然后应该跳到编写函数的位置,并执行该函数内的每一行。
这就是我之前使用 F8 键突出显示并逐行执行代码时的工作方式。
问题 问题是当执行到达调用函数的子过程中的行时,该函数只是被跳过并且执行不会进入函数内部并运行其中的每一行。
(我应该说,当这种情况发生时,我有 95% 的程序都在工作,我已经尝试重写函数,调用其他函数)。
但是每当调用一个函数时,代码的执行并不会进入函数本身,它只是跳过它,因此保存函数结果的变量是空的。
我尝试在函数开头以及在子过程中调用该函数时创建断点,但这没有奏效。
至少执行应该到达函数的定义(Function FirstRow() 等)并抛出和错误,但它没有这样做。
Sub Main
Dim num as double
Dim sheet_name as string
num = FirstRow(sheet_name)
End Sub
Function FirstRow(sheet as string) as double
select case sheet '<<----- execution never gets inside the function
case "sheet"
FirstRow = 8
case "sheet2"
FirstRow = 12
end select
End Function
【问题讨论】:
抱歉,您的问题无法重现。当我运行你的 sub 时,我可以毫无问题地进入函数。您能否添加一个可重现的测试用例? 我尝试在调用函数时只在函数中放入一个字符串,因此有一个值代替了工作表名称。两者都不起作用。它只是跳过该功能。我无法提供示例工作簿。 如果您不能提供可重现的示例,我认为您在这里无法获得太多帮助,因为您的代码应该按您的预期工作,这就是它在我的计算机上实际执行的操作。所以要么是你的机器的问题(尝试另一个),要么你省略了相关的代码部分。 【参考方案1】:在 sheet_name 中输入一个值,然后重试。
【讨论】:
sheet_name
被声明为字符串,这意味着自编译以来它的默认值为""
。即使没有分配,也没有理由不进入函数(确实,上面的代码直接在我的电脑中运行)。
我同意我认为没有理由不应该在我被难住的函数内移动执行。
@yoshiserry Sub 和 function 是否在同一个标准模块中??
它们实际上是所有这些功能,subs 位于一个模块中,我通过单击我创建的 import_form 来访问该模块。当函数 subs 位于用户表单的模块内时,您可以编写的函数或过程的数量是否有限制?【参考方案2】:
导致某些函数停止工作(并且代码执行未到达函数定义或在其中移动)的原因是卸载表单。
所有的函数和子程序都定义在一个模块中,该模块是表单的一部分。
因此,您只能通过单击表单上的控件来访问此模块。
这意味着我只有一个文件夹 FORMS - 其中有一个表单,并且没有通常会出现在 VBA 项目部分中的模块文件夹。
因此,我可以: 1)等到所有数据处理完成后再在最后一分钟卸载表单
或
2) 将函数移动到新模块(MODULES 文件夹中表单的外部),因此当调用函数和子过程时,它们不依赖于打开的表单。
【讨论】:
以上是关于执行代码时,执行不会在 excel vba 函数中移动的主要内容,如果未能解决你的问题,请参考以下文章
Excel vba 函数counta未定义与autofill无效