2015-06-11 6 views
0

Я разместил вопрос об этом фрагменте кода, который уже был изменен на "Alex Bell". Он помог мне с кодом, создающим MsgBox, каждый раз, когда значение «496» появляется в этом конкретном диапазоне. Но из-за моих плохих знаний на этом языке есть много вещей, которые я не могу сделать.Excel VBA - Value & MsgBox

следующий шаг, который я пытался достичь, делал то же самое, что уже сделано, предупреждение MsgBox, если значение «496», но теперь также с «800».

В чем проблема? Проблема в том, что я не могу представить способ свести два условия для совместной работы, например, он сообщает мне, где находится «496», а затем «800» и заполняет обе ячейки, которые содержат эти конкретные значения.

Это, вероятно, простой вопрос для решения, но опять же я новичок в vba, и когда я изучал vb в школе, мы этого не узнали. Поэтому ожидайте от меня больше вопросов по темам, связанным с vba, и я пытаюсь изучить его на данный момент.

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Range 
If Not Intersect(Target, Range("G3:G500")) Is Nothing Then 
For Each cell In Target 

    'need clarification 
    'Me.Cells(cell.Row, "496").Interior.ColorIndex = xlColorIndexNone 
    'If cell.Value <> "" And cell.Value <> prevValue Then 
    'Me.Cells(cell.Row, "496").Interior.ColorIndex = 3 
    'End If 

    If cell.Value = "496" Then 
     cell.Interior.ColorIndex = 43 
     MsgBox ("The row where the status is 496 is located in: " & cell.Row) 
    Else 
     cell.Interior.ColorIndex = xlColorIndexNone 
    End If 
Next cell 
End If 

'If Not Intersect(Target, Range("G3:G500")) Is Nothing Then 
' For Each cell In Target 
' 
'  If cell.Value = "800" Then 
'   cell.Interior.ColorIndex = 4 
'   MsgBox ("The row where the status is 800 is located in: " & cell.Row) 
'  Else 
'   cell.Interior.ColorIndex = xlColorIndexNone 
'  End If 
' Next cell 
'End If 

End Sub 

ответ

1
If cell.Value = "496" Or cell.Value = "800" Then 
    cell.Interior.ColorIndex = 43 
    MsgBox ("The row where the status is 496 or 800 is located in: " & cell.Row) 
Else 
    cell.Interior.ColorIndex = xlColorIndexNone 
End If 

Или так:

If cell.Value = "496" Then 
    cell.Interior.ColorIndex = 43 
    MsgBox ("The row where the status is 496 is located in: " & cell.Row) 
ElseIf cell.Value = "800" Then 
    cell.Interior.ColorIndex = 45 
    MsgBox ("The row where the status is 800 is located in: " & cell.Row) 
Else 
    cell.Interior.ColorIndex = xlColorIndexNone 
End If 

Если вы хотели бы иметь больше проверок, вы можете рассмотреть, чтобы сохранить номера строк для печати в переменную и в самом конце вы можете позвоните по MsgBox:

Dim rowNumbers As String 
rowNumbers = "" 
If Not Intersect(Target, Range("G3:G500")) Is Nothing Then 
    For Each cell In Target  
     If cell.Value = "496" Then 
     cell.Interior.ColorIndex = 43 
     rowNumbers = rowNumbers & cell.Row & " " 
     ElseIf cell.Value = "800" Then 
     cell.Interior.ColorIndex = 45 
     rowNumbers = rowNumbers & cell.Row & " " 
     Else 
     cell.Interior.ColorIndex = xlColorIndexNone 
     End If 
    Next cell 
    MsgBox ("The rows where the status is 496 or 800 is located in: " & rowNumbers) 
End If 
+1

Второй, который я считаю лучшим, из-за разных цветов, чтобы отличать значения и лучше структурированный код, спасибо за qu ick ответ и за помощь moffeltje. :) – Luis

+3

Если у вас есть много msgbox, вы можете захотеть сопоставить номера строк и сделать сообщение вне цикла, чтобы предотвратить много сообщений msgbox – 99moorem

+0

Не могли бы вы объяснить, что лучше? Как я уже сказал, очень новичок в этом вопросе. – Luis

Смежные вопросы