我在使用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")
任何有关尝试的帮助或建议都会很棒。 凸轮
答案 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