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")
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的。
更多阅读
怎样使用C#的月历MonthCalendar 控件 c panel控件的使用
怎样使用C#的月历【MonthCalendar】控件——简介 C#中的日历控件【MonthCalendar】是比较常用的一个控件,可以让用户对日期进行快速的查看和设置、也可以选择一段所需要的日期时间段。 下面介绍一下几种日历控件常用的使用方法。怎
如何在VB 6.0中添加和使用CommonDialog 控件? vb6.0控件下载
如何在VB 6.0中添加和使用CommonDialog 控件?——简介CommonDialog 控件可以提供标准的打开、另存、选择颜色、字体、设置打印选项等对话框。在VB 6.0中可以按照以下的步骤添加、使用CommonDialog。如何在VB 6.0中添加和使用CommonD
c语言中求数组长度的问题 c语言求数组的长度
求数组长度的方法有两种 第一种是intarray[n];strlen(array);//这个方法可以求得字符串数组的长度char sizeof(array);sizeof(array);//可以求的数组的长度
二维数组与数组指针的用法 二维数组指针传递
二维数组与数组指针的用法 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构
一维数组的定义、初始化和引用 一维数组初始化为0
一维数组的定义、初始化和引用一维数组的定义、初始化和引用1.一维数组的定义方式为:类型说明符 数组名[常量表达式](1)数组名的命名方法与变量名相同,遵循标识符命名规则;(2)数组是用方括号括起来的常量表达式,不能用圆括号;(3)常量表达式表