我有一个函数,它根据指定单元格的颜色给出一个值。
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错误。其中说公式中使用的值是错误的数据类型。
列是"一般"格式。
答案 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