2016-11-22 7 views
0

ユーザー入力条件を考慮して国データベースで検索を実行するスクリプトをExcel VBAで作成しています。検索では、3つの検索フィールドからのユーザー検索を考慮するUserFormが不足しています。 「国」とは別に、ユーザーは「情報のカテゴリ」とそれに関心のある「情報のサブカテゴリ」に言及して検索を絞り込むことができます。これらのフィールドはすべてリストにリンクされたComboBoxです。カテゴリとサブカテゴリの例には、「地理」、「経済指標」、「メディア」、「人口統計」などがあります。 ユーザーから提供された条件に応じて、スクリプトは検索結果(データベースと一致するものがあれば)を返します。あるいは、一致するものが見つからないことをアドバイスするMsgBoxを返します。私はMsgBoxに表示されているテキストが固定されているのか、それともユーザーが入力した変数に依存できるのか疑問に思っていました。ユーザー入力変数を持つMsgBox

例として、米国に関する情報を探していて、この基準のみが満たされた検索を実行するユーザーを明確にするためです。データベースには米国に関する情報があり、入手可能なすべての情報が返されます。すべてのデータにかかわらず、ユーザーは特に米国のメディアに関する情報を求め、これらの2つの基準で検索を繰り返します。ただし、データベースには特に米国とメディアに関する情報はありません。この場合、スクリプトはMsgBoxを返します。現時点では自分のコードに従って、正常に動作していますが、「データベースにはこの検索に一致する情報はありません」と表示されます。

私の質問は:MsgBoxは、ユーザー検索に依存するメッセージを返すことができます。つまり、この例では、「米国のメディアに関する情報はありません」というようなものを返しますか?ご助力ありがとうございます。

この

が検索を実行するコードです:

country = Sheets("Results").Range("D5").Value 
Category = Sheets("Results").Range("D6").Value 
Subcategory = Sheets("Results").Range("D7").Value 
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row 

    For i = 2 To finalrow 

     'If the country field is left empty 
     If country = "" Then 
      Sheets("Results").Range("B10:J200000").Clear 
      MsgBox "You must select a country in order to search the database. Please do so in the drop-down list provided." 
      Sheets("Results").Range("D5").ClearContents 
      Sheets("Results").Range("D6").ClearContents 
      Sheets("Results").Range("D7").ClearContents 
      Exit Sub 

     'If the country field is filled in and there results from the search made 
     ElseIf Sheets("Database").Cells(i, 1) = country And _ 
      (Sheets("Database").Cells(i, 3) = Category Or Category = "") And _ 
      (Sheets("Database").Cells(i, 4) = Subcategory Or Subcategory = "") Then 

       'Copy the headers of the table 
       With Sheets("Database") 
       .Range("A1:I1").Copy 
       End With 
       Sheets("Results").Range("B10:J10").PasteSpecial 

       'Copy the rows of the table that match the search query 
       With Sheets("Database") 
       .Range(.Cells(i, 1), .Cells(i, 9)).Copy 
       End With 
       Sheets("Results").Range("B20000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats 

     ElseIf Sheets("Database").Cells(i, 1) = country And _ 
      (Sheets("Database").Cells(i, 3) <> Category) Then 
      MsgBox "The database has no information that matches this search." 
      Sheets("Results").Range("D5").ClearContents 
      Sheets("Results").Range("D6").ClearContents 
      Sheets("Results").Range("D7").ClearContents 
      Exit Sub 

     End If 

    Next i 
+0

投稿する前にコードを入力してください。ありがとう – user1

+0

私が書いたコードを提供しました。ありがとうございました。 – franciscofcosta

答えて

2

あなたはMsgBoxの制御であるので、あなたが適切に応じてメッセージを変更するには、あなたのロジックを処理するだけです。あなたが言及したように、あなたの変数からの値で

MsgBox "The database has no information that matches this search." 

:どこへ行く

1つの非常に簡単な方法は、単純にこの行を変更することであろう

MsgBox "There is no information regarding " & Category & " in the " & country & "." 

Categoryを仮に「メディア」が含まれており、 countryには検索の時点で「US」が含まれています。これは「米国のメディアに関する情報はありません」と出力されます。あなたが期待したとおりに。

ユーザーが入力した正確な値に応じてメッセージのパターンを変えたい場合は、適切に処理するためにはIf...Then...Elseを使用する必要があります。ここでは、セットフレーズを使用して、ハードコードされた値をパラメータで変更しています。

+0

ありがとう!これは完全に機能しました。 – franciscofcosta

+0

私はそれを聞いて非常にうれしいです。乾杯 –

関連する問題