gpt4 book ai didi

vba - 多个本地化版本中的日期格式相同

转载 作者:行者123 更新时间:2023-12-02 02:32:34 25 4
gpt4 key购买 nike

目前我面临着一个让我很困扰的问题。我希望有人能帮助我。我在大公司工作,同时使用 Office 2007(32 位)和 Office 2010(64 位)。编写与整个公司兼容的宏对我来说是一项艰巨的任务(我以前从未使用 VBA 编程 - 实际上这个论坛对我帮助很大)。我的任务是在共享 Excel 工作表中维护一张大表。有几个宏和几个用户窗体。现在我简单描述一下这个问题:工作表包含两列日期格式(开始日期和结束日期)。这两个值都导入到列形式用户表单的文本框中(命令按钮午餐 MsCal - 导出到类 - 用日期填充这些文本框)。我只需要在两列中将日期格式设置为 mm/dd/yyyy,以便执行过滤和其他操作。当使用与美国英语不同的本地化的工作人员更新此值时,美国日期输入为 dd.mm.yyyy。这使得基于日期的正确过滤变得不可能。我尝试通过以下方式更改格式:

UserForm1.TextBox10.Value = Format(Calendar1.Value, "mm/dd/yyyy")

但是这段代码的行为不正常。在某些机器上它可以工作,在某些机器上它不能工作。这就是让我头疼的原因。我现在应该如何进行?有没有办法强制 Excel 在工作表中使用相同的日期格式并忽略 Windows 中的本地化设置?员工不想将本地化更改为美国英语,因为他们要么习惯了这种格式,要么需要它用于其他应用程序。有没有办法仅在打开此表时临时更改本地化?任何建议将不胜感激。提前致谢彼得

最佳答案

您能做的最好的事情就是永远不要将日期变量转换为文本。

在 Excel 内部,日期只是一个连续的数字(小数分隔符左边是天,小数分隔符右边是小时)。例如,2012 年 6 月 10 日,对于 Excel 来说是 41188。该日期值与您计算机上设置的日期格式无关。

现在,当涉及到表示日期(供人类可视化)时,Excel 会将此内部值格式化为具有计算机中设置的格式的字符串。因此,例如,如果您的计算机中有美国日期格式,则日期 41188 将被格式化为 6/10/2012。

日期方面的一大挑战是以正确的格式输入日期。当您输入日期作为字符串(“6/10/2012”)时,Excel 将根据您计算机上设置的日期格式对其进行解释。如果您采用美国格式,则它将第一个密码视为月份,第二个密码视为日期,最后一个密码视为年份。如果您有德语格式,它将把第一个读取为日,下一个读取为月份,最后一个读取为年份。因此,相同的输入(“6/10/2012”)对于美国格式的 Excel 将显示为 6 月 10 日,而对于德国格式的 Excel 将显示为 10 月 6 日。

就您而言,您不应该格式化 Textbox10 内的日期。对于美国格式的 Excel 来说没有问题,但如果您有其他日期格式,其中第一个密码是日而不是月份,您将得到错误的值:检查这个例子。用户以德语格式 Excel 输入 6 月 10 日 (dd.mm.yyyy)

  1. Calendar1.Value 检索日期值 (41188)
  2. Format(Calendar1.Value, "mm/dd/yyyy") 将日期值转换为字符串“06/10/2012”
  3. 使用格式化日期 (STRING) 时,Excel 必须解释它是什么日期。由于计算机日期格式是德语,因此将显示日:06、月:10、年:2012。您将使用41070日而不是41188

如果 Calendar1.Value 检索日期变量,并且将此日期变量赋予日期格式的列,则您将始终在列中获得正确的日期,并且能够对日期进行过滤和排序无论列单元格内设置的日期格式或用户计算机中设置的格式如何,都正确。

<小时/>

现在,就您的情况而言,最好的方法是直接将 Calendar1.Value 分配给所需的单元格。像这样的东西:

ThisworkBook.WorkSheets("Sheet1").Range("C3").Value= Calendar1.Value

您仍然可以将 Calendar1.Value 分配到 TextBox10 中,以便用户查看他的选择,但禁用 TextBox10,以便唯一的编辑选项是日历控件。在处理日期时,不要从 TextBox10 中获取它,而是直接从 Calendar1.Value 中获取。

如果您仍需要将 Calendar1 中的选定值显示到文本框中,则请勿格式化文本框中的日期。相反,使用:

UserForm1.TextBox10.Value = Cstr(Calendar1.Value) 

这样,用户将看到他在计算机中设置并习惯的日期格式的日期。

关于vba - 多个本地化版本中的日期格式相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12858242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com