Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Laufzeitfehler

Forumthread: Laufzeitfehler

Laufzeitfehler
somtime
Hallo Leute,
meine Exceldatei arbeitet und arbeitet und bricht leider nicht ab bzw. zeigt keinen Fehler an.
Wisst ihr vielleicht woran es liegen könnte?

Private Sub CommandButton1_Click()
' Kategorien festlegen
Dim Suchbegriff1
Suchbegriff1 = TextBox1.Value
Dim Kategorie1
Kategorie = TextBox2.Value
'Zellbereich setzen in dem gesucht wird
Dim zelle As Range
Dim gefundeneZelle As Range
'Zeile Merken zum kopieren
Dim x
'definieren des Suchbereichs Spalte 3 ab Zeile2
For Each zelle In Range(Cells(2, 3), Cells(Range("C65536").End(xlUp).Row, 3))
'setzen der Suche
Set gefundeneZelle = Cells.Find(What:=Suchbegriff1, _
After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'WENN-SUCHE erfolgreich, dann kopiere Begriff
If Not gefundeneZelle Is Nothing Then
'Zuordnung der richtigen Zeile
gefundeneZelle.Activate
x = ActiveCell.Row
'DANN trägt die Kategorie ein
'Spalte Kategorie definiert auf 5 im Moment
Cells(x, 5) = Kategorie
'Falls nichts gefunden wird Fehlermeldung ausgeben
Else
MsgBox ("nichts gefunden")
'Beenden der Schleifen
Exit For
End If
Next zelle
'nach Ende der Suche alle Variablen zurücksetzen
End
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Laufzeitfehler
20.06.2012 15:55:12
Heiko
Hallo somtime,
ich hab's nicht getestet aber ich denke, dass dein Makro hier hängenbleibt:

'definieren des Suchbereichs Spalte 3 ab Zeile2
For Each zelle In Range(Cells(2, 3), Cells(Range("C65536").End(xlUp).Row, 3))
'setzen der Suche
Set gefundeneZelle = Cells.Find(What:=Suchbegriff1, _
After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Dur durchläufst einerseits jede Zelle im Bereich, andererseits rufst du mit bei jeder neuen Zelle deine .Find- Methode auf.
Versuch's mal so:

Set gefundeneZelle=Range(Cells(2, 3), Cells(Range("C65536").End(xlUp).Row, 3)).Find(xlWhat:= _
Suchbegriff1,LokkAt:=xlPart)
Die For...Each Schleife musst du dabei rausnehmen.
Grüße
Heiko
Anzeige
AW: Laufzeitfehler
20.06.2012 16:28:21
somtime
Hallo Heiko,
du hast recht das es etwas doppelt gemoppelt ist, aber ich habe nicht wirklich eine Idee wie ich es ändern könnte :(
Durch die for-Schleife stelle ich sicher das die Eintragung der Kategorie zwei Spalten weiter rechts für jede gefundene Zelle eingefügt wird.
Mit deiner Variante erfolgt die Eintragung nur in der ersten Zeile, die gefunden wurde oder ich mache etwas falsch.
Viele Grüße
Anzeige
AW: Laufzeitfehler
20.06.2012 16:42:59
Heiko
Hallo somtime,
dann beschreib mal was du eigentlich vor hast.
Grüße
Heiko
AW: Laufzeitfehler
20.06.2012 17:03:59
somtime
In Zelle C stehen ganze Sätze, welche inhaltlich Kategorien zugeordnet werden müssen.
Da diese Sätze ursprünglich aus Fragebögen stammen und ein paar hundert Zeilen verarbeitet und kategorisiert werden müssen - macht eine Stichwortsuche Sinn
D.h. in Zelle B3 steht beispielsweise "sehr gutes Sprachvermögen"
es soll nach dem Suchwort "Sprachvermögen" gesucht werden
und in Zelle D3 soll dann die Kategorie "SoftSkill" erscheinen
Dadurch das es so viele Daten sind, ist es sinnvoll das einmal bis ans Ende der Spalte durchlaufen zu lassen und nicht nach dem ersten Ergebnis zu beenden, sondern automatisch neben jeder entsprechenden Zeile die Kategorie einzufügen
Vielen lieben Dank schon mal für die Hilfe
Anzeige
AW: Laufzeitfehler
20.06.2012 17:52:53
Heiko
Dann so.

Function Kategorie(suchtext As String) As String
Dim arrSuchtext(5) As String
Dim arrSuchwort(99) As String
Const SUCHWORTLISTE As String="Sprachvermögen=SoftSkills, Alkohol=Entzug, Drogen=Ungesund"
arrSuchtext=Split(suchtext,Chr(32))
arrSuchwort=Split(SUCHWORTLISTE,",")
For i= 0 To UBound(arrSuchtext)
For j= 1 To UBound(arrSuchwort)
If Instr(1,arrSuchtext(i),arrSuchwort(j))> 0 Then
Kategorie=Mid$(arrSuchwort(j),Instr(1,arrSuchwort(j),"=")+1)
Exit For
End If
Next j
Next i
End Function
Anwendung: In die Zielzelle (D3) als Formel "=Kategorie(B3)"
Das obige ist blind geschrieben. Daher bitte auf eigene Faust testen.
Grüße
Heiko
Anzeige
AW: Laufzeitfehler
20.06.2012 17:14:15
Luschi
Hallo somtime,
mit Cells.Find(...) findet Vba immer nur den 1. Wert im Suchbereich. Wenn also der Suchwert in einer Zelle das 1. mal gefunden wurde, dann wird durch die For-Next-Schleife immer wieder diese Zelle gefunden und die Endlosschleife ist aktiv.
Mit FindNext kann man die nächste Zelle im Suchbereich mit dem gleichen Wert finden.
Dazu gibt es ein passendes Beispiel in der Vba-Hilfe.
Gruß von Luschi
aus klein-Paris
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18