2015-02-24 54 views
0

我有以下内容的单元格:天和月被颠倒

2015年1月2日

小区被格式化日期

然后我复制的价值,并把它放在我的模块中类:

 Set Line = New CTravelLine 
     Line.Date= Cells(1, 8).value 

一切工作正常,直到我把另一个单元格该值的时刻:

值01/02/2015变为02/01/2015。 我使用这种格式(dd/mm/yyyy)。我的印象是,当日子数值低于一个月时,这两个值是相反的。该值是反转无论我试过的方法:

方法1:

Dim WrdArray() As String, datetest As String 
    WrdArray() = Split(travelLine.Date, "/") 
    datetest= WrdArray(0) & "/" & WrdArray(1) & "/" & WrdArray(2) 
    Cells(5, 5) = datetest 

方法2:

Cells(5, 5) = travelLine.Date 

我不明白我怎么能解决这个问题。在此先感谢您的帮助。

+0

您的Windows区域设置设置为什么格式? – Ditto 2015-02-24 13:35:40

+0

首先,您似乎有一个与美国不同的区域设置(VBA的默认设置)。 正如您所注意到的,如果您的日期天数小于月份,则您的格式设置会相应地将其翻转。但是,您需要知道,它只是格式化单元格中显示的文本,而不是单元格的实际值。 因此,您的问题是区域设置格式与实际单元格值格式之间的冲突。为了规避这种情况,最好的办法是将单元格格式设置为文本而不是日期。 – 2015-02-24 14:06:02

+0

如果您的单元格包含真实日期值,并且travelLine类的Date属性是实际的日期类型,则不应该发生这种情况。如果上述任何一种都是文本,您将遇到此问题,并且在处理文本时应该使用CDate。 – Rory 2015-02-24 15:36:05

回答

2

这可能是由于'区域格式问题'造成的。

当从其他数据源导入日期时,Excel有强制使用美国日期格式(mm/dd/yyyy)的习惯。所以,如果您的日期恰好是1 - 12,那么Excel会将日期切换为mm/dd/yyyy。

当从文本文件导入日期时,VBA代码中有一个选项可应用区域格式来纠正此问题。从“日期”格式类别“文本” excelsheet日期列的

OR

更改数字格式;保存。 (保存后运行VBA代码,如果有的话,现在检查日期格式是'文本'还是变回'日期')

如果它已经改回'日期',尝试修复它为'text'

如果是'text';纠正错误的日期单元格并保存excel表单。这将使日期不会自动更改为美国格式。

+0

强制VBA识别特殊格式?当与Word日期字段相比时,我遇到了'CDate'的问题,该日期字段可以识别没有问题的格式,但是CDate'反向天和月。 – R3uK 2017-02-15 05:56:06

0

我和你有同样的问题。

让我解释什么,我想做的事:

1)我有一些日期csv文件。 2)我在变量表中复制一张我的表格的范围。该范围包含一些带日期的列。 3)我在我的桌子上做了一些操作(非常基本的) 4)我转置我的变量表(因为只有变量表的最后一个维度可以增加) 5)我把我的变量表放在一张新的表格上。

我发现: 执行步骤1)2)3)和4)后没有日期问题。日期问题在纸上书写时显示...

考虑到Avidan在15年2月24日13:36的帖子中说过,我想这是强制美国格式mm/dd/yyyy的excel ...所以我只是在开始时改变日期格式我的节目的:

在开始任何操作日期之前: 1)做 .Cells(“在我的日期是”)=格式(.Cells(“在我的日期是”),“年月日”) 2)执行你的程序 3)在一张纸上写表格 4)备份到你喜欢的纸张上直接输入日期格式

-1

只需使用:

Line.Date = cDate(Cells(1, 8).value2) 
+1

欢迎来到Stack Overflow!尽管这段代码可以解决这个问题,但[包括一个解释](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高您的帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性注释来挤占代码,这会降低代码和解释的可读性! – 2017-08-16 08:26:06