注冊(cè) 登錄
Office中國(guó)論壇/Access中國(guó)論壇 返回首頁(yè)

ganlinlao的個(gè)人空間 http://m.mzhfr.cn/?230471 [收藏] [復(fù)制] [分享] [RSS]

日志

VBA與函數(shù)重載

熱度 2已有 3247 次閱讀2014-6-20 11:37 |個(gè)人分類:vb入門| VBA與函數(shù)重載

VBA與函數(shù)重載

所謂函數(shù)重載是指同一個(gè)函數(shù)名可以對(duì)應(yīng)著多個(gè)函數(shù)的實(shí)現(xiàn)。
例如,可以給函數(shù)名add()定義多個(gè)函數(shù)實(shí)現(xiàn),該函數(shù)的功能是求和,即求兩個(gè)操作數(shù)的和。
其中,一個(gè)函數(shù)實(shí)現(xiàn)是求兩個(gè)int型數(shù)之和,另一個(gè)實(shí)現(xiàn)是求兩個(gè)浮點(diǎn)型數(shù)之和,
再一個(gè)實(shí)現(xiàn)是求兩個(gè)復(fù)數(shù)的和。每種實(shí)現(xiàn)對(duì)應(yīng)著一個(gè)函數(shù)體,這些函數(shù)的名字相同,但是函數(shù)的參數(shù)的類型不同。這就是函數(shù)重載的概念。
函數(shù)重載在類和對(duì)象的應(yīng)用尤其重要。
函數(shù)重載要求編譯器能夠唯一地確定調(diào)用一個(gè)函數(shù)時(shí)應(yīng)執(zhí)行哪個(gè)函數(shù)代碼,即采用哪個(gè)函數(shù)實(shí)現(xiàn)。
確定函數(shù)實(shí)現(xiàn)時(shí),要求從函數(shù)參數(shù)的個(gè)數(shù)和類型上來(lái)區(qū)分。
這就是說(shuō),進(jìn)行函數(shù)重載時(shí),要求同名函數(shù)在參數(shù)個(gè)數(shù)上不同,或者參數(shù)類型上不同。否則,將無(wú)法實(shí)現(xiàn)重載。

如果按這樣的定義,VBA不支持函數(shù)重載!!因?yàn)関ba沒辦法寫同名函數(shù)。也沒有構(gòu)造函數(shù)。那vba能實(shí)現(xiàn)函數(shù)重載同樣的功能嗎?

嘿嘿……

情型1:簡(jiǎn)單的不同數(shù)據(jù)類型的重載功能
            function SubA(  varA as Variant)
           select case varType(varA)
           case VBString :
          ....
           case VBInteger,VBLong :
         ...
          end select
          End function

情型2:不確定性的參數(shù)
       function  funA(optional varA,optional varB,……)可選參數(shù)變量只能是variant
       if not isming(varA) then
            select case varType(varA)
        case vbString:
        ……
        case vbInteger,VBlong:
        ……
        end select
      else if not isming(varB) then
      ……
      end function
 
  情型3:
        function funA (paramarray())
    處理數(shù)組參數(shù)情形
        end function

  情型4:optional中使用數(shù)組    (高難度動(dòng)作)
      vba參考寫明optoional是無(wú)法使用數(shù)組作為可選參數(shù)的。
      只不過(guò)參考說(shuō)明從來(lái)就是被人用來(lái)突破的。     
      Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Var() As Any) As Long
      dim b(5) as long '隨便定義一個(gè)數(shù)組,二維的也行
      function FunA(optional  varA as long)
       varA=varPtr(b)
       如果varA=0是空數(shù)組,非0則一定是數(shù)組。
       至于如何通過(guò)varPtr獲得的地址來(lái)獲取數(shù)組值,自己百度一下。
       end funtion

情型5:用callbyname來(lái)模擬重載  這個(gè)有點(diǎn)雞肋,意義不大。

發(fā)表評(píng)論 評(píng)論 (2 個(gè)評(píng)論)

回復(fù) t小寶 2014-7-3 15:25
很山寨
回復(fù) tmtony 2014-7-8 09:19
  

facelist doodle 涂鴉板

您需要登錄后才可以評(píng)論 登錄 | 注冊(cè)

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 03:00 , Processed in 0.075916 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部