多个本地化的日期格式相同

Pet*_*erT 7 excel vba excel-vba

目前我面临的问题让我很烦恼.我希望有人可以帮助我.我在大公司工作,使用Office 2007(32位)和Office 2010(64位).编写宏以通过整个公司进行兼容对我来说是一项艰巨的任务(我以前从未在VBA中编程 - 实际上这个论坛对我帮助很大).我的任务是在共享的Excel工作表中维护一个大表.有几个宏和几个用户表单.现在我将简要地解决问题:工作表包含两列日期格式(开始日期和结束日期).这两个值都导入到列形式userform的文本框中(commandbutton lunches MsCal -exported to class-将日期填充到那些文本框中).我只需要在两列中都将日期格式设置为mm/dd/yyyy,以便执行过滤和其他操作.当使用与英语不同的本地化的工人更新此值时,美国日期输入为dd.mm.yyyy.这是根据不可能的日期进行适当的过滤.我试图通过以下方式改变格式:

UserForm1.TextBox10.Value = Format(Calendar1.Value, "mm/dd/yyyy")
Run Code Online (Sandbox Code Playgroud)

但是这段代码在某种程度上行为不端.在某些机器上它可以工作,其中一些机器不起作用.这就是令我头疼的事情.我现在该怎么办?有没有办法强制excel在工作表中使用相同的日期格式并忽略Windows中的本地化设置?员工不希望将本地化更改为英语美国,因为他们要么习惯于他们的格式,要么将其用于其他应用程序.有没有办法在此表单打开时暂时更改本地化?任何建议都会被贬低.先谢谢彼得

CaB*_*ach 1

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

在 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
Run Code Online (Sandbox Code Playgroud)

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

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

UserForm1.TextBox10.Value = Cstr(Calendar1.Value) 
Run Code Online (Sandbox Code Playgroud)

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