将日期转换为数字格式vba

时间:2016-12-20 02:11:02

标签: vba excel-vba date format excel

我在使用vba时将日期从一个文件复制到另一个文件并保留格式(dd / mm / yyyy)时遇到问题。 直接复制会导致可以转换为美国日期格式的日期更改为mm / dd / yyyy,而不能更改为(dd> 12的任何日期)更改为字符串的日期。 我已尝试先将日期更改为数字,然后复制/粘贴(计划在复制完成后返回日期格式)但这只会更改日期格式为dd< = 12,日期为dd> 12仍然以字符串格式出现。此外,成功更改为数字的日期似乎会更改为美国格式,然后更改为数字格式,因此无论如何我最终都会输入错误的日期 奇怪的是手动完成这些步骤(在vba之外)工作正常,我可以将所有日期变成我想要的任何格式,并且美国格式永远不会出现。 这是我一直在使用的代码:

Sheets("Import").Select
PathName = Range("B2").Value
Filename = Range("B3").Value
TabName = Range("B4").Value
ControlFile = ActiveWorkbook.Name
Workbooks.Open Filename:=PathName & Filename
ActiveSheet.Name = TabName
Columns("A:A").Select
Selection.NumberFormat = "0"
Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206")

任何有关尝试的帮助或建议都会很棒。 凸轮

2 个答案:

答案 0 :(得分:1)

我会尝试其中一种。我对你想要的格式感到困惑。

Workbooks.Open Filename:=PathName & Filename
ActiveSheet.Name = TabName
Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206")

'Workbooks(ControlFile).Sheets("Import").Columns("A:A").NumberFormat = "dd/mm/yy;@" 

我相信其中一个会起作用

'Workbooks(ControlFile).Sheets("Import").Columns("A:A").NumberFormat = "mm/dd/yy;@" 

如果所有其他方法都失败了,请在您的代码之后运行此代码并将其设置为您的搜索格式。

Sub Change_Date()
Dim oCell As Range
Dim LastRow As Long

LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

For Each oCell In ActiveSheet.Range("A1:A" & LastRow)
    oCell.Value = Format(Trim(oCell.Value), "dd/mm/yyyy")
Next oCell


End Sub

答案 1 :(得分:0)

在日本生活并且不得不处理奇怪的日期转换我已经学会了以你想要的方式保持格式化的唯一真正安全的方法是使用NumberFormatLocal以你需要的方式设置单元格。无论您如何在单元格中格式化VBA中的日期,Excel似乎都会接管本地设置所设置的内容。

以下代码是我在您的情况下使用的代码,以保证您想要的格式。

   Sheets("Import").Select
   PathName = Range("B2").Value
   Filename = Range("B3").Value
   TabName = Range("B4").Value
   ControlFile = ActiveWorkbook.Name
   Workbooks.Open Filename:=PathName & Filename
   ActiveSheet.Name = TabName
   Columns("A:A").Select
   Selection.NumberFormat = "0"
   Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206")

   Workbooks(ControlFile).Sheets("Import").Range("A8:A206").NumberFormatLocal = "d/m/yyyy"

你也可以在约会1/12/2016

上使用这样的内容
Range("A8:A206").NumberFormatLocal = "dd/mmm/yyyy"

为您输出

12/Jan/2016代替Jan/12/2016