2016-09-08 2 views
0

ExcelでVBAを書くのは比較的新しいです。 Excelワークシートでは、複数の列にわたって1つの行にイベントが発生しています。これらのイベントは、色だけで示されます(空セル以外)。 A1からG1までの細胞が赤く、H1からV1までが青であると想像してください。VBAループエラー

セルが色を変えたときに私に知らせるサブを書き込もうとしています。私の現在のコードでは、下のテキストで、Excelが応答を停止し、エラーコード "ランタイムエラー '-2147417848(80010108)'"が表示されます。私はどこに問題が発生しているのか分かりません。

Sub colorReader() 

    Set a = ActiveCell 

    Range("C8").Select 

    Dim cellColor As String 
    cellColor = ActiveCell.Interior.Color 
    MsgBox (cellColor) 

    Do While cellColor = "13408767" 
     a = ActiveCell.Offset(, 1) 
     If cellColor <> "13408767" Then 
      MsgBox ("end color") 
     End If 
    Loop 

End Sub 

答えて

2

ActiveCellは決して変更されません。私はあなたがセルをループしたいと思って、見つかったセルの色が、同じ行のセルのセルの色と異なるだけで、1つの列が上にあるかどうかをテストします。そう

for i= 3 to 100 'or whatever your last column number happens to be 
    'This tests to see if the interior color of a cell is different from 
    'the on in the same row but the next column over 
    if cells(8, i).Interior.ColorIndex <> cells(8, i+1).Interior.ColorIndex then 
     MsgBox("color changes") 
    end if 
next i 

と同じように私はあなたがMsgBox("Column " & i + 1 & " had a change of color from the column immediately to the left of it.")のように、色の変化が行われる場所を示しています何か役に立つとMsgBox("color changes")を置き換えることになるでしょう推測しています。

+0

ありがとうございます!そして、はい、私はMsgBoxを変更するつもりですが、私はそれをチェックポイントとして使用して、コードが正常に機能していることを確認してから続けます。 – Andrew

+0

ようこそ。お役に立てて嬉しいです。 –

0

あなたのセル参照は少し仕事をすることができます。通常、何かを選択することは悪いと考えられます。また、範囲を移動する必要があります。下のコードでは、範囲aが毎回移動されます。試してみてください:

Sub colorReader() 
dim a as range 
Set a = activeworksheet.Range("C8") 


Dim cellColor As String 
cellColor = ActiveCell.Interior.Color 
MsgBox (cellColor) 

Do While cellColor = "13408767" 
    a = a.Offset(, 1) 
    If cellColor <> "13408767" Then 
     MsgBox ("end color") 
    End If 
Loop 
End Sub 
関連する問題