Excel 导入存储为文本的日期时出现日期格式错误

Excel 导入存储为文本的日期时出现日期格式错误,excel,date-formatting,vba,Excel,Date Formatting,Vba,我有一个简单的宏(作为工作簿中其他宏的一部分),它将一个工作表中的一列内容复制到另一个工作表中。此列是一组以文本形式存储的日期。问题是,对于小于12号的所有日期,它都将当天作为月份,反之亦然 在这里和其他网站上有很多类似的主题,但没有一个真正起作用。我希望有一个简单的解决办法 我最新版本的宏 Sub DateMacro() Sheets("Output").Range("A2:A1048575").NumberFormat = "d/mm/yyyy h:mm:ss AM/PM" Sheets(

我有一个简单的宏(作为工作簿中其他宏的一部分),它将一个工作表中的一列内容复制到另一个工作表中。此列是一组以文本形式存储的日期。问题是,对于小于12号的所有日期,它都将当天作为月份,反之亦然

在这里和其他网站上有很多类似的主题,但没有一个真正起作用。我希望有一个简单的解决办法

我最新版本的宏

Sub DateMacro()

Sheets("Output").Range("A2:A1048575").NumberFormat = "d/mm/yyyy h:mm:ss AM/PM"
Sheets("Input").Range("A2:A1048575").NumberFormat = "d/mm/yyyy h:mm:ss AM/PM"
Sheets("Output").Range("A2:A1048575").Value = Sheets("Input").Range("A2:A1048575").Value

End Sub
我已经链接了一个示例工作簿

其他信息:
我无法控制从报表系统导出日期时的格式,因此我需要在报表工作簿中进行更改

更新:我和一位同事谈过,他说:

Sub test()

Dim i As Long
Dim RngEnd As Long

Dim rng As String
Dim test As String

RngEnd = Range("A1").End(xlDown).Row

For i = 2 To RngEnd

rng = "A" & i
test = Sheets("Input").Range(rng).Value

Sheets("Output").Range(rng) = DateValue(test) + TimeValue(test)


Next i
End Sub

这似乎工作正常,但有一个弹出窗口“错误13类型不匹配”。你能想到对这个的任何想法或修改吗?

你可以在每个单元格中循环,检查日期是否在1到12之间,然后使用
DateSerial
切换日期和月份。然后将其存储在数组中(以加快运行速度),最后使用
Application.Transpose
将整个数组转储到“输出”表中

代码注释中的更多解释

代码


您可以在每个单元格中循环,检查日期是否在1到12之间,然后使用
DateSerial
切换日期和月份。然后将其存储在数组中(以加快运行速度),最后使用
Application.Transpose
将整个数组转储到“输出”表中

代码注释中的更多解释

代码


我在我的案子里找到了一些有用的东西。只是在别人需要的情况下发布。我只需要在传输数据之前将输出范围格式化为文本,然后将其转换回我想要的日期格式

Sheets("Output").Range("A:A").NumberFormat = "@"
Sheets("Input").Range("A:A").NumberFormat = "d/mm/yyyy h:mm:ss AM/PM"
Sheets("Output").Range("A:A").Value = Sheets("Input").Range("A:A").Value
Sheets("Output").Range("A:A").NumberFormat = "d/mm/yyyy h:mm:ss AM/PM"

感谢大家的时间/投入

我发现了一些适合我的案例。只是在别人需要的情况下发布。我只需要在传输数据之前将输出范围格式化为文本,然后将其转换回我想要的日期格式

Sheets("Output").Range("A:A").NumberFormat = "@"
Sheets("Input").Range("A:A").NumberFormat = "d/mm/yyyy h:mm:ss AM/PM"
Sheets("Output").Range("A:A").Value = Sheets("Input").Range("A:A").Value
Sheets("Output").Range("A:A").NumberFormat = "d/mm/yyyy h:mm:ss AM/PM"

感谢大家的时间/输入

抱歉,但无法打开该文件:
抱歉,我们无法在Excel Online中打开您的工作簿,因为它超过了5 MB的文件大小限制。
您可以至少粘贴一个示例格式或屏幕截图吗?错误到底是什么?此外,您还可以简化
范围(“A2:A1048575”)
范围(“A:A”)
对不起,我用Excel文件更新了链接。我不知道为什么将其保存为.xlsm并包含上面的宏会将文件大小增加到11MB。您只需复制上述代码并运行即可。抱歉,但无法打开该文件:
抱歉,我们无法在Excel Online中打开您的工作簿,因为它超过了5 MB的文件大小限制。
您可以至少粘贴一个示例格式或屏幕截图吗?具体错误是什么?此外,您还可以简化
范围(“A2:A1048575”)
范围(“A:A”)
对不起,我用Excel文件更新了链接。我不知道为什么将其保存为.xlsm并包含上面的宏会将文件大小增加到11MB。您只需复制上述代码并运行即可。很抱歉,回复太晚。那没用。它粘贴了日期,但没有重新格式化日期。正如我在上面的评论中提到的,如果您想自己破解示例文档,我已经更新了示例文档的链接,因为单元格的格式是文本?编辑:无需担心,输入单元格的格式为自定义格式,输出格式为常规格式。很抱歉回复太晚。那没用。它粘贴了日期,但没有重新格式化日期。正如我在上面的评论中提到的,如果您想自己破解示例文档,我已经更新了示例文档的链接,因为单元格的格式是文本?编辑:不管怎样,输入单元格的格式为自定义格式,输出的格式为常规格式。