【发布时间】:2020-10-15 01:35:01
【问题描述】:
我正在用 VBA 编写代码,它可以循环访问日期并将一些数据添加到 Access 中的某些表中。我觉得我已经尝试了所有方法并浏览了网络,但它似乎仍然无法正常工作。我认为我的问题是日期的格式,因为我使用欧洲日期输入,而不是美国输入。我尝试格式化日期,如下面的代码所示。
Dim TODAY as string, TimeReg as string, UserReg as string, Init as string, _
SendFrom as string, SendTo as string, DateFrom as Date, DateTo as date, _
Comment as string
'Me.txtDateF.value Input f.ex. = 01-01-2020
'Me.txtDateT.value Input f.ex. = 16-01-2020
'Values'
TODAY = Me.txtDD.Value
TimeReg = Me.txtTime.value
UserReg = Left(Me.txtUser.value, 3)
Init = Me.cmbInit.value
If IsNull(Me.txtFrom.value) Then
SendFrom = ""
Else
SendFrom = Me.txtFra.value
End if
SendTo = Me.cmbTo.Column(1)
DateFrom = CDate(Format(Me.txtDateF.value, "dd-mm-yyyy"))
DateTo = CDate(Format(Me.txtDateT.value, "dd-mm-yyyy"))
Comment = Me.txtComment.value
'Define team on which it will use in SQL-Query
Select Case Me.txtTeam.value
Case "Team 1"
Team = "Team1"
TeamCom = "Team1Com"
Case "Team 2" etc...
End select
DoCmd.SetWarnings False
Do While DateFrom < DateTo
strSQL = "UPDATE [" & Team & "] SET [" & Init & "] = '" & SendTo & "' WHERE Date = #" & DateFrom "#"
DoCmd.RunSQL strSQL
ChangeSQL = "INSERT INTO tblChanges " _
& "(Date, Time, InitChange, TimeR, ShiftB, ShiftA, DateR, DateT, Comment)" _
& "VALUES (#" & TODAY & "#, #" & TimeReg & "#, '" & Init & "', '" & UserReg & "', '" & SendFrom & "', '" & SendTo & "', #" & DateFrom "# '" & Comment & "');"
DoCmd.RunSQL ChangeSQL
DateFrom = DateAdd("d", 1, DateFrom)
Loop
DoCmd.SetWarnings True
如果输入日期来自 f.ex。 2020 年 1 月 1 日至 2020 年 1 月 24 日,以下日期有所变化。
- 01-01-2020
- 13-01-2020
- 14-01-2020
- 15-01-2020
- 16-01-2020
- 17-01-2020
- 18-01-2020
- 19-01-2020
- 20-01-2020
- 21-01-2020
- 22-01-2020
- 23-01-2020
- 24-01-2020
- 01-02-2020
- 01-03-2020
缺少 01-01-2020 到 12-01-2020 之间的日期。在我看来,格式已关闭。
【问题讨论】:
-
日期只是幕后的数字。您无需格式化它们即可运行循环,仅用于演示。
txtDateF和txtDateT是真实日期还是字符串? -
此代码将遍历除最后一天之外的日期。如果要包含最后日期,请使用
DateFrom <= DateTo。如果循环运行正常,则问题出在您省略的 SQL 语句中。通常在处理日期时问题出在哪里。如果日期存储为字符串,您将需要创建一个自定义函数来处理 If 日期。 -
@KostasK。用户通过文本框上的日期选择器选择 txtDateF 和 txtDateT。输入作为日期存储在表中。
-
@TinMan 我也发布了 SQL 语句。你认为是作为字符串存储的吗?
-
这些是实际日期。顺便说一句,
Date和Time是关键字,最好将它们括在括号中[Date]和[Time]。
标签: vba date ms-access do-while