Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1268to1272
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

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

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

Betreff
Benutzer
Anzeige
AW: Laufzeitfehler
20.06.2012 13: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 14: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
AW: Laufzeitfehler
20.06.2012 14:42:59
Heiko
Hallo somtime,
dann beschreib mal was du eigentlich vor hast.
Grüße
Heiko
AW: Laufzeitfehler
20.06.2012 15: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 15: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 15: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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige