我有一段代码,可以打开最近的电子表格,复制数据,并将其粘贴到主文件中。两个文件中的E列都有日期,总是英国格式。
但是,当将数据从最近的电子表格粘贴到主电子表格时,日期会转换为US格式,例如02/10/2022是2022年10月2日,单元格值为44836,但它被粘贴为10/02/2022,粘贴为10 FEB 2022单元格值44602。这是整个专栏都受到影响。
我见过其他用户在这方面挣扎,并尝试将格式设置为文本,将格式设置为日期,添加新列等,但没有任何解决方案。
我认为问题就在这一步:
Workbooks.Open Filename:=MyDir & myMostRecentFile
Range("A1").AutoFilter Field:=3, Criteria1:="PRD"
Range("A2", Range("A2").End(xlToRight).End(xlDown)).Copy
wb.Sheets("D").Range("A70").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=False
字符串
我尝试了一些方法(没有成功):
Columns("E").Copy
Columns("E").PasteSpecial Paste:=xlPasteValues
Columns("E").NumberFormat = "@"
Range("E1", Range("E" & Rows.Count).End(xlUp)).NumberFormat = "dd/mm/yyyy"
型
如果需要,请输入完整代码:
Sub D_ImportAutoReport()
Dim myFile As String, myRecentFile As String, myMostRecentFile As String
Dim recentDate As Date
Dim MyDir As String
Dim fileExtension As String
Dim fileFilter As String
Dim wb As Workbook
Dim wbImp As Workbook
Application.ScreenUpdating = False
Set wb = ThisWorkbook
wb.Sheets("D").Range("A70:Q337").ClearContents
MyDir = "Q:\TEST\Scheduled Reports\"
fileExtension = "*.csv*"
fileFilter = "PRD*"
myFile = Dir(MyDir & fileFilter & fileExtension)
If myFile <> "" Then
myRecentFile = myFile
recentDate = FileDateTime(MyDir & myFile)
Do While myFile <> ""
If FileDateTime(MyDir & myFile) > recentDate Then
myRecentFile = myFile
recentDate = FileDateTime(MyDir & myFile)
End If
myFile = Dir
Loop
End If
myMostRecentFile = myRecentFile
Workbooks.Open Filename:=MyDir & myMostRecentFile
Range("A1").AutoFilter Field:=3, Criteria1:="PRD"
Range("A2", Range("A2").End(xlToRight).End(xlDown)).Copy
wb.Sheets("D").Range("A70").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=False
Application.ScreenUpdating = True
End Sub
型
2条答案
按热度按时间k5hmc34c1#
如果粘贴的数据看起来像我上面假设的那样(并且你没有确认/不确定...),你可以根据需要使用下一个函数来转换它:
字符串
你可以用下一种方式使用它:
型
46scxncf2#
我也有同样的问题。感谢FaneDuru的回答。然而,我发现我需要做以下代码调整(我不能提供这作为评论,因为我没有足够的声誉)。我并不是说这是一个不同的答案。这可能是我的调整是不优雅的,可以做得更好,因为我是相当新的VBA,但代码现在适用于我的情况下,我粘贴数据从浏览器显示的表(与英国格式的日期),并发现Excel是治疗日期作为FaneDuru inidicated以上。也就是说,当day值>12时,日期被粘贴为文本不变,但当day值<=12时,文本被转换为日期格式,假设源文本是美国格式的日期(无论Windows本地化设置如何)。
我改变了函数中的第二个DateSerial()调用(即其他情况下,单元格内容被检测为不是数字是在一般文本格式),因为在呼叫中使用的顺序在答案是(我认为)为美国格式的日期。OP指定他们的源日期(文本)都是英国格式(我的情况也是如此)。
字符串
我还更改了子例程中的“With sh.Cells(2,col).Offset(,0).Resize(UBound(arrD),1)”行,以便Offset为(,0)而不是(,1),因为我发现在原始代码中,更正后的值被粘贴到下一列(这可能是故意的)。此调整是为了使最终输出仅在原位校正日期。
型