日期自动修改为其他内容
Posted
技术标签:
【中文标题】日期自动修改为其他内容【英文标题】:Date automatically modified to something else 【发布时间】:2019-09-10 14:10:34 【问题描述】:日期从 2019 年 9 月 11 日更改为 2019 年 9 月 25 日,没有明显原因
目前正在使用 Excel 2010,我尝试将单元格和范围格式设置为短日期 (dd/mm/yyyy) 甚至数字格式。
While Not (workingDay(Date + compteur, ws_non_ouvres))
compteur = compteur + 1
Wend
Set ws_cc_working = wb_centre_de_charges.Worksheets("J+1")
ws_cc_working.Activate
Range("C3").Select
If (WeekdayName(Weekday(Date + compteur, vbMonday)) Like "samedi") Then
compteur = compteur + 2
End If
ws_cc_working.Cells(3, 3).Value = Format((Date + compteur), "dd\/mm\/yyyy\")
compteur = compteur + 1
这是代码。首先,我们做一个循环来验证当前日期是工作日。然后,我设置工作表,然后选择 Range C3,其中应写入日期。 然后,我们验证日期不是星期六,如果为真则跳过两天(因此变为星期一)。
最后,我们将单元格“C3”(3,3) 的值设置为今天的日期加上计数器。
希望对你有帮助,抱歉我的英语不好
我不明白为什么 excel 将日期从 11/09 修改为 25/09。结果应该是 11/09,我没有做任何与该值相关的事情。
感谢您的回答和帮助。
【问题讨论】:
使用 F8 逐步调试代码,在循环中查看发生了什么变化。 可能不是问题,但使用数字工作日而不是特定语言的WeekdayName
会使代码更便携/更健壮。
使用调试模式和一些光荣的 Debug.Print 我可以假设代码中的值没有被修改。但是,当子结束时它会改变
ws_cc_working.Cells(3, 3).Value = Format((Date + compteur), "dd\/mm\/yyyy\")
这一行修改了C3
。如果compteur
等于14,那么今天+14 = 25/09/2019
问题是,日期设置正确。它去 10/09, 11/09, 12/09 ...由于某种原因我无法解释,当我选择最后一张纸时,它去 10/09, 25/09, 12/09 ?
【参考方案1】:
避免使用Date
值进行数学运算,而是更喜欢使用专门的DateTime
函数。如果compteur
是offsetDays
,那么compteur
所代表的含义就不会那么模糊。
当前日期不会在对 VBA.DateTime.Date
属性的调用之间发生变化 - 不妨只调用一次,并使用有意义的本地标识符保持其值。
Dim currentDate As Date
currentDate = VBA.DateTime.Date
While...Wend
也是一个古老的构造 - 最好将其替换为 Do While...Loop
。
Do While Not workingDay(DateAdd("d", offsetDays, currentDate))
offsetDays = offsetDays + 1
Loop
避免在具有不同区域设置的计算机上执行会中断的代码:
If (WeekdayName(Weekday(Date + compteur, vbMonday)) Like "samedi") Then compteur = compteur + 2 End If
考虑改用内置常量 - 请注意,如果您计算从vbSunday
开始的星期的工作日,那么该函数将为“samedi”返回vbSaturday
(7),并且区域设置 -那个工作日的敏感字符串表示不再重要:
If (Weekday(Date + compteur, vbSunday) = vbSaturday) Then
offsetDays = offsetDays + 2
End If
然后我们进入单元格编写部分:
ws_cc_working.Cells(3, 3).Value = Format((Date + compteur), "dd\/mm\/yyyy\") compteur = compteur + 1
您正在将格式化的 String
写入单元格:如果 Excel 需要将日期理解为 Date
,那就是在玩火。相反,编写您想要的实际 Date
值,并使用 Range.NumberFormat
使其字符串表示符合您的喜好:
ws_cc_working.Cells(3, 3).Value = DateAdd("d", offsetDays, currentDate)
ws_cc_working.Cells(3, 3).NumberFormat = "dd/mm/yyyy"
offsetDays = offsetDays + 1
将日期视为字符串会使 Excel 试图对单元格中写入的内容保持智能,有时它会出错。将日期视为日期应该“正常工作”。
注意:
然后,我设置工作表,然后选择 Range C3,其中应写入日期
你不需要Select
在单元格中写任何东西。如果在宏完成时不需要选择/激活单元格,请考虑删除 Worksheet.Activate
和 Range.Select
调用并保留用户当前的选择。
【讨论】:
非常感谢,因为我正在自己学习 vba,我可能有“不好的 vba 礼仪”,我会用它来更改我的代码,我会看看它是否有帮助,再次感谢.以上是关于日期自动修改为其他内容的主要内容,如果未能解决你的问题,请参考以下文章
我可以将 iOS 图形 API 设置为专门针对 iPhone 6s 的“OpenGLES2”,而将其他所有内容设置为自动吗?