2016-06-01 6 views
0

Im Hauptunterprogramm muss ich zwei Benutzereingaben bekommen ((1) Bereichsadresse (zB A1: C50), (2) Name String (z. B. James)), und rufen Sie die Funktionsunterroutine auf (indem Sie die Eingaben als Argumente übergeben), und drucken Sie das Ergebnis über die Nachrichtenbox aus, ob der Name existiert oder nicht in dem Bereich existiert.VBA: Ich muss sowohl eine Funktion als auch eine aufrufende Unterstelle schreiben, um folgendes zu tun

Sowohl der Suchbereich als auch der Name sollten von den Benutzern eingegeben werden. Wie schreibe ich die Function Unterroutine und die aufrufende Sub? Das habe ich bisher.

Function NameExists(name As String, area As Range) As Boolean 



If name = area.Value Then 
    NameExists = True 

Else 
    NameExists = False 

End If 


End Function 



Sub Main() 
Dim NameExists As Boolean 
Dim name As String 

name = InputBox("Enter a Name") 
area = InputBox("Enter a Range") 


If NameExists = True Then 
MsgBox name & " Has Been Found" 
Else 
MsgBox name & " Has Not Been Found" 
End If 


End Sub 

Antwort

0

Sie benötigen die Funktion tatsächlich aufrufen, die, wenn sie überprüft, vorhanden ist, und den Namen und die Fläche Variablen übergeben, die Sie den Benutzereingaben hatte. Hier ist ein etwas grobes Beispiel:

Sub Main() 

    Dim nm As String 
    Dim ar As String 

    nm = InputBox("Enter a Name") 
    ar = InputBox("Enter a Range") 

    If NameExists(nm, ar) = True Then 

     MsgBox nm & " Has Been Found" 

    Else 

     MsgBox nm & " Has Not Been Found" 

    End If 

    End Sub 

    Private Function NameExists(name As String, area As String) As Boolean 

    Dim myRange As Range 
    Set myRange = Range(area) 

    For Each myCell In myRange 

     If myCell.Value = name Then 

      NameExists = True 

      Exit For 

     End If 

    Next 

    Set myRange = Nothing 

    End Function 
+0

Vielen Dank das funktioniert! Gibt es eine Möglichkeit, den Benutzer den Bereich auswählen zu lassen, anstatt ihn einzugeben? Ich weiß, dass dieser Code ähnlich aussieht: area = Application.InputBox (Prompt: = _ "Bitte wählen Sie einen Bereich", _ Titel: = "InputBox Method", Typ: = 8) Aber wie würde ich das implementieren die Funktion? – th65

+0

Wenn Sie das tun möchten, dann werden Sie wahrscheinlich die gesamte Textbox ganz vergessen wollen. Erstellen Sie stattdessen ein Makro und weisen Sie der Symbolleiste eine Schaltfläche zu, die eine InputBox öffnet, um den Namen zu erhalten, nach dem gesucht werden soll. Anschließend wird der ausgewählte Bereich übernommen und an die Funktion in meinem Code übergeben. Auf diese Weise markiert der Benutzer einen Bereich und klickt dann auf eine Schaltfläche. Das wäre eine bessere Art, das zu tun, denke ich. –

Verwandte Themen