日期自动修改为其他内容

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 函数。如果compteuroffsetDays,那么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.ActivateRange.Select 调用并保留用户当前的选择。

【讨论】:

非常感谢,因为我正在自己学习 vba,我可能有“不好的 vba 礼仪”,我会用它来更改我的代码,我会看看它是否有帮助,再次感谢.

以上是关于日期自动修改为其他内容的主要内容,如果未能解决你的问题,请参考以下文章

将MySQL日期转换为PHP中的其他内容

如何关闭win10自动更新

我可以将 iOS 图形 API 设置为专门针对 iPhone 6s 的“OpenGLES2”,而将其他所有内容设置为自动吗?

如何动态修改日历高度?

为自动布局设置数字 UILabel 以正确计算内在内容大小

如何在EXCEL中填充背景色,输入内容后自动转成其他颜色