Ken*_*nes 31 vba function return-value word-vba
所以我想知道,如何从VBA中的函数,子或类型返回多个值?我有这个主要的子应该从几个函数收集数据,但一个函数只能返回它看起来的一个值.那么如何将多个返回给子?
Mic*_*nis 49
您可能希望重新考虑应用程序的结构,如果您真的想要一个方法来返回多个值.
要么分开,要么不同的方法返回不同的值,或者找出逻辑分组并构建一个对象来保存可以返回的数据.
' this is the VB6/VBA equivalent of a struct
' data, no methods
Private Type settings
root As String
path As String
name_first As String
name_last As String
overwrite_prompt As Boolean
End Type
Public Sub Main()
Dim mySettings As settings
mySettings = getSettings()
End Sub
' if you want this to be public, you're better off with a class instead of a User-Defined-Type (UDT)
Private Function getSettings() As settings
Dim sets As settings
With sets ' retrieve values here
.root = "foo"
.path = "bar"
.name_first = "Don"
.name_last = "Knuth"
.overwrite_prompt = False
End With
' return a single struct, vb6/vba-style
getSettings = sets
End Function
Run Code Online (Sandbox Code Playgroud)
One*_*ide 20
您可以尝试返回VBA集合.
只要您处理对值,例如"Version = 1.31",您就可以将标识符存储为键("Version"),将实际值(1.31)存储为项目本身.
Dim c As New Collection
Dim item as Variant
Dim key as String
key = "Version"
item = 1.31
c.Add item, key
'Then return c
Run Code Online (Sandbox Code Playgroud)
之后访问这些值是一件轻而易举的事情:
c.Item("Version") 'Returns 1.31
or
c("Version") '.Item is the default member
Run Code Online (Sandbox Code Playgroud)
是否有意义?
Mar*_*lan 14
想法:
您还可以使用variant数组作为返回结果来返回任意值的序列:
Function f(i As Integer, s As String) As Variant()
f = Array(i + 1, "ate my " + s, Array(1#, 2#, 3#))
End Function
Sub test()
result = f(2, "hat")
i1 = result(0)
s1 = result(1)
a1 = result(2)
End Sub
Run Code Online (Sandbox Code Playgroud)
因为你的调用者需要知道返回什么才能使用结果,所以很容易出现丑陋和容易出错的问题.
小智 5
一个函数返回一个值,但它可以“输出”任意数量的值。示例代码:
Function Test (ByVal Input1 As Integer, ByVal Input2 As Integer, _
ByRef Output1 As Integer, ByRef Output2 As Integer) As Integer
Output1 = Input1 + Input2
Output2 = Input1 - Input2
Test = Output1 + Output2
End Function
Sub Test2()
Dim Ret As Integer, Input1 As Integer, Input2 As Integer, _
Output1 As integer, Output2 As Integer
Input1 = 1
Input2 = 2
Ret = Test(Input1, Input2, Output1, Output2)
Sheet1.Range("A1") = Ret ' 2
Sheet1.Range("A2") = Output1 ' 3
Sheet1.Range("A3") = Output2 '-1
End Sub
Run Code Online (Sandbox Code Playgroud)
您可以将 2 个或更多值返回给 VBA 或任何其他 Visual Basic 内容中的函数,但您需要使用称为 Byref 的指针方法。请参阅下面我的示例。我将创建一个函数来添加和减去 2 个值,例如 5,6
sub Macro1
' now you call the function this way
dim o1 as integer, o2 as integer
AddSubtract 5, 6, o1, o2
msgbox o2
msgbox o1
end sub
function AddSubtract(a as integer, b as integer, ByRef sum as integer, ByRef dif as integer)
sum = a + b
dif = b - 1
end function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164625 次 |
| 最近记录: |