2017-04-12 98 views
1

早上全部,Excel VBA SQL Query訪問返回日期間的記錄

我希望這是一個快速的。我在Excel中有一個查詢請求兩個日期點之間的記錄。它返回沒有錯誤,但也返回意外的值,似乎是因爲日期已被換。我正在使用英國日期格式(日/月/年)。

我曾嘗試將日期作爲日期類型和字符串類型作爲日期值和文本進行傳遞。我也嘗試將它作爲yyyymmdd傳遞。

在以下示例中,sFromDate是2016年4月6日(4月6日),並且sToDate是12/04/16(4月12日)。六月至十二月之間的日期正在退回。

sSelectedArea = "ThisTMRacf" 
sFromDate = DateValue(Sht_SpecificView.Range("D5")) 
sToDate = DateValue(Sht_SpecificView.Range("F5")) 

Set rex = db.OpenRecordset("SELECT eGain.RecordDate FROM [eGain], [Staff] 
WHERE eGain.Racf = Staff.Racf AND (Staff.TeamManager = '" & sSelectedArea & "' 
OR Staff.CSM = '" & sSelectedArea & "') 
AND eGain.RecordDate BETWEEN #" & sFromDate & "# AND #" & sToDate & "# ;") 

是否有另一種方式來傳遞日期,以便它不轉換?

+0

順便說一句,舊式的連接是永遠漂亮,可以進一步咬你在底部上下行 – JohnHC

+0

欣賞反饋,約翰。你將如何重組它? – Snayff

+0

從[eGain]內部加入[Staff]上eGain.Racf = Staff.Racf WHERE ... – JohnHC

回答

2

格式化日期爲yyyy/MM/DD工作。下面的例子。

sFromDate = Format(Sht_Dashboard.Range("D5"), "yyyy/mm/dd") 
sToDate = Format(Sht_Dashboard.Range("F5"), "yyyy/mm/dd") 
1

可能要狠本,打破日期下來,重建......

sFromDateY = Year(DateValue(Sht_SpecificView.Range("D5"))) 
sFromDateM = Month(DateValue(Sht_SpecificView.Range("D5"))) 
sFromDateD = Day(DateValue(Sht_SpecificView.Range("D5"))) 

然後使用

AND eGain.RecordDate BETWEEN DateSerial(" & sFromDateY &", "& sFromDateM &", "&sFromDateD &") ... 
+0

如果它有效,我不介意一點無情!稍後嘗試並報告。 – Snayff

+0

謝謝你的建議,約翰。我設法使用了一種更簡單的方法。我已經發布了答案。 – Snayff

+0

@Snayff我想這消除了歧義(因爲美國)...... – JohnHC