恩,不知怎麼描述好,我盡可能的長話短說..
原先正常皆可順利執行的情況為:
以往我在比對日期時,用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
這樣我認為比較恰當
非專業的
個人推測

但這邊還是用原本的語法,之後可能會再出錯
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
'也就是我再複製貼上時輕忽了...哈謝謝提醒邏輯問題.感謝^^