2014-08-29 199 views
-1

我想通过调用我的VBA代码中的函数为变量赋值。VBA函数返回错误的值

我的子程序中看起来是这样的:

Sub testSubroutine() 
Dim iVal As Integer 
iVal = readSolOverviewTable("TOT_MAPS") 
Debug.Print "Function readSolOverviewTable returned: " & iVal 
End sub 

的readSolOverviewTable功能与函数本身返回正确的值。我通过调试功能代码来验证它。

但似乎有一些问题与子程序代码如下声明:

iVal = readSolOverviewTable("TOT_MAPS") 

始终返回0。

难道我做错了什么?

Updated: 
==================================== 

我的功能是这样的:

Function readSolOverviewTable(searchVal As String) As Integer 
    Dim retVal As Integer 
    retVal = -99 

    ' Do some code and assign value to the variable retVal 
    retVal = 100 
    Debug.Print "retval is: " & retVal 
End Function 

正如预期的那样;这正确地显示调试输出为100 但是不反映在子程序调用中。

但代码更改为此做出一切都还好吗:

Function readSolOverviewTable(searchVal As String) As Integer 
    Dim retVal As Integer 
    retVal = -99 

    ' Do some code and assign value to the variable retVal 
    retVal = 100 
    Debug.Print "retval is: " & retVal 

    readSolOverviewTable = retVal 

End Function 

现在,我已经解决了这个问题(我希望),请问是什么原因,为什么这个奇怪的一种语法?

+1

你在函数本身中用“with”表示什么?你可以发布'readSolOverviewTable'内容吗? (至少相关部分) – smagnan 2014-08-29 07:03:04

+0

请向我们展示'readSolOverviewTable'代码# – 2014-08-29 07:04:46

+3

您可能需要检查[THIS ANSWER](http://stackoverflow.com/questions/2781689/how-to-return-from-a- vba函数) – 2014-08-29 07:05:38

回答

2

问题很简单 - 你没有返回一个值。为了从VBA中的函数返回一个值,你需要在代码末尾说出function name = value(就像说“return xxx”)。由于你没有从函数返回一个值,所以它默认为0.