Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
328to332
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
328to332
328to332
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Suchfunktion über rng.find() aufbauen

Suchfunktion über rng.find() aufbauen
29.10.2003 21:44:56
Christian
Hi Leute,

ich probiere gerade, mir eine Funktion zu basteln, die nach dem vorkommen eines bestimmten Zeichens in einer frei zu wählenden Tabelle und Spalte sucht und bei einem Treffer die Zelladresse zurückgibt.

Soweit so gut. Das Problem ist nur, ich krieg das ganze nur über eine Subroutine hin, nicht aber in eine Funktion. Der Code anbei:


Sub directSearch(Sheetname As String, searchText As String, searchcol As Integer)
Dim searchRange, matchCell As Range
Dim s As String
Set searchRange = ThisWorkbook.Worksheets(Sheetname).Columns(searchcol)
searchRange.Activate
Set matchCell = Selection.Find(What:=searchText, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If matchCell Is Nothing Then
MsgBox "#NO MATCH"
Else
MsgBox "Found search pattern: " + CStr(searchText) + " in cell: " + _
CStr(matchCell.Address(False, False))
End If
End Sub


Hat jemand eine Idee, ob und wie ich das ganze in einer Funktion realisieren kann?

Danke im Voraus
Christian

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchfunktion über rng.find() aufbauen
29.10.2003 22:21:37
Reinhard
Hi Christian,
das Folgende klappt über

Sub test(), als Tabellenfunktion aber noch nicht getestet.
Gruß
Reinhard

Sub test()
MsgBox directSearch2("Tabelle1", "Huhu", "2")
End Sub



Function directSearch2(Sheetname As String, searchText As String, searchcol As Integer) As String
Dim searchRange, matchCell As Range
Dim s As String
Set searchRange = ThisWorkbook.Worksheets(Sheetname).Columns(searchcol)
Set matchCell = searchRange.Find(What:=searchText, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If matchCell Is Nothing Then
directSearch2 = "#NO MATCH"
Else
directSearch2 = "Found search pattern: " + CStr(searchText) + " in cell: " + _
CStr(matchCell.Address(False, False))
End If
End Function

Anzeige
noch teilw. offen
29.10.2003 22:59:39
Reinhard
Hallo,
bei Aufruf durch die

Sub test() läuft es problemlos, findet sogar xHuhux.
Aber bei Aufruf als Tabellen

Function durch =directSearch2("Tabelle1";"Huhu";"2") ergab es #WERT brach ohne Fehlermeldung?? an der Stelle
Set Matchcase=...
ab. (Cursor als Strich stand vor der Zeile, aber keine Fehlermeldung)
Nachdem ich aus dem
Set Matchcase=...
das After:=ActiveCell,
entfernt habe, lief es immerhin problemlos durch, aber fand nichts mehr.(#NO MATCH)
Frage1: kommen bei Funktionen keine Fehlermeldungen?
Frage2: warum wird nichts gefunden bei nachfolgendem Code?
Gruß
Reinhard
Aufruf durch =directSearch2("Tabelle1";"Huhu";"2") '"2" oder 2 ist egal

Function directSearch2(Sheetname As String, searchText As String, searchcol As Integer) As String
Dim searchRange, matchCell As Range
Dim s As String
Set searchRange = ThisWorkbook.Worksheets(Sheetname).Columns(searchcol)
'Set matchCell = searchRange.Find(What:=searchText,
' LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
'SearchDirection:=xlNext, MatchCase:=False)
Set matchCell = searchRange.Find(searchText)
If matchCell Is Nothing Then
directSearch2 = "#NO MATCH"
Else
directSearch2 = "Found search pattern: " + CStr(searchText) + " in cell: " + _
CStr(matchCell.Address(False, False))
End If
End Function



Anzeige
AW: noch teilw. offen
30.10.2003 11:01:06
Christian
Hi Rainer,

hmm, genau an dem Problem bin ich auch gescheitert. Kann es sein, dass es generell nicht möglich ist, aus einer Funktion heraus einen Bereich auf einem Tabellenblatt zu markieren? Ich denke, dass der Bereich für die Suchoption markiert sein muss, was im obigen Beispiel nicht der Fall ist.
Liege ich da richtig??

Gruss Christian
AW: noch teilw. offen
30.10.2003 11:08:22
Christian
Meine Vermutung aus dem vorigen threat scheint sich zu bestätigen. Beim Versuch den gesetzten Bereich zu aktivieren, wird ein Laufzeitfehler erzeugt. Der Versuchfall nachfolgend:


Function directSearch2(Sheetname As String, searchText As String, searchcol As Integer) As String
Dim searchRange, matchCell As Range
Dim s As String
Set searchRange = ThisWorkbook.Worksheets(Sheetname).Columns(searchcol)
On Error GoTo errHandler
searchRange.Activate
Set matchCell = searchRange.Find(What:=searchText, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If matchCell Is Nothing Then
directSearch2 = "#NO MATCH"
Else
directSearch2 = "Found search pattern: " + CStr(searchText) + " in cell: " + _
CStr(matchCell.Address(False, False))
End If
Exit Function
errHandler:
MsgBox "Error"
End Function


FRAGE:
Ist es möglich, die Suchfunktion von Excel zu benutzen (range.find) ohne vorher einen Bereich selektiert zu haben???

Bin für jeden Hinweis dankbar
Christian
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige