VBA不会将文本格式的所有date更改为date格式dd / mm / yyyy

我现在有一个问题很长一段时间..我一直在试图找出date之间的差异,并在几分钟内打印结果。 但是,我的问题是,即使我已经添加了一行代码将单元格格式转换为date格式dd / mm / yyyy,它不适用于单元格,但只适用于其中的一部分。 另外,对于某些应用,它会创builddate格式mm / dd / yyyy。 我真的不知道该怎么做。 这些date是从另一张表中查找。 所以,我甚至写了一行代码将它们转换成原始的表格。 所以,总而言之,我可以做两个转换。 我的代码在下面给出! 请帮帮我 :)

Sheets("TMS").Select lastrow = Range("B" & Rows.Count).End(xlUp).Row With Range("K2:K" & lastrow) If Not IsEmpty(Range("K2:K" & lastrow)) Then .NumberFormat = "mm/dd/yyyy hh:mm" End If End With Sheets("TheTracker").Select lastrow = Range("B" & Rows.Count).End(xlUp).Row With Range("AO2:AO" & lastrow) .Formula = "=VLOOKUP(B2,TMS!B:K,10,FALSE)" .NumberFormat = "mm/dd/yyyy hh:mm" .Value = .Value End With 

尝试更好地引用范围,而不使用Select ,引用您需要的工作表,并忽略hh:mm 。 像这样的东西可能工作:

 Public Sub Test() Dim lastRow As Long With Worksheets("TMS") lastRow = .Range("B" & .rows.Count).End(xlUp).Row .Range("K2:K" & lastRow).NumberFormat = "mm/dd/yyyy" End With With Worksheets("TheTracker") lastRow = .Range("B" & .rows.Count).End(xlUp).Row With .Range("AO2:AO" & lastRow) .Formula = "=VLOOKUP(B2,TMS!B:K,10,FALSE)" .NumberFormat = "mm/dd/yyyy" .value = .value End With End With End Sub 

如果一个date格式只适用于几个单元格,它看起来像是您的计算机的区域设置和date格式的不相交。

如果你的电脑设置为DMY显示date,那么date如

  • 1/1/2017将是一个真正的date – 1月1日
  • 12/7/2017将是一个真正的date – 7月12日
  • 13/7/2017将是一个真正的date – 7月13日

  • 7/13/2017不会是一个date,因为date和月份的顺序是错误的。

具有地区设置的计算机也可以显示date为MDY,在美国很受欢迎。

  • 1/1/2017将是一个真正的date – 1月1日
  • 12/7/2017将是一个真正的date – 12月7日
  • 13/7/2017不会是真正的约会 – 因为没有13个月。

那么,请检查源数据显示的格式:DMY或MDY?

然后根据您电脑的区域设置,调整您的VBA例程以获取月份和date。

如果你有文本的date和Excel不会看作为一个date,你可以尝试这样的事情。

 Columns("K:K").Select Selection.TextToColumns Destination:=Range("K1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 4), TrailingMinusNumbers:=True ActiveSheet.Range("K2").Select 

我会猜测,数据来自你OPEN的CSV文件。

如果是这样的话,你最好做一个IMPORT (通常在DATAfunction区)。

当您这样做时, Text Import Wizard将打开,您将能够指定传入数据的date格式。

然后,Excel会将所有这些date转换为实际date,并且您将能够应用数字格式。 如果需要的话,这个IMPORT过程可以通过VBA自动完成。