录制的自动填充宏错误:公式中使用的值具有错误的数据类型

时间:2016-08-17 10:25:30

标签: excel vba

我有一个函数,它根据指定单元格的颜色给出一个值。

Function CheckColor1(range)
If range.Interior.Color = RGB(189, 215, 238) Then
    CheckColor1 = "R"
ElseIf range.Interior.Color = RGB(255, 230, 153) Then
    CheckColor1 = "C"
End If
End Function

在L1中我有= CheckColor1(a1)并且我填满所有行。它给了我相应的" R"和" C"对于每一行。

然后我在M1中使用旁边的= L1,再次填充,复制>粘贴值。我试过复制>直接在L列上粘贴值,但它不起作用。

我录了这个。这给了我:

range("L1").Select
ActiveCell.FormulaR1C1 = "=CheckColor1(RC[-11])"
range("L1").Select
Selection.AutoFill Destination:=range("L1:L102")
range("L1:L102").Select
range("M1").Select
ActiveCell.FormulaR1C1 = "=RC[-1]"
range("M1").Select
Selection.AutoFill Destination:=range("M1:M102")
range("M1:M102").Select

但是,当我运行宏时,我在L1中正确获得了第一个值,但是然后我的所有值都得到了#VALUE错误。其中说公式中使用的值是错误的数据类型。

列是"一般"格式。

1 个答案:

答案 0 :(得分:2)

避免使用.Select您可能希望看到How to avoid using Select in Excel VBA macros

所有代码只能用两行编写

range("L1:L102").Formula = "=CheckColor1(A1)"
range("M1:M102").Formula = "=L1"

用这两行替换您的代码,然后重试。这次会有效。

修改

我们的想法不是使用.Autofill,而是在ONE GO中输入完整范围内的公式。

如果列“L”和“M”是固定的并且行可能每次都改变,那么找到列“L”的最后一行并将其合并到您的代码中。见这个

Dim lRow As Long

With Worksheet("Orders")
    lRow = .Range("L" & .Rows.Count).End(xlUp).Row

    .Range("L1:L" & lRow).Formula = "=CheckColor1(A1)"
    .Range("M1:M" & lRow).Formula = "=L1"
End With