2011-11-07 5 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

당신은 당신은 또한 당신이 얻는 어떤 오류 달성하고 시도하고있는 무슨 spedify해야합니다. – CaBieberach

답변

3

잘못하고있는 일이 많습니다.

  • 당신은 당신의 변수를 선언하는 데 실패했다.
  • 당신은 하위()을하지 기능()를 사용합니다. 일반적으로 함수는 어떤 식 으로든 워크 시트를 변경하거나 값을 조작하고 반환하는 것이 허용되지 않습니다.
  • 루프에 오류가 - 당신은 당신의 지침은 루프 내에서 할 필요가 모든 것보다 하나 개 이상의 셀에 일을하고자하는 경우. 지금 당장은 1 셀만 색을 칠합니다 (범위 내 마지막 셀의 3 열 오른쪽). 함수가 끝나기 전에
  • 당신은 함수를 반환합니다.

나는 당신이 무엇을하려고하는지 (아무런 설명도 없었습니다) 셀 범위를 취하고 셀 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 

작동 원리 : 당신이 당신이 제공 한 범위의 각 셀을 나타냅니다, 범위 등의 변수 셀을 만들 수 있습니다. 범위의 각 셀에 대해 동일한 내부 색상을 셀 오른쪽에 3 열 오프셋로 적용하려고합니다.

+0

'Range ("A1 : A10"), Offset (0, 3) .Interior.Color = cell.Interior.Color'를 시도하십시오. 루프보다 빠릅니다. – CaBieberach

+0

함수는 워크 시트에서 호출 된 경우에만 워크 시트를 수정할 수 있습니다. 사용자 정의 수식으로. 메인 프로 시저 내부에서 함수를 사용하면 모든 것을 할 수 있습니다. – CaBieberach

+0

나는 OP가 가지고 있었던 것과 비슷한 로직을 의도적으로 유지했다. 프로 시저 내부에서 함수를 호출한다고해서 워크 시트를 변경할 수 없다는 사실은 바뀌지 않습니다. – aevanko