2015-04-22 65 views
-1

对于一般的VBA函数和大多数编程我明白发生这样的事情一般程序执行中移动...被执行的代码执行时不会一个excel VBA函数

子过程内,如果调用函数(它应该返回一个值),在这种情况下,它会返回一个值给变量num。

扩大,这意味着执行到哪里调用该函数的行,然后应该跳过跌到哪里函数编写,并经过执行该函数中的每一行。

这是它以前的工作原理,我以前使用F8键突出显示并按行逐行执行代码。

问题 问题是,当执行到其中函数调用的函数只是跳过和执行不下去的函数内部并运行里面的每一行的子过程中的线。

(我应该说这种情况发生时我有一个工作计划的95%,我尝试了重写的功能,调用等功能)。

但每当一个函数被调用的代码执行不进入函数本身它只是跳过它,并保存功能,因此保留为空的结果的变量。

我试图在函数的开始,当函数被调用的子过程中但是这没有奏效创建断点。

至少,执行应该得到的功能(功能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 
+0

对不起但你的问题是不可重复的。当我运行你的子程序时,我会在没有问题的情况下进入函数。你能否添加一个可重复的测试用例? –

+0

我试过在函数中只放一个字符串,所以有一个代替表名的值。两者都不起作用。它只是跳过功能。我无法提供示例工作簿。 – yoshiserry

+0

如果你不能提供一个可重复的例子,我认为你不能在这里得到很多帮助,因为你的代码应该按照你的预期工作,这就是它实际上在我的计算机上所做的。所以无论是你的机器的问题(尝试另一个),或者你正在省略代码的相关部分。 –

回答

0

将一个值放在sheet_name中,然后重试。

+0

'sheet_name'被声明为字符串,这意味着它自编译以来具有''“''的defalut值。即使没有分配,也没有理由不进入函数(实际上,上面的代码直接在我的计算机中运行)。 –

+0

我同意我没有看到为什么执行不应该在我难过的函数中移动。 – yoshiserry

+0

@yoshiserry同一个标准模块中的* Sub *和*函数*都是? –

0

什么导致一些函数停止工作(并且执行代码以达不到函数定义或在其中移动)正在卸载该表单。

所有功能和子程序都是在作为表格一部分的模块中定义的。

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

这意味着,我只用了一个文件夹窗体 - 其中有一个形式里面,并没有这通常会出现在VBA项目部分中的模块文件夹。

因此我可以: 1)等待,直到所有的数据处理已在最后一分钟卸载窗体右之前已经完成

2)移动的功能,以一个新的模块(外部到MODULES文件夹中的表单),所以当功能和子程序被调用时,它们不依赖于打开的表单。