当代码执行时,执行不会在excel vba函数内移动

时间:2015-04-22 22:18:04

标签: excel vba function execution skip

对于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

2 个答案:

答案 0 :(得分:0)

在sheet_name中输入一个值,然后重试。

答案 1 :(得分:0)

导致某些函数停止工作(以及执行代码以无法到达函数定义或在其中移动)的原因是正在卸载表单。

所有功能和子程序都在一个模块中定义,该模块是表单的一部分。

因此,您只能通过单击表单上的控件来访问此模块。

这意味着我只有一个文件夹FORMS - 里面有一个表单,并且没有一个模块文件夹,它通常出现在VBA项目部分。

因此我可以: 1)等到所有数据处理完成后再在最后一刻卸载表单

2)将功能移动到新模块(MODULES文件夹中Form的外部),这样当调用功能和子程序时,他们不会依赖打开的表单。