对于VBA函数和大多数编程一般我理解一般程序执行发生类似这样的事情......
如果你调用一个函数(它应该返回一个值),在子过程内部,在这种情况下,它会返回一个变量num的值。
要扩展这意味着执行到达我调用函数的行,然后应该跳到函数编写的位置,然后执行该函数内的每一行。
当我使用F8键突出显示并逐行执行代码时,这就是我以前的工作方式。
问题 问题是当执行到达调用函数的子过程内部的行时,函数被跳过并且执行不会进入函数内部并运行其中的每一行。
(我应该说当发生这种情况时,我有95%的工作程序,我已经尝试重写函数,调用其他函数)。
但是每当调用一个函数时,代码的执行都不会进入函数本身,它只会跳过它,因此保存函数结果的变量将保持为空。
我尝试在函数的开头创建断点,并且在子过程中调用函数但是这没有用。
至少执行应该到函数的定义(函数FirstRow()等)和throw和错误,但它没有这样做。
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
答案 0 :(得分:0)
在sheet_name中输入一个值,然后重试。
答案 1 :(得分:0)
导致某些函数停止工作(以及执行代码以无法到达函数定义或在其中移动)的原因是正在卸载表单。
所有功能和子程序都在一个模块中定义,该模块是表单的一部分。
因此,您只能通过单击表单上的控件来访问此模块。
这意味着我只有一个文件夹FORMS - 里面有一个表单,并且没有一个模块文件夹,它通常出现在VBA项目部分。
因此我可以: 1)等到所有数据处理完成后再在最后一刻卸载表单
或
2)将功能移动到新模块(MODULES文件夹中Form的外部),这样当调用功能和子程序时,他们不会依赖打开的表单。