請教一個VBA日期間比較的問題..很奇笆的狀況

恩,不知怎麼描述好,我盡可能的長話短說..
原先正常皆可順利執行的情況為:
以往我在比對日期時,用VBA的語法是如:
假設日期欄在A欄位,判斷式便寫成:

Dim getDate as date

If cells(activecell.row,"A") > Date Then
getDate = Date
End If
白話=> 若選取的列其日期處A欄為未來日時,則getDate將取其目前當日為其參數值
目的=> 避免要抓數據時抓不到任何值.浪費一堆效率

本來一直來程序也都執行好好的.

然後昨日發生怪現像
問題出在這一行
If cells(activecell.row,"A") > Date Then
........
的 > 這裡
情境假設目前今日為2022/9/6(二)
然後我選取了2022/9/10 這一天 (未來日)
按理,由於9/10日 > 9/6日..故會進入 if 的判斷式裡去執行更改條件
使getDate由9/10 ,強制改成9/6

但昨日卻莫名其妙直接跳過這條件,而執行後續的運作..
=>getDate=2022/9/10
想當然問題就出現一堆抓不到值的中斷訊息...

然後我就給其改成
If cells(activecell.row,"A") < Date Then
同樣的選定作用列在未來日的情況下,它又變成可以正常進入 if 的內部陳述式了
.....
= =

想說隨便你的怪邏輯,能正常就好.只是心中一堆迷惑..什情形來地?????

結果今天下午我在執行時又是一樣的在 < 的情況下,又變成不能進入到條件式裡了
於是我只好再將其改回>..然後又順利可判斷選取列的日期究竟有無 > 今日
恩..OS:正常就好

結果晚上出個門把電腦關了,剛重開再執行的當下,它又發神經的又來了..
變成我得把它設定成 < 才又可正常

所以我想請問,這是什麼情況?
或兩個日期間的比對,要怎麼比對?我怎麼被試算表的怪邏輯搞的有夠迷糊的迷糊...
謝謝..

'---------------------------
夜晚測試補充記戴@2022/9/7
1、選取作用儲存格於2022/9/1 過去日
執行至
if getdate >date then
getdate =date
end if
msgbox getdate
顯示2022/9/7 (錯誤的結果)

2、移動作用儲存格於未來日如:2022/9/20
執行至
if getdate >date then
getdate =date
end if
msgbox getdate
顯示2022/9/7 (我要的結果)

小結:恩,在>的比較情況下,雙方都會進入if內的陳述式

3、將程序改為
if getdate < date then
getdate =date
end if
msgbox getdate

選取作用列於2022/9/1日處
無法進入if的內部陳述式
顯示2022/9/1 (我要的結果)

4、 選取作用列於2022/9/20日(未來)處
無法進入if的內部陳述式
顯示2022/9/20 (錯誤的結果)

小結:隱約發現兩日的日期似不能用 > 或 < 來做比對
所以一直以來都用了錯誤的語法???
那究竟兩日間誰大誰小要如何撰寫呢?謝謝
============
OK我已解決了..
不太清楚原因,可能欄位的日期不同還是其它...
解決方法我是暫採用
Dim getDate as date
getdate = cells(avtviecell.row,"A")
getdate=cdate(getdate)

'下方照原程序來跑
If cells(activecell.row,"A") > Date Then
getDate = Date
End If
然後問題就解決了
文章關鍵字
MaverickRay wrote:
恩,不知怎麼描述好,(恕刪)

可能問題在於"型態",
cells(activecell.row,"A") > Date
cells(activecell.row,"A") 抓出來的值有可能是字串,
Date 你有宣告為 Date ?
兩個不同型態比較就會出錯,
你之後改的有強制轉換為Date格式
Dim getDate as date
getdate = cells(avtviecell.row,"A")
getdate=cdate(getdate)

但這邊還是用原本的語法,之後可能會再出錯
If cells(activecell.row,"A") > Date Then
getDate = Date
End If

上面有將getdate = cells(avtviecell.row,"A")
可以用兩個同型態去比較
If getdate > Date Then
getDate = Date
End If

這樣我認為比較恰當




非專業的
個人推測
MaverickRay
哈,對吼但這邊還是用原本的語法,之後可能會再出錯If cells(activecell.row,"A") > Date ThengetDate = DateEnd If我是在犯傻還是其實有改
MaverickRay
我命令B先生,從今起你去勢變成A小姐,然後我卻繼續用B先生的型態去跟一堆小姐做比對..哈哈...是我複製貼上還是腦筋打結了..看一下先
小小尉 wrote:
但這邊還是用原本的語法,之後可能會再出錯
If cells(activecell.row,"A") > Date Then
getDate = Date
End If

上面有將getdate = cells(avtviecell.row,"A")
可以用兩個同型態去比較
If getdate > Date Then
getDate = Date
End If
'----------------------
沒錯,哈,是我在回自己文時懶得再打程序碼,又加上時間太晚了,就直接複製01裡的上文程序後就貼上了
剛查了一下自己的程序碼,跟您回覆的內文是一樣的
If ExternalConnection > Date Then
'(下列的ExternalConnection並未使用cells(activecell.row,1)
ExternalConnection = Date
End If
recDate = ExternalConnection
'也就是我再複製貼上時輕忽了...哈謝謝提醒邏輯問題.感謝^^
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!