在使宏公式起作用时遇到问题

时间:2019-01-27 01:22:23

标签: vba

尝试重新格式化表格范围内格式不正确的日期,以便我可以按日期排序。我遇到运行时错误'13',键入不匹配,代码行为“ Range(“ B”&y).value“。

我知道该公式有效,因为我已经在实际表中尝试过该公式,并且该表中还有另一个类似且有效的公式。我已经尝试过在实际表中使用此公式的几个版本,但是当我将其作为宏运行时,仍然会遇到运行时错误,键入不匹配

'Purchase Date Formula
 Dim y As Integer
 Dim LastRowUsed As Integer

 LastRowUsed = Worksheets("AFOR").Cells(Rows.Count, "A").End(xlUp).Row
 For y = 2 To LastRowUsed

 Range("B" & y).Value = " =MID([@[purchase-date]],6,2)&" / "&MID([@[purchase-date]],9,2)&" / "&LEFT([@[purchase-date]],4)"

 Next y

PurchaseDate
01/24/2019

购买日期

2019-01-24T13:32:18 + 00:00

试图从底部(购买日期)的数据中获得最高结果(PurchaseDate)。

2 个答案:

答案 0 :(得分:0)

我不喜欢像 [@ [购买日期]] 这样的地址,但是在我的试用中,它在2015年产生了一个错误。因此,我更喜欢一种更常规的方法,您可以简单地阅读日期并将其写入所需的单元格中。为了达到良好的效果,我添加了一行代码以可能需要的方式对其进行格式化。请尝试。

Private Sub DateFromText()

    Dim R As Long
    Dim LastUsedRow As Long
    Dim Tmp As Variant

    With Worksheets("AFOR")
        LastUsedRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        For R = 2 To LastUsedRow
            Tmp = Left(.Cells(R, "C").Value, 10)
            If IsDate(Tmp) Then
                With .Cells(R, "B")
                    .Value = CDate(Tmp)
                    .NumberFormat = "mm/dd/yyyy"
                End With
            End If
        Next R
    End With
End Sub

答案 1 :(得分:0)

看到您发现的注释,但是如果其他人遇到这种问题,则会增加三个问题:

1-范围对象中的值可以用公式属性替换

2-应该避免公式的初始空格

3-在vba定义的公式中使用引号

'Purchase Date Formula
 Dim y As Integer
 Dim LastRowUsed As Integer

 LastRowUsed = Worksheets("AFOR").Cells(Rows.Count, "A").End(xlUp).Row

 For y = 2 To LastRowUsed

    Range("B" & y).Formula = "=MID([@[purchase-date]],6,2)&"" / ""&MID([@[purchase-date]],9,2)&"" / ""&LEFT([@[purchase-date]],4)"

 Next y

如果有帮助,请标记此答案。