Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1724to1728
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variable Werte in MSG-Box

Variable Werte in MSG-Box
19.11.2019 10:43:54
kultnoob
Hallo zusammen,
grüße alle und brauche eure Hilfe, da ich keinen Ansatz finde.
ich habe ein Suchfeld, in welchen man ein Wort eingeben kann. Dann durchsucht es alle Tabellenblätter und gibt den Wert einzeln in einer MSG-Box aus.
Anbei ein Auszug aus der Syntax

sub test
Dim ws As Worksheet
Dim objCell As Range
'Die Variable ws ist als Worksheet deklariert
For Each ws In ThisWorkbook.Worksheets
'Der Variable objCell das Ergebnis der Suche übergeben
Set objCell = ws.Cells.Find(What:=Suchfeld)
'Prüfen ob objCell nicht leer ist
If Not objCell Is Nothing Then
'MsgBox ausgeben, in welchem Tabellenblatt und Zelle das Suchkriterium gefunden  _
_
_
wurde
MsgBox "Gefunden in Tabelle " & "'" & ws.Name & "'" & " in Zelle " & objCell. _
Address
End If
Next ws
end sub

Mir wäre es lieber, wenn es eine MSG-Box wäre, die alle Ergebnisse anzeigt. Da es aber eine unterschiedliche Anzahl an Ergebnissen sein kann, muss die MSG-Box variabel sein, falls überhaupt möglich.
Im Beispiel:
Gesucht wird der Name Kurt Bauer (gefunden werden zum Beispiel 4 Ergebnisse)
Dann soll die MSG Box folgendes ausgeben
Gefunden in Tabelle 1, Kurt Bauer, Zeile 12
Gefunden in Tabelle 1, Max Bauer, Zeile 22
Gefunden in Tabelle 3, Anton Kurtbauer, Zeile 7
Gefunden in Tabelle 5, Detlef Bauerle, Zeile 45
Mir fehlt hier nur ein Ansatz, wie ich dies in einer MSG-Box variable darstellen kann. Wie gesagt, sofern möglich.
Vielen Dank für die Hilfe.
Grüße

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable Werte in MSG-Box
19.11.2019 11:05:51
Werner
Hallo,
zwei Anmerkungen zu deinem Code:
1. bei Find sollte man immer die weiteren Suchparameter mit angeben. Bei händischer Suche speichert Excel die Sucheinstellungen. Bei einer Suche via VBA greift Excel dann auf diese gespeicherten Parameter zu und das kann zu unerwünschten Ergebnissen führen wenn du eigentlich mit anderen Parametern suchen willst.
2. Variablen die mit Set gesetzt wurden, sollte man zur Sicherheit am Ende des Codes wieder leeren.
Sub test()
Dim ws As Worksheet, objCell As Range, strSammler As String
'Die Variable ws ist als Worksheet deklariert
For Each ws In ThisWorkbook.Worksheets
'Der Variable objCell das Ergebnis der Suche übergeben
Set objCell = ws.Cells.Find(What:=Suchfeld, LookIn:=xlValues, lookat:=xlWhole)
'Prüfen ob objCell nicht leer ist
If Not objCell Is Nothing Then
If strSammler = vbNullString Then
strSammler = "Gefunden in Tabelle " & "'" & ws.Name & " in Zelle " _
& objCell.Address
Else
strSammler = strSammler & vbLf & "Gefunden in Tabelle " & "'" & ws.Name _
& " in Zelle " & objCell.Address
End If
End If
Next ws
If strSammler = vbNullString Then
MsgBox "Der Suchbegriff " & Suchfeld & " wurde in keinem Blatt gefunden."
Else
MsgBox strSammler
End If
Set objCell = Nothing
End Sub
Gruß Werner
Anzeige
AW: Variable Werte in MSG-Box
19.11.2019 11:26:38
fcs
Hallo kultnoob,
man muss die Fundstellen in einer weiteren Schleife in einer Variablen sammeln.
Beim Suchen sollte man zusätzlich die Parameter Lookin und Lookat definieren, da diese von einer vorherigen Such-Operation übernommen werden und ggf. nicht pasen.
LG
Franz
Sub test()
Dim ws As Worksheet
Dim objCell As Range
Dim strErste As String, strMsg As String
'Die Variable ws ist als Worksheet deklariert
For Each ws In ThisWorkbook.Worksheets
strErste = ""
'Der Variable objCell das Ergebnis der Suche übergeben
Set objCell = ws.Cells.Find(What:=Suchfeld, LookIn:=xlValues, lookat:=xlPart) _
'ggf. xlWhole statt xlPart verwenden
'Prüfen ob objCell nicht leer ist
If Not objCell Is Nothing Then
strErste = objCell.Address '1. Fundstelle merken
Do
strMsg = strMsg & vbLf & ws.Name & ", Zeile " & objCell.Row & vbLf
Set objCell = ws.Cells.FindNext(after:=objCell)
If objCell.Address = strErste Then Exit Do
Loop
End If
Next ws
'MsgBox ausgeben, in welchem Tabellenblatt und Zelle das Suchkriterium gefunden wurde
If strMsg  "" Then
MsgBox """" & Suchfeld & """ gefunden in:" & vbLf & strMsg
Else
MsgBox """" & Suchfeld & """ nicht gefunden"
End If
End Sub

Anzeige
AW: Variable Werte in MSG-Box
19.11.2019 11:57:52
kultnoob
Hi zusammen,
vielen Dank für die Rückmeldung.
Habe gerade noch gemerkt, dass ich eine wichtige Info vergessen habe anzugeben.
Wenn die Zelle den Wert Max, Mustermann hat und ich nur Max eingebe, dann soll er mir jeden Zellenwert ausgeben, der den Wert Max hat.
z.B.
Tabelle 1, Maximilian Schuster, Zeile 12
Tabelle 3, Max Schiller, Zeile 2
usw...
@ Werner
Dein Code funktioniert soweit aber ich muss exakt den Zellenwert eingeben, damit er etwas findet. Hier hattest Du leider nicht die vollständigen Informationen. Trotzdem vielen Dank für deine Mühe und Hilfe. Die Info mit Set = bla bla und am Ende Set bla bla = Nothing merke ich mir. :-) Danke
@ fcs
Dein Code funktioniert. Er gibt mir ein Ergebnis wieder egal ob ich nach z.B. Max oder Mustermann suche. Nur zeigt er mir jeden Wert doppelt an.
im Beispiel
"Max" gefunden in
Tabelle 1, Zeile 16
Tabelle 1, Zeile 16
Tabelle 2, Zeile 7
Tabelle 2, Zeile 7
usw.
Da durch meine Suchvorgabe (z.B. Meier) der Wert im String durchsucht wird, besteht natürlich die Gefahr, dass er mir bei der Suche nach Meier 10 Zellen angibt, aber ich nicht weiß, ob es wirklich der Meier ist, den ich suche. Deshalb muss nach dem gefunden auch der vollständige Zellenwert angegeben werden. Werde mal versuchen, ob ich dies einbauen kann.
im Beispiel.
"Meier" gefunden in:
Tabelle 1, Zeile 17, Manfred Meier
Tabelle 1, Zeile 19, Kurt Meier
Tabelle 2, Zeile 2, Michael Meier
usw.
Aber vielen vielen vielen vielen Dank für die Hilfe.
Grüße
Anzeige
AW: Variable Werte in MSG-Box
19.11.2019 12:05:49
Werner
Hallo,
dann ersetze mal xlWhole durch xlPart.
Gruß Werner
AW: Variable Werte in MSG-Box
19.11.2019 12:22:02
kultnoob
Hi Werner,
YES!!! daran lag es... habe xlPart angegeben und eine kleine Erweiterung hinzugefügt.

For Each ws In ThisWorkbook.Worksheets
'Der Variable objCell das Ergebnis der Suche übergeben
Set objCell = ws.Cells.Find(What:=Suchfeld, LookIn:=xlValues, lookat:=xlPart)
'Prüfen ob objCell nicht leer ist
If Not objCell Is Nothing Then
If strSammler = vbNullString Then
strSammler = "Gefunden in Tabelle " & "'" & ws.Name & " in Zelle " & objCell. _
Address & ", " & objCell.Value
Else
strSammler = strSammler & vbLf & "Gefunden in Tabelle " & "'" & ws.Name & "  _
in Zelle " & objCell.Address & ", " & objCell.Value
End If
End If
Next ws
Vielen Dank, so sollte es jetzt passen.
Super Hilfe und wieder was gelernt.
Wünsche einen schönen Tag.
Grüße
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
19.11.2019 12:28:02
Werner
AW: Variable Werte in MSG-Box
19.11.2019 15:07:25
fcs
Hallo Kultnob,
wenn de gleiche Wert mehrmals für die gleiche Zeile ausgegeben wird, dann sthet der suchbegriff in 2 Zellen in der Zeile.
Ich hab mein Makro mal erweitert und zusätzlich die Möglichkeit eingebaut, dass eine der Fundstellen selektiert wird.
LG
Franz
Sub test()
Dim ws As Worksheet
Dim objCell As Range
Dim strErste As String, strMsg As String
Dim iCount As Integer, arrInfo() As String, bolNeu As Boolean, i As Integer
'Die Variable ws ist als Worksheet deklariert
For Each ws In ThisWorkbook.Worksheets
strErste = ""
'Der Variable objCell das Ergebnis der Suche übergeben
Set objCell = ws.Cells.Find(What:=Suchfeld, LookIn:=xlValues, lookat:=xlPart)
'Prüfen ob objCell nicht leer ist
If Not objCell Is Nothing Then
strErste = objCell.Address '1. Fundstelle merken
Do
'Prüfen, ob Suchwert in gleicher Zeile schon gefunden
bolNeu = True
For i = 1 To iCount
If arrInfo(3, i) = objCell.Text And arrInfo(4, i) = objCell.Row Then
bolNeu = False
End If
Next
'Informationen zur gefunden Zelle speichern
If bolNeu = True Then
iCount = iCount + 1
ReDim Preserve arrInfo(1 To 4, 1 To iCount)
arrInfo(1, iCount) = ws.Name
arrInfo(2, iCount) = objCell.Address(False, False, xlA1)
arrInfo(3, iCount) = objCell.Text
arrInfo(4, iCount) = objCell.Row
If Len(strMsg) = 950 Then
strMsg = strMsg & vbLf & "von " & iCount & " Fundstellen"
End If
i = Len(strMsg)
'MsgBox ausgeben, in welchem Tabellenblatt und Zelle das Suchkriterium gefunden wurde
If strMsg  "" Then
strMsg = """" & Suchfeld & """ gefunden in:" & vbLf & strMsg & vbLf _
& "Gehe zu Nummer"
i = Len(strMsg)
i = Val(InputBox(strMsg, "Suchen", 1))
Select Case i
Case 0 'abbrechen
Case 1 To iCount
Set ws = Worksheets(arrInfo(1, i))
ws.Activate
ws.Range(arrInfo(2, i)).Select
Case Else
MsgBox "unzilässige Zahl"
End Select
Else
MsgBox """" & Suchfeld & """ nicht gefunden"
End If
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige