Excel VBA读取元数据时使用Cdate强制统一为DD/MM/YY英国日期格式
你可以在写入单元格前增加日期识别、转换逻辑即可实现需求,修改后的完整代码如下:
Sub 读取文件元数据() Dim sFile As Object, obja Dim oShell As Object, oDir As Object Dim iRow As Long, i As Integer '创建Shell对象与命名空间 Set oShell = CreateObject("Shell.Application") '请将FILEPATH替换为你实际的文件夹路径 Set oDir = oShell.Namespace("FILEPATH") ActiveSheet.Cells.ClearContents '遍历根目录下所有文件/文件夹 iRow = 1 For Each sFile In oDir.Items iRow = iRow + 1 '遍历0-5号属性 For i = 0 To 5 '读取文件属性值 obja = oDir.GetDetailsOf(sFile, i) If obja <> "" Then iRow = iRow + 1 '写入属性名到A列 ActiveSheet.Range("A" & iRow) = oDir.GetDetailsOf(oDir, i) '判断属性值是否为可识别的日期格式 If IsDate(obja) Then '转成标准日期类型后格式化为DD/MM/YY英国格式 ActiveSheet.Range("B" & iRow) = Format(CDate(obja), "dd/mm/yy") '设置单元格格式避免Excel自动篡改日期显示 ActiveSheet.Range("B" & iRow).NumberFormat = "dd/mm/yy" Else '非日期内容直接写入B列 ActiveSheet.Range("B" & iRow) = obja End If End If Next Next MsgBox "处理完成" End Sub
改动说明
- 新增
IsDate()逻辑校验属性值是否为日期,避免非日期内容调用CDate报错 - 先通过
CDate()将字符串格式的日期转为VBA标准日期类型,再用Format()强制输出为DD/MM/YY的英国日期格式 - 额外添加了单元格格式设置步骤,防止后续编辑时Excel自动将日期识别为美国格式
内容的提问来源于stack exchange,提问作者ScottJBK
相关产品推荐
相关产品推荐

