Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 最佳实践VBA:非布尔函数上的布尔返回值_Arrays_Vba_Excel - Fatal编程技术网

Arrays 最佳实践VBA:非布尔函数上的布尔返回值

Arrays 最佳实践VBA:非布尔函数上的布尔返回值,arrays,vba,excel,Arrays,Vba,Excel,我正在寻找有关编写函数以在VBA中返回多维数组行的帮助。关于VBA中的数组函数,有一个“库”函数,具有许多很好的特性。关于StackOverflow的许多VBA数组问题都引用了这篇文章。然而,我注意到cpearson因此使用了布尔函数 示例:下面给出的GetRow函数是布尔函数,尽管我认为该函数应该从给定的行号返回一个一维数组,比如 Function RtrnArrayRow(SrcArr() As Variant, RowNumber As Integer) As Variant 其中,Rt

我正在寻找有关编写函数以在VBA中返回多维数组行的帮助。关于VBA中的数组函数,有一个“库”函数,具有许多很好的特性。关于StackOverflow的许多VBA数组问题都引用了这篇文章。然而,我注意到cpearson因此使用了布尔函数

示例:下面给出的
GetRow
函数是布尔函数,尽管我认为该函数应该从给定的行号返回一个一维数组,比如

Function RtrnArrayRow(SrcArr() As Variant, RowNumber As Integer) As Variant
其中,
RtrnArrayRow
是一维数组

问题:应用布尔或非布尔数组函数的最佳实践是什么,以及如何最好地正确使用下面的布尔函数

感谢所有的帮助

Function GetRow(Arr As Variant, ResultArr As Variant, RowNumber As Long) As Boolean
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetRow
' This populates ResultArr with a one-dimensional array that is the
' specified row of Arr. The existing contents of ResultArr are
' destroyed. ResultArr must be a dynamic array.
' Returns True or False indicating success.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim ColNdx As Long
''''''''''''''''''''''''''''''
' Ensure Arr is an array.
''''''''''''''''''''''''''''''
If IsArray(Arr) = False Then
    GetRow = False
    Exit Function
End If

''''''''''''''''''''''''''''''''''
' Ensure Arr is a two-dimensional
' array.
''''''''''''''''''''''''''''''''''
If NumberOfArrayDimensions(Arr) <> 2 Then
    GetRow = False
    Exit Function
End If

''''''''''''''''''''''''''''''''''
' Ensure ResultArr is a dynamic
' array.
''''''''''''''''''''''''''''''''''
If IsArrayDynamic(ResultArr) = False Then
    GetRow = False
    Exit Function
End If

''''''''''''''''''''''''''''''''''''
' Ensure ColumnNumber is less than
' or equal to the number of columns.
''''''''''''''''''''''''''''''''''''
If UBound(Arr, 1) < RowNumber Then
    GetRow = False
    Exit Function
End If
If LBound(Arr, 1) > RowNumber Then
    GetRow = False
    Exit Function
End If

Erase ResultArr
ReDim ResultArr(LBound(Arr, 2) To UBound(Arr, 2))
For ColNdx = LBound(ResultArr) To UBound(ResultArr)
    ResultArr(ColNdx) = Arr(RowNumber, ColNdx)
Next ColNdx

GetRow = True

End Function
函数GetRow(Arr为变量,resultar为变量,RowNumber为长)为布尔值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
“格特罗
'这将使用一维数组填充Resultar,该数组是
'指定的Arr行。Resultar的现有内容为
”“毁了。Resultar必须是动态数组。
'返回表示成功的True或False。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
暗淡的ColNdx如长
''''''''''''''''''''''''''''''
'确保Arr是一个数组。
''''''''''''''''''''''''''''''
如果IsArray(Arr)=False,则
GetRow=False
退出功能
如果结束
''''''''''''''''''''''''''''''''''
“确保Arr是二维的
'阵列。
''''''''''''''''''''''''''''''''''
如果阵列尺寸(Arr)数为2,则
GetRow=False
退出功能
如果结束
''''''''''''''''''''''''''''''''''
'确保Resultar是动态的
'阵列。
''''''''''''''''''''''''''''''''''
如果IsArrayDynamic(Resultar)=False,则
GetRow=False
退出功能
如果结束
''''''''''''''''''''''''''''''''''''
'确保ColumnNumber小于
'或等于列数。
''''''''''''''''''''''''''''''''''''
如果UBound(Arr,1)<行数,则
GetRow=False
退出功能
如果结束
如果LBound(Arr,1)>行数,则
GetRow=False
退出功能
如果结束
删除结果器
重拨结果器(LBound(Arr,2)到UBound(Arr,2))
对于ColNdx=LBound(resultar)到UBound(resultar)
结果r(ColNdx)=Arr(行数,ColNdx)
下一个ColNdx
GetRow=True
端函数

填充/返回数组的函数通常通过参数中的引用返回数组,因为这样可以使用函数的返回值来查看数组是否成功返回

与VB.NET不同,在VB6/A中,您无法通过执行
Is Nothing
轻松测试数组是否存在。因此,这种显式返回成功/失败的技术

您可以使用它,也可以采用其中一种,在这种情况下,您可以返回数组而不是布尔值。

符合GSerg的解释:

该函数在处理“输入”数组(
Arr As Variant
)之前执行一系列验证,以提取“所需”行(
RowNumber,长度为
)的“输出”数组(
resultar As Variant
)如果所有验证都成功通过,则它将预期结果作为参数返回,其值变为
TRUE
;如果任何验证失败,其值为
FALSE
,则您知道输出无效

验证:

如果上述任何一项失败,则

    GetRow = False
    Exit Function
否则将生成“结果”数组

并变为
TRUE

GetRow = True
所有这些都在函数的开头解释

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetRow
' This populates ResultArr with a one-dimensional array that is the
' specified row of Arr. The existing contents of ResultArr are
' destroyed. ResultArr must be a dynamic array.
' Returns True or False indicating success.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
此函数设计为以这种方式运行,以便传递信息,例如它是否能够准确执行预期的操作。这是可以使用的形式之一:

If not GetRow(InputArray, ResultArray , RowNumber ) then Goto ErrorHandler

谢谢你的回答。函数的确切作用非常清楚,我的问题是为什么:-)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetRow
' This populates ResultArr with a one-dimensional array that is the
' specified row of Arr. The existing contents of ResultArr are
' destroyed. ResultArr must be a dynamic array.
' Returns True or False indicating success.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If not GetRow(InputArray, ResultArray , RowNumber ) then Goto ErrorHandler