VBAfunction。 #VALUE错误,公式中使用的值是错误的数据types。

好的,试着尽可能清楚地说清楚。 请在代码的可能的混乱情况下与我一起裸露。 我有一个函数,它给了我一个值取决于指定单元格的颜色。 这个function如下:

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 

所以在我的工作表中,我有= CheckColor1(a1),并填写所有行,这是好的,它给了我相应的“R”和“C”的每一行。 然后在M1中,只需在它旁边使用一个= L1,再次填充,复制>粘贴值。 我试着复制>直接在L列粘贴值,但它不起作用。

现在,我已经logging在一个macros。 哪给了我:

 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 

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

所以我有点困惑! 它在我手动填写时有效。 但不是与macros? 列只是“一般”格式。

任何帮助非常感谢!

避免使用。select您可能想要了解如何避免在Excel VBAmacros中使用select

所有的代码都可以写成两行

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

用这两行replace你的代码,然后重试。 这次会工作。

编辑

这个想法是不是使用.Autofill而是在ONE GO中input完整范围的公式。

如果列“L”和“M”是固定的,并且行可能每次都改变,那么find列“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