VBA数组参数的传递和返回 vba 控件作为参数传递

为了帮助网友解决“VBA 数组参数的传递和返回”相关的问题,中国学网通过互联网对“VBA 数组参数的传递和返回”相关的解决方案进行了整理,用户详细问题包括:

▲一个子程序:

Sub PicInComment(Optional ByVal PicReserve As Integer = 1, Optional ByVal WidthEdge As Integer = 300)

为什么调用并传递参数的时候必须用PicInComment 1, 250,而不能用PicInComment(1, 250)呢?

答:

用法有三种:

1、赋值给变量就要带括号。比如:a = PicInComment(1, 250)

2、call PicInComment(1, 250)

3、PicInComment 1, 250

▲函数定义:

Function SearchAllFile() As String()

Dim arr(1 To 100) As String

'一些处理

SearchAllFile = arr '返回数组

End Function

函数调用:

Private Sub btnRun_Click()

Dim ClArray(1 To 100) As String

ClArray = ModCheck.SearchAllFile '报错“类型不一致”,请问为什么?

End Sub

具体解决方案如下:

解决方案:

Private Sub btnRun_Click()

'ClArray不需要定义数组维数即可

Dim ClArray() As String

'或:dim ClArray

'确保左侧的是大小可以调节的数组,且类型匹配

'ClArray 只能是动态数组或variant变量。

ClArray = ModCheck.SearchAllFile

End Sub

▲VBA函数数组参数的问题,用单元格传递不行。

我在VBA的模块中插入了一个函数,作用是计算向量的2范数如下

public function fanshu(ParamArray a() as Variant)

dim i as long

fanshu=0

for i=0 to UBound(a())

fanshu=fanshu+a(i)^2

next i

fanshu=Sqr(fanshu)

end function

参数用数组表示能得出正确结果如在单元格输入=fanshu(1,2,3,4)没问题

但在单元格A1到A4分别输入1,2,3,4 在A5中输入=fanshu(A1:A4)却得到错误#VALUE!

请问如何定义参数使得用选中单元格的方式来传递参数?

Public Function fanshu(rng As Range)

Dim Cell As Range

fanshu = 0

For Each Cell In rng

fanshu = fanshu + Cell ^ 2

Next

fanshu = Sqr(fanshu)

End Function

▲问:要求在调用子程序后能够将二维数组的数据导入到主程序对应的数组中?

答:

Sub test()

Dim arr(), H As Long, L As Long

arr = Range("A1:C8")
VBA数组参数的传递和返回 vba 控件作为参数传递

L = 2

H = 5

Call CD(arr, H, L)

End Sub

Sub CD(iarr, iH, iL)

ss = iarr(iH, iL)

MsgBox "工作表的第" & iH & "行,第" & iL & "列的值是:" & ss, Title:="子程序信息"

End Sub

▲如何使用vba返回动态数组中的元素 ?

问:现在想用vba写一个函数,返回值为一个维度为a*b 的数组,函数的参数就是...

答:

Sub Main()

a = 3

b = 4

ReDim Ar(1 To a, 1 To b)

Call ub(Ar) MsgBox Ar(1, 2)

End Sub

Function ub(ByRef Arr)

For i = LBound(Arr) To UBound(Arr)

For j = LBound(Arr, 2) To UBound(Arr, 2)

Arr(i, j) = i * j

Next j

Next i

End Function

▲vba如何将数组带入自定义的函数?

如何对数组进行自定义函数的运算,然后输出数组?就是说m=f(s,t,L,K)中的s取(2,3,4,5,6),结果m用数组输出 怎么写?求老师们指导~~

解决方案1:

Private Sub Form_Load()

Dim s(), s1()

s = Array(2, 3, 4, 5, 6)

Dim t, L, K

t = 1

L = 2

K = 3

s1 = Test(s, t, L, K)

For i = 0 To UBound(s1)

MsgBox s1(i)

Next

End Sub

Function Test(s(), t, L, K)

Dim a

ReDim a(UBound(s))

For i = 0 To UBound(s)

a(i) = s(i) + t + L + K '

Next

Test = a

End Function

解决方案2:

VB中,数组本来就是以传址方式进行传递调用的。也就是说,你这个参数S,可以是一个数组,调用的

时候,以一个数组调用,结果会传递返回给调用处。

▲在VBA中调用函数时,怎么实现返回多个参数?

解决方案1:

按地址引用参数就可以改变传进去的参数的值了。

如下列所示代码:

m和n就被函数addtest改变为3和4了。

Public Function addtest(ByRef a As Integer, ByRef b As Integer)

a = 3

b = 4

addtest = 5

End Function

Sub aa()

Dim m As Integer

Dim n As Integer

addtest m, n

MsgBox m

MsgBox n

End Sub

解决方案2:

返回数组地址。

▲通过EXCEL VBA自定义了一个函数,无法把数组传入到函数中。

解决方案1:

只能传单元格,然后转数组。如下

Function MyTest(rng As Range)

Dim arr() As Variant

Set arr = rng.Value

MyTest = UBound(arr)

End Function

解决方案2:

这要用ParamArray的。

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/81395.html

更多阅读

怎样使用C#的月历MonthCalendar 控件 c panel控件的使用

怎样使用C#的月历【MonthCalendar】控件——简介 C#中的日历控件【MonthCalendar】是比较常用的一个控件,可以让用户对日期进行快速的查看和设置、也可以选择一段所需要的日期时间段。 下面介绍一下几种日历控件常用的使用方法。怎

二维数组与数组指针的用法 二维数组指针传递

二维数组与数组指针的用法 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构

一维数组的定义、初始化和引用 一维数组初始化为0

一维数组的定义、初始化和引用一维数组的定义、初始化和引用1.一维数组的定义方式为:类型说明符 数组名[常量表达式](1)数组名的命名方法与变量名相同,遵循标识符命名规则;(2)数组是用方括号括起来的常量表达式,不能用圆括号;(3)常量表达式表

声明:《VBA数组参数的传递和返回 vba 控件作为参数传递》为网友滥情男分享!如侵犯到您的合法权益请联系我们删除