-
RISEBY
函数定义了之后就可以类似 系统的函数拿来使用,<变量>=函数名(参数列表)函数如果不关心其返回值,可以用:函数名 参数列表【注意,不加小括号】的形式拿来用,此时函数的功能与过程类似了【例:MsgBox "Hello World!"】过程可以用Call调用 ,如:Call 过程名(参数列表),也可不加Call=============================================按照你的说明 ,写了以下小例子,没有出错:Private Function a(b As Range) As IntegerRange("D1") = "Run a"a = 2End FunctionSub c()Dim d As RangeSet d = Sheet1.Range("a1:d1")Call a(d)End Sub运行后 “D1”中内容已经更改了!说明已经能够正确运行了你的出错 请给出出错信息!
-
慕虎7371278
假设我在一个模块中建立了一个公共函数apublic function a(b as string)...end function在另一个模块中的建立一个过程csub c()...end sub那如果我想从另一个模块中的过程c调用这个公共函数a该怎么做呢?顺便问一下,如果我想在函数中返回一个数组该怎么做呢?听说call也可以??
-
ibeautiful
vba模块中的公共函数是直接拿来可以用的就跟已经在本模块中一样用法,用的时候就跟楼上说的一样用 call a(b)返回数组我一般用两个方法,第一个方法是定义一个公用的数组,在哪个模块都可以如public b(10) as long第二个方法是在过程中定义好数组,在调用函数的时候以参数的形式传递参数的地址。如sub main()dim b(10) as longcall trans(byref b) '这里必须在b之前写上byref,表示传达数组地址'从这里开始就可以使用已经被sub trans处理过的数组b(10)了。。。。。。end subsub trans(bb as long)。。。。。。end sub
-
温温酱
通过VBA调用函数并给函数指明参数的几种调用方法:①种调用方法Worksheets(1).Range("E6") = WorksheetFunction.Median(Range("A1:B4"))这种调用形式,函数的参数是单元格地址区域,属于普通型,但数据区域的定义难于确定。②种调用方法Worksheets("sheet1").Range("D6") = Application.Min(Range("A1:B4"))这种调用形式,函数参数的数据区域及工作表名称,属于普通型,灵活性不够。③种调用方法Worksheets(1).Range("C6") = Application.Max(Worksheets("Sheet1").Range("A1:B4"))此类调用方法,直接指明工作表名称及数据范围,但还是缺乏灵活性。④种调用方法Worksheets(1).Range(Cells(6, 2), Cells(6, 2)) = Application.WorksheetFunction.Average(Worksheets(1).Range(Cells(1, 1), Cells(4, 2)))这种调用方法,是最标准、最灵活、最具有代表性、最完整、出错率最低的一种调用方法。因为一个工作薄包含多张工作表,只要在调用中,首先指明工作表名称再给出数据范围,这样,就不会和其它工作表混淆,另外,对表的名称和数据区域的引用,完全都是通过可构造性的行列序号来标记的,这种方法是相当的灵活。另外,调用函数的时候,也是逐渐引用。首先是Application引用,再次是WorksheetFunction引用,最后长到函数名称,如:Application.WorksheetFunction.Average,这样就可以保证逻辑性的完整,可以避免错误的发生。请注意VBA只能调用EXCEL绝大多数的函数,而不是所有函数。
-
慕慕森
模块一,两个fun:---------Public Function aFun(n() As Long, m As Integer)For i = LBound(n) To UBound(n)n(i) = n(i) + 10Nextm = m + 100End FunctionPublic Function bFun(rng As Range)On onerror GoTo 100With rngFor i = 1 To .Rows.CountFor j = 1 To .Columns.CountWith .Cells(i, j)If IsNumeric(.Value) And Not IsEmpty(.Value) Then .Value = .Value + 100End WithNext j, iEnd With100:End Function------------模块二,两个sub,调用上面的两个fun:---------Public Sub a()Dim iArr(1 To 3) As LongDim a As IntegerFor i = 1 To 3iArr(i) = iNexta = 5Call aFun(iArr, a)MsgBox iArr(3) & Chr(10) & aEnd SubPublic Sub b()Dim iRng As Range: Set iRng = Range("a1:b5")If iRng.Count <= 1 Then iRng.Value = iRng.Value + 100: GoTo 100Call bFun(iRng)100:End Sub