2016-03-21 12 views
0

コードに何が問題なのかわかりません。Excel VBA:等しい場合は、エラーメッセージを表示します。

注文する前に、特定のシートに特定の製品のIDがあるかどうかを確認する必要があるコードがあります。

Private Sub Pardot_Click() 

Dim xlRange As Range 
Dim xlCell As Range 
Dim xlSheet As Worksheet 
Dim valueToFind As String 

valueToFind = pardID 
Set xlSheet = ActiveWorkbook.Worksheets("Noliktava") 
Set xlRange = xlSheet.Range("A1:A500") 

For Each xlCell In xlRange 
    If xlCell.Value <> valueToFind Then 
     MsgBox ("This product wasn't found in the database - ID: " & pardID.Text) 
     Exit Sub 
    End If 
Next xlCell 

End Subの

基本的に、私はボックスに(1 IE)IDでユーザーフォームと種類を起動し、IDが範囲内に見つからない場合は、「オーケー」または何をクリック(ID:1)エラーメッセージを表示します。

コードを<> =に変更すると動作しますが、これは必要な結果ではありません。

+1

'valueToFind'は文字列(テキスト)値です。 Aは数字で構成されています。値を比較する前に、 'CStr()'や 'CLng()'や 'CDbl()'などを使って、テキストとその両方を数値に変更してください。 – Ralph

+0

=を使用してトリムとuboundを試してください。一方の端にスペースがあり、他方のスペースにスペースがない場合、それは失敗します。 – Sorceri

+0

私の答えは助けてくれてうれしいですが、あなた自身の知識のために、@ Ralphのコメントも見直すことをお勧めします。将来的に間違いなく文字列と数字を比較したいと思うでしょう – BruceWayne

答えて

3

コードをあまり変更せずに、範囲内の各セルをチェックするのではなく、おそらく時間を節約し、CountIf()を使用するだけですか?

Private Sub Pardot_Click() 

Dim xlRange As Range 
Dim xlCell As Range 
Dim xlSheet As Worksheet 
Dim valueToFind As String 

valueToFind = pardID 
Set xlSheet = ActiveWorkbook.Worksheets("Noliktava") 
Set xlRange = xlSheet.Range("A1:A500") 

If WorksheetFunction.CountIf(xlRange,valuetoFind) = 0 then 
    msgbox "This product wasn't found in the database - ID: " & parId.textEnd 
End If 

End Sub 

注:これは正確ユーザーが挿入されたテキストを探します。文字列のどこかにある場合はワイルドカードを使用してください(「doggone」、「dog food」、「dog」の "dog"を検索する)

+1

ありがとう、BruceWayne。作品。 – user3688039

関連する問題