2011-11-07 194 views
0

此代码有什么问题? 我收到“ARG!”错误VBA - 单元格颜色

Public Function nr_kolor(kom As Range) 
    For Each komorka In kom 
    wartosc = komorka.Font.Color 
    wiersz = komorka.Row 
    kolumna = komorka.Column + 3 
    nr_kolor = wartosc 
    Next komorka 
    activesheet.Cells(wiersz, kolumna).Select 
    Selection.Interior.Color = wartosc 
End Function 
+1

你需要加速你想要完成什么,以及你会得到什么错误。 – CaBieberach

回答

3

有很多事情你做错了。

  • 你没有声明你的变量。
  • 您需要使用Sub()而不是Function()。通常,函数不允许以任何方式更改工作表,只需操作并返回值。
  • 您的循环出现错误 - 如果您希望对多个单元执行操作,而不是将所有指令都放在循环中。现在它只为1个单元格(你范围内最后一个单元格右边的3列)着色。
  • 在函数结束之前,您正在返回函数。

我认为你想要做的(没有解释)是采取一系列的单元格,并将相同的内部颜色应用到三列的单元格。这是一个更有效的方法来做到这一点。我故意保持逻辑简单。

Sub ColorCells() 

Dim cell As Range 

For Each cell In Range("A1:A10") 
    cell.Offset(, 3).Interior.Color = cell.Interior.Color 
Next 

End Sub 

它是如何工作: 您创建一个变量单元格为一个范围,这将代表您提供的范围内的每个细胞。对于范围内的每个单元格,您想要将相同的内部颜色应用于右侧的单元OFFSET 3列。

+0

尝试'Range(“A1:A10”)。Offset(0,3).Interior.Color = cell.Interior.Color'。它比Loop更快。 – CaBieberach

+0

如果从工作表调用函数,函数不能修改工作表;作为用户定义的公式。如果你在主程序中使用函数,你可以做任何事情。 – CaBieberach

+0

我故意保持类似于OP的逻辑。并且在一个过程中调用一个函数并不会改变它不允许改变工作表的事实。 – aevanko