2013-04-16 53 views
0

這應該是一個簡單的修復,但我是VBA世界和編程的新手。這是我必須驗證具有調查輸入值的特定列的代碼。某些調查問題的價值可能性相同,我不想爲每個問題複製並粘貼相同的代碼,然後更改列字母和數字。我確信有一個簡單的方法來做到這一點。使用一種驗證方法驗證多列

具體而言,我希望通過AC列的第一列針對下面的情況進行驗證。我真的很想保持這個代碼儘可能簡單。非常感謝。

我喜歡我現在使用的方法,但是如果這需要從頭開始重建,那就這樣吧。

Sub MyCheck() 

Application.ScreenUpdating = False 

Dim i As Integer 
    For i = 2 To Range("I65536").End(xlUp).Row 
     Select Case Cells(i, 9).Value 
      Case "1", "2", "3", "4", "5", "88", "99" 
       Cells(i, 9).Interior.ColorIndex = xlNone 
      Case Else 
       Cells(i, 9).Interior.ColorIndex = 6 
     End Select 
    Next i 
    Application.ScreenUpdating = True 

End Sub 
+1

如果我理解正確,那麼爲什麼VBA代碼,而不是條件格式? –

+0

@SiddharthRout,還有其他一些驗證分組,我想將其應用於不同的列,並且希望在所有工作表中按下按鈕時發生所有這些情況。另外,我真的想提高我的VBA能力。如果條件格式是最佳路線,那麼我一定會再次查看。我無法得到我想要的結果。 – MontasaurusWrex

+0

是條件格式是最好的和非VBA處理它的方式。你甚至不需要爲此按下按鈕。只要單元格中的值發生變化,顏色將自動改變。然而,如果你仍然想要基於你的代碼的代碼,那麼我可以給你,以及... –

回答

1

喜歡這個?

Option Explicit 

Sub MyCheck() 
    Application.ScreenUpdating = False 

    Dim i As Long, lRow As Long 
    Dim ws As Worksheet 
    Dim rng As Range, aCell As Range 
    Dim ColLetter As String 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     '~~> From Col B to Col AC 
     For i = 2 To 29 
      ColLetter = Split(.Cells(, i).Address, "$")(1) 

      '~~> Find the last row of the releavnt column 
      lRow = .Range(ColLetter & .Rows.Count).End(xlUp).Row 

      '~~> Set your range 
      Set rng = .Range(ColLetter & "2:" & ColLetter & lRow) 

      '~~> Remove all the color. Note we are not doing this 
      '~~> in the loop 
      rng.Interior.ColorIndex = xlNone 

      For Each aCell In rng 
       Select Case aCell.Value 
       Case 1 To 5, 88, 89 
       Case Else 
        aCell.Interior.ColorIndex = 6 
       End Select 
      Next 
     Next i 
    End With 
    Application.ScreenUpdating = True 
End Sub 

截圖

enter image description here

+0

我喜歡這個。條件格式仍然不適用於我。 – MontasaurusWrex