▲一个子程序:
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的。