【问题标题】:Convert date to number format vba将日期转换为数字格式vba
【发布时间】:2016-12-20 02:11:01
【问题描述】:

我在使用 vba 时将日期从一个文件复制到另一个文件并保留格式 (dd/mm/yyyy) 时遇到问题。 直接复制会导致可以转换为美国日期格式的日期更改为 mm/dd/yyyy,而那些不能(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")

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

【问题讨论】:

  • 我怀疑使用剪贴板可能是问题所在。需要保留格式吗?
  • 不,我可以处理粘贴后的格式,但该过程实际上会更改值(即在电子表格 1 中,日期值为 42501,复制后日期值为 42679...
  • 试试Workbooks(ControlFile).Sheets("Import").Range("A8:A206").Value = Range("A2:A200").Value
  • 好的,我刚刚发现了一些有趣的东西,当我在 vba 中打开电子表格时,相同的日期已经是字符串格式了。
  • 在没有看到数据的情况下,是否有可能是在复制公式?解决此问题的一种方法是使用Range.PasteSpecial xlPasteValues

标签: vba excel date format


【解决方案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

【讨论】:

    【解决方案2】:

    生活在日本并且不得不处理奇怪的日期转换我学到了唯一真正安全的方法来保持你想要的格式是使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多