Excel 运行时错误13我的代码中的类型不匹配?

Excel 运行时错误13我的代码中的类型不匹配?,excel,vba,Excel,Vba,我在一列中有不同格式的日期。我正在尝试转换为格式11.01.2019。这些日期来自电子邮件正文,所以它们是字符串格式的。 这是我的代码,它只适用于少数人,但不适用于所有人。我试图为所有格式的日期添加条件要求 错误显示在以下行中: r.Value = CDate(r.Value) 在Excel中查看带有日期的值。如果它们自动向左对齐,Excel不考虑它们的日期,而是字符串。在下图中,A列和B列是字符串,C列是日期 当r.Value=CDate(r.Value)应用于字符串时,会出现类型不匹

我在一列中有不同格式的日期。我正在尝试转换为格式
11.01.2019
。这些日期来自电子邮件正文,所以它们是字符串格式的。 这是我的代码,它只适用于少数人,但不适用于所有人。我试图为所有格式的日期添加条件要求

错误显示在以下行中:

r.Value = CDate(r.Value) 

在Excel中查看带有日期的值。如果它们自动向左对齐,Excel不考虑它们的日期,而是字符串。在下图中,A列和B列是字符串,C列是日期

r.Value=CDate(r.Value)
应用于字符串时,会出现类型不匹配错误,因为VBA不知道如何将字符串转换为日期

为了确保该日期被格式化为日期,并且Excel知道如何处理该日期,您必须找到一种方法将
1-Mar-19
解析为日期。有几种方法可以做到这一点,这取决于你的感受。可能最简单的方法是将
-
替换为
/
,剩下的工作由VBA和Excel完成:

Sub TestMe()
    Dim r As Range        
    For Each r In ThisWorkbook.Worksheets(1).Range("A1:B9")
        r = Replace(r, "-", "/")
        r.NumberFormat = "dd.mm.yyyy"
    Next r
End Sub

旁注:假设标题包含在setdate范围内,OP中的错误可能已经出现在第一行中。如果是这样的话,它可以帮助调整范围并通过setdate.Offset(1)中每个r的
来启动循环。resize(setdate.Rows.Count-1,1)
@vityta这对我不起作用。符号已更改,但日期保持不变。@mak-是否更改日期而不是格式?@T.M.添加此行后,出现运行时错误1004。应用程序定义或对象定义错误。@T.M.-我只使用了一个工作簿,因此完全限定的引用对我来说就足够了:)不过,还是将
ThisWorkbook
添加到了引用中。
Sub TestMe()
    Dim r As Range        
    For Each r In ThisWorkbook.Worksheets(1).Range("A1:B9")
        r = Replace(r, "-", "/")
        r.NumberFormat = "dd.mm.yyyy"
    Next r
End Sub