2017-05-23 8 views
0

オペレータがウェイトを入力する列Fの次の空きセルを見つけることができるコードがあります。Excel vbaでのユーザー入力後のハイライトカラーの変更

私は、入力を行う必要がある場所に近い範囲のセルを強調表示するのを手伝っていました。これは、フィルタリングなしで入力が正しいことを確認するのに役立ちます。

私は以下のコードでそれを行うことができますが、セルが書き込まれた後にハイライト表示を削除しようとしていますが、失敗しています。私は「Do Until」のアプローチを試みましたが、満足できませんでした。コードは実行されますが、ユーザーが値を追加するとハイライトが削除されません。

私もWait関数を使ってみましたが、Excelは完全にフリーズしています(値は変更できません)。また、私はデバッグを実行し、ランダムな反復を使用してCellの値を変更すると、私のコードが動作します。サーBruceWayneとして

'Find the last non-blank cell in column F (aka, column 6) 
    ' We will add i rows to make the ith blank (in the for loop) 
      PreFree = Cells(Rows.Count, 6).End(xlUp).Row 

      NextFree = PreFree + 1 

    ' Select Cell for manual input 
      Range("F" & NextFree).Select 


      'Do Until emptyWeight = False 
      If ThisWorkbook.Sheets("Input").Range("F" & NextFree) = "" Then 
      emptyWeight = True 
      Range(Cells(NextFree, "C"), Cells(NextFree, "F")).Interior.Color = RGB(181, 244, 0) 
      Else 
      Range(Cells(NextFree, "C"), Cells(NextFree, "F")).Interior.Color = RGB(255, 255, 255) 
      emptyWeight = False 
      End If 
+0

は、条件付き書式の仕事をしていますか?列が完了し、次の空白スペースが必要な場合は、条件付き書式を使用できる場合があります。 – BruceWayne

+0

私は実際には条件付き書式設定を避けることを何とかしています。 –

+0

ああ。ちょっと好奇心が強い、なぜ?一部のユーザが起動したり、間違ってブレークしたりするマクロを必要としません。セルが埋め込まれた後に変更するには、 'Worksheet Change()'イベントを参照してください。 – BruceWayne

答えて

0

あなたはWorksheet_Changeイベントでこれを行うことができ、と述べました。

Private Sub Worksheet_Change(ByVal Target As Range) 

' Declare and prepare the intersection & union of ranges 
Dim rIntersect As Range 
Set rIntersect = Intersect(Target.Offset(1, 0), Sheets("YourSheet").Range("F:F")) 

' Exit this event if there is no change in column f 
If rIntersect Is Nothing Then Exit Sub 

' Include TargetCell 
Set rIntersect = Union(Target, rIntersect) 

' Declare the 'each range', in case the user will paste values into column f 
Dim rEach As Range 

' Will loop through each cell that made a change in column f 
For Each rEach In rIntersect 
    ' Give default color. 
    rEach.Interior.Color = RGB(255, 255, 255) 

    ' And test if the value <blank>, sets color if it is true. 
    If rEach.Value = "" Then rEach.Interior.Color = RGB(181, 244, 0) 
Next 

End Sub 

これはうまくいきます。がんばろう! OPへ



、ここにコードを貼り付け

enter image description here

+0

何らかの理由でこれが動作しません。私はそれを正しく使用しなかったかどうかわかりません。私はIf文の大部分を取り除き、End subに行った。強調表示が機能します。同じフォームの中で私はあなたが私に与えたPrivate Subを追加しましたが、強調表示は削除されません –

+0

ああ、いいえ!この 'Sub'は色の変更を有効にしたい'ワークシート 'に入るべきです。あなたの場合は、それは "入力" 'シート'です。 –

+0

コードを実行する前に "入力"を修正しました –