2016-11-22 4 views
0

Ich schreibe ein Skript in Excel VBA, das eine Suche in einer Landesdatenbank unter Berücksichtigung der vom Benutzer eingegebenen Kriterien ausführt. Die Suche läuft von einer UserForm aus, die die Benutzersuche aus drei Suchfeldern betrachtet. Neben dem "Land" kann der Nutzer die Suche auch einschränken, indem er die "Kategorie der Informationen" und die "Unterkategorie der Informationen", an denen er interessiert ist, erwähnt. Alle diese Felder sind ComboBox, die mit Listen verknüpft sind. Einige Beispiele für Kategorien und Unterkategorien sind unter anderem "Geographie", "Wirtschaftsindikatoren", "Medien", "Bevölkerungsstatistik". Je nach den vom Benutzer angegebenen Kriterien gibt das Skript entweder die Suchergebnisse zurück - wenn Übereinstimmungen mit der Datenbank vorliegen - oder alternativ eine MsgBox, die darauf hinweist, dass die Suche keine Übereinstimmungen gefunden hat. Ich habe mich gefragt, ob der in der MsgBox präsentierte Text fest ist oder ob er von den vom Benutzer eingegebenen Variablen abhängen kann.MsgBox mit vom Benutzer eingegebener Variable

Zur Klarstellung nehmen wir als Beispiel einen Benutzer, der Informationen über die USA sucht und eine Suche nur mit diesen Kriterien durchführt. Die Datenbank enthält Informationen zu den USA und gibt alle verfügbaren Informationen zurück. Trotz aller Daten möchte der Nutzer Informationen über Medien in den USA und wiederholt die Suche mit diesen beiden Kriterien. Die Datenbank enthält jedoch keine Informationen speziell zu den USA und den Medien. In diesem Fall gibt das Skript eine MsgBox zurück, die laut meinem Code im Moment - was gut funktioniert - nur sagt: "Die Datenbank hat keine Informationen, die mit dieser Suche übereinstimmen".

Meine Frage ist: kann die MsgBox eine Nachricht zurückgeben, die von der Benutzersuche abhängig ist, d. H. In dem Beispiel etwas wie "Es gibt keine Informationen in Bezug auf Medien in den USA"? Vielen Dank für Ihre Hilfe.

Dies ist der Code, der die Suche ausgeführt wird:

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

Bitte versuchen Sie Code vor dem Posten. danke – user1

+0

Ich habe den Code, den ich geschrieben habe, zur Verfügung gestellt. Vielen Dank. – franciscofcosta

Antwort

2

Sie die Kontrolle über die MsgBox sind Sie Ihre Logik so tun, alle müssen richtig verarbeiten die Nachrichten entsprechend zu ändern.

Eine sehr einfache Möglichkeit wäre zu gehen, um einfach diese Zeile zu ändern:

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

Mit den Werten aus Ihrer Variablen, wie Sie erwähnt:

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

Gesetzt Category enthält „Medien“ und country enthält "US" zum Zeitpunkt der Suche, dies wird ausgegeben "Es gibt keine Informationen über Medien in den USA." wie du es erwartet hast.

Wenn Sie verschiedene Muster für Ihre Nachrichten abhängig von dem genauen Wert wünschen, den der Benutzer eingegeben hat, müssten Sie mit mehr If...Then...Else arbeiten, um sie richtig zu behandeln. Hier verwende ich nur einen Satz und ändere die hartcodierten Werte mit Parametern.

+0

Danke! Das hat perfekt funktioniert. – franciscofcosta

+0

Ich bin sehr froh, es zu hören. Prost –