技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 21536
|
本帖最后由 todaynew 于 2011-4-25 21:12 編輯
數(shù)月前,有版友發(fā)貼希望得到函數(shù)編制方法的講座。在我看來(lái),這個(gè)事情沒(méi)法講,其原因在于函數(shù)和模塊只是抽象的結(jié)果,無(wú)一定之規(guī)和現(xiàn)成之法。后來(lái)風(fēng)行同志還是嘗試著編寫了一個(gè)講座的視頻,寫得很好,對(duì)版友們應(yīng)該有所幫助。通過(guò)風(fēng)行同志的實(shí)踐,看來(lái)函數(shù)的編制還是可以講的,可能著重在于講編寫的策略、處理的思路,抽象的方法。
今日里,版友yinyt 同志問(wèn)詢一個(gè)一周內(nèi)數(shù)據(jù)的篩選問(wèn)題,給定的條件是某個(gè)確定的日期,要求篩選出本周或者上周或者下周的數(shù)據(jù)來(lái)。就這個(gè)問(wèn)題我編寫了自定義函數(shù),編寫的過(guò)程是我的一個(gè)基本習(xí)慣,就是由淺入深,逐步推進(jìn),逐步擴(kuò)展。我想對(duì)于初學(xué)者來(lái)說(shuō),大都可以采用這一個(gè)基本策略進(jìn)行自定義函數(shù)的編寫。下面把我的思維過(guò)程展示給版友們,希望能對(duì)你有所幫助。
首先,我想這個(gè)問(wèn)題的解決關(guān)鍵是得到給定日期所在周的周一日期。于是我編寫了以下的函數(shù):
Function Monday(MYDate as Date) as date
'功能:計(jì)算給定日期所在周的周一日期
'參數(shù):MyDate--給定日期
'示例:計(jì)算下周周一日期 Msgbox Monday(Date)
dim n as long
n=1-Weekday(Mydate,vbMonday)
Monday=DateAdd("d",n,MyDate)
END Function
接下來(lái)我考慮版友yinyt 同志需要在上周或者下周進(jìn)行篩選,于是應(yīng)該增加一個(gè)參數(shù),將函數(shù)擴(kuò)展為能在若干周內(nèi)找到對(duì)應(yīng)周的周一日期,于是我加入了一個(gè)參數(shù)m,使函數(shù)變化為:
Function Monday(MYDate as Date,m as long) as date
'功能:計(jì)算給定日期所在周的周一日期
'參數(shù):MyDate--給定日期,m--0為本周,1為下周,-1為前周
'示例:計(jì)算下周周一日期 Msgbox Monday(Date,1)
dim n as long
n=1-Weekday(Mydate,vbMonday)
Monday=DateAdd("d",n,MyDate)
Monday=DateAdd("d",m*7,Monday)
END Function
版友yinyt 同志的真正需求不是僅僅找到周一,而是應(yīng)該找到某個(gè)周的周一和周日日期,這樣就可以用Between And 這樣的結(jié)構(gòu)來(lái)構(gòu)成篩選的準(zhǔn)則了。于是我覺(jué)得函數(shù)返回的不應(yīng)該是一個(gè)數(shù),而應(yīng)該是一個(gè)數(shù)組,這個(gè)數(shù)組包含了周一和周日的日期;诖,便將函數(shù)最終修改為如下:
Function MYWeekday(MYDate As Date, m As Long) As Variant
'功能:計(jì)算給定日期所在周的周一日期與周日日期數(shù)組
'參數(shù):MyDate--給定日期,m--0為本周,1為下周,-1為前周
'示例:計(jì)算下周周一日期 Msgbox Monday(Date,1)
Dim A(1)
Dim D As Date
Dim n As Long
n = 1 - Weekday(MYDate, vbMonday)
D = DateAdd("d", n, MYDate)
D = DateAdd("d", m * 7, D)
A(0) = D
A(1) = DateAdd("d", 6, D)
MYWeekday = A
End Function
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)
x
|