台灣最大程式設計社群網站
線上人數
802
 
會員總數:245217
討論主題:189089
歡迎您免費加入會員
討論區列表 >> office VBA / WinOS >> 請問為什麼日期測試到最後會變成上午12:00?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問為什麼日期測試到最後會變成上午12:00?
價值 : 50 QP  點閱數:159 回應數:4

樓主

小粽子
門外漢
0 5
139 10
發送站內信

各位大神好:我寫了一個程式,想要測試輸入的日期是否為下列的九個假日其中之一(程式如下),我發現測試到一半時,不知道為什麼subOk()裡的myTest值會自動變成上午12:00,以至於本程式只有2019/9/13測試結果是正常的,請問小弟錯在那裡了?@@
Function dateHolidayTest(testDay As Date)

Dim dateHoliday() As Variant

Dim tempFirst As Boolean


dateHoliday = Array(Format(#9/13/2019#, dddddd), _
Format(#10/10/2019#, dddddd), _
Format(#10/11/2019#, dddddd), _
Format(#1/1/2020#, dddddd), _
Format(#2/28/2020#, dddddd), _
Format(#4/2/2020#, dddddd), _
Format(#4/3/2020#, dddddd), _
Format(#6/25/2020#, dddddd), _
Format(#6/26/2020#, dddddd))


For i = 0 To UBound(dateHoliday)

If testDay = dateHoliday(i) Then

tempFirst = True

Exit For

Else

testDay = False

End If


Next i

dateHolidayTest = tempFirst

End Function

Sub okTest()
Dim myTest As Date
Dim myResult As Boolean

myTest = Format(#2/28/2020#, dddddd)

myResult = dateHolidayTest(myTest)

MsgBox (myResult)
End Sub




搜尋相關Tags的文章: [ 日期 ] ,
本篇文章發表於2019-08-07 20:29
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

P陳
檢舉此回應
2019/09/13 00:00:00 就是 2019/09/13 上午12:00 沒錯
存在資料表內的話不用理他,輸出的較重要

或改系統的 時間格式也可
將 TT hh:mm:ss 改成 HH:mm:ss (將上下午改成24小時制)


本篇文章回覆於2019-08-07 20:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

小粽子
檢舉此回應
不好意思,應該是我沒表達清楚,我的意思是說,我的程式在測試時發現我的myTest傳到Function dateHolidayTest之後在for迴圈中myTest這個參數就會自動變成上午12:00而日期卻不見了,以至於本程式測試的結果為False,但是我要的答案是True,因為2020/2/28是dateHoliday這個Array中的其中一個元素,我不了解的地方是「myTest在for迴圈中應該一直是2020/2/28為什麼會被自動變成上午12:00以致於怎麼比對都變成False?」
本篇文章回覆於2019-08-08 05:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

小粽子
檢舉此回應
找到原因了,因為testDay傳入後會成為2/28/2020,可是dateHoliday是"2/28/2020",所以,我在程式中加入newTestDay = Format(testDay, "dd/mm/yyyy")再把格式轉回來,這樣就正常了,感謝您的回覆,謝謝!(對了,Else之後的判斷式本來也打錯了)
Public Function dateHolidayTest(testDay As Date) As Boolean


Dim dateHoliday() As Variant

Dim tempFirst As Boolean

Dim newTestDay As Date

dateHoliday = Array(Format(#9/13/2019#, "dd/mm/yyyy"), _
Format(#10/10/2019#, "dd/mm/yyyy"), _
Format(#10/11/2019#, "dd/mm/yyyy"), _
Format(#1/1/2020#, "dd/mm/yyyy"), _
Format(#2/28/2020#, "dd/mm/yyyy"), _
Format(#4/2/2020#, "dd/mm/yyyy"), _
Format(#4/3/2020#, "dd/mm/yyyy"), _
Format(#6/25/2020#, "dd/mm/yyyy"), _
Format(#6/26/2020#, "dd/mm/yyyy"))




newTestDay = Format(testDay, "dd/mm/yyyy")

For i = 0 To UBound(dateHoliday)

If newTestDay = dateHoliday(i) Then

tempFirst = True

Exit For

Else

tempFirst = False

End If



Next i

dateHolidayTest = tempFirst

End Function

Sub okTest()
Dim myTest As Date
Dim myResult As Boolean

myTest = Format(#2/28/2020#, "dd/mm/yyyy")

myResult = dateHolidayTest(myTest)

MsgBox (myResult)
End Sub
本篇文章回覆於2019-08-08 05:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

小粽子
檢舉此回應
newTestDay = Format(testDay, "dd/mm/yyyy") 應該是多餘的,只要把tempFirst = False 這個錯誤改回來就可以了!
本篇文章回覆於2019-08-08 06:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.