2014-05-08 1 views
0

데이터가 일부 조건을 충족하는지 확인하는 매크로가 있습니다. 일치하는 기준마다 하나의 메시지 상자가 표시됩니다.하나의 상자에 여러 메시지 상자 표시

나는 고유 한 메시지 상자와 일치하는 모든 조건을 표시하고 싶습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 아래 예제는 지금까지 내가 가지고있는 것입니다.

N I Esp    Par  T DBH  H_m  Cod 
2 111 E_cit   432  1     1 
2 111 E_cit   432  2     1 
2 111 E_cit   432  3     1 
2 111 E_cit   432  4 3  17.4  
2 111 E_cit   432  5     
2 111 E_cit   432  6 14.48 15 

매크로 (예로서 두 조건)

Option Explicit 

Dim DBH As Range 
Dim Cod As Range 

Sub Conditions_1() 

'------------------------------------------------ 
'DBH should be between 5 and 45 cm 

    For Each DBH In Range("F2:F7") 
     If DBH < 5 And DBH <> 0 Or DBH > 45 And DBH <> 0 Then 
     MsgBox "1 - DBH is not between 5 cm and 45 cm" 
      Exit For 
     End If 
    Next DBH 

'------------------------------------------------ 
'There can't be an empty cell on DBH column 
'together with an empty cell on the Code column 

    For Each DBH In Range("F2:F7") 
     If DBH = 0 And DBH.Offset(, 2) = 0 Then 
     MsgBox "2 - DBH is empty and also the Code" 
      Exit For 
     End If 
    Next DBH 

End Sub 

이 현재 코드 별도로 두 개의 메일 박스를 산출,

  1. "1- DBH 5 사이 아니다 cm 및 45cm "
  2. "2- DBH는 비어 있으며 코드 "

그러나 모든 조건을 한 번 나열하는 단일 상자가 있어야합니다. 어떤 도움을 주셔서 감사합니다.

+0

또한 조건의 일부가 중복됩니다. DBH> 45의 경우 'DBH <> 0'이고 DBH> 45' 인 경우 DBH <> 0'이 항상 true입니다. –

+0

@Cor_Blimey, 그것을 지적하는 사람. –

답변

1
Option Explicit 

Dim DBH As Range 
Dim Cod As Range 


Sub Conditions_1() 

Dim msg as string 

msg="" 

'------------------------------------------------ 
'DBH should be between 5 and 45 cm 

    For Each DBH In Range("F2:F7") 
     If DBH < 5 And DBH <> 0 Or DBH > 45 And DBH <> 0 Then 
      msg = msg & "1 - DBH in " & DBH.Address() & _ 
         " is not between 5 cm and 45 cm" & vbLf 
     End If 
    Next DBH 

'------------------------------------------------ 
'There can't be an empty cell on DBH column 
'together with an empty cell on the Code column 

    For Each DBH In Range("F2:F7") 
     If DBH = 0 And DBH.Offset(, 2) = 0 Then 
      msg = msg & "2 - DBH in " & DBH.Address() & _ 
         " is empty and also the Code" & vbLf 
     End If 
    Next DBH 

    If Len(msg) > 0 Then MsgBox msg 


End Sub 
+0

범위에있는 여러 셀이 기준을 통과하면 위의 메시지에 여러 개의 "1 - DBH 등"및 "2 - DBH 등"이라는 긴 메시지가 표시됩니다. 제 독서는 단 한 번 보여 주어야합니다. 이 문제를 다루는 방법은 msg = "..."줄 바로 아래에 Exit For를 넣는 것입니다. –

+1

하나의 메시지에 모든 문제를 표시하여 사용자가 루틴을 다시 실행해야하는 경우 단지 그들이 문제 중 하나만 고쳤다는 것을 알게되었습니다! (그리고 메시지 박스가 없을 때까지 계속 재실행하십시오 ...) 나는 (아마도 길다란) 메시지를보다 유용하게 만들기 위해 빠른 편집을 할 것입니다. 또한 검사 루틴의 중복을 줄이는 데 도움이됩니다. –

+0

@TimWilliams 그건 의미가 있습니다. 각 오류 메시지와 함께 계산하면 좋습니다. 어쨌든, 좋은 대답 –