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

VBA Range Find Laufzeitfehler

VBA Range Find Laufzeitfehler
16.09.2014 13:22:46
Zissy
Hallo,
ich schreibe gerade mein erstes Makro. Und bekomme eine Fehlermeldung einfach nicht weg.

Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt
Diese Meldung tritt im Bereich V. auf.
Tabelle 2: Liefert die Daten, zu jeder Kennung & Gruppe gibt es unterschiedliche Texte. je Text eine neue Zeile mit Kennung & Gruppe
Tabelle 1: Soll pro Zeile je eine kenning & Gruppe haben mit allen dazugehörigen Texten. Wobei jeder Text eine Spalte ist und immer nur entsprechend ein "ja" gesetzt warden soll, wenn vorhanden.
Habt ihr eine Idee wo mein Fehler ist?
Grüße, Zissy

Sub pruef()
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim Zei1 As Integer
Dim Zei2 As Integer
Dim ZeiAz As Integer
Dim SpalteNr As Integer
Dim ZeileNr As Integer
Set wks1 = Worksheets("Tabelle2")
Set wks2 = Worksheets("Tabelle1")
Zei1 = 1 ' Zeilenindex für wks1
Zei2 = 1 ' Zeilenindex für wks2
ZeiAz = wks2.Cells(1, Columns.Count).End(xlToLeft).Column ' Spaltenanzahl wks2
' I. Durchlaufe komplette Spalte
Do Until IsEmpty(wks1.Cells(Zei1, 3))
Zei1 = Zei1 + 1
' II. nur Gruppe1 betrachten
If InStr(wks1.Cells(Zei1, 7), "Gruppe1") > 0 Then
' III. wenn Kennung nicht vorhanden in wsk2
If Range(wks2.Cells(1, 1), wks2.Cells(Zei2, 1)).Find(wks1.Cells(Zei1, 3)) Is Nothing  _
_
Then
Zei2 = Zei2 + 1
' Kennung setzten in wks2 Spalte 1 schreiben
wks2.Cells(Zei2, 1).Value = wks1.Cells(Zei1, 3)
'  setzten in wks2 Spalte 2 schreiben
wks2.Cells(Zei2, 2).Value = wks1.Cells(Zei1, 6)
' setzten in wks2 Spalte 3 schreiben
wks2.Cells(Zei2, 3).Value = wks1.Cells(Zei1, 5)
' Gruppe setzten in wks2 Spalte 4 schreibens
wks2.Cells(Zei2, 4).Value = wks1.Cells(Zei1, 7)
' IV. Schreibe ja entsprechend, wenn/wo Text in Titel auftaucht
If Range(wks2.Cells(1, 5), wks2.Cells(1, ZeiAz)).Find(wks1.Cells(Zei1, 8),  _
LookIn:=xlValues) Is Nothing Then
Else
SpalteNr = wks2.Cells.Find(wks1.Cells(Zei1, 8).Value).Column
wks2.Cells(Zei2, SpalteNr).Value = "ja"
End If
' V. wenn Kennung bereits in wsk2 vorhanden - Schreibe ja entsprechend, wenn/wo  _
Text in Titel auftaucht
Else
SpalteNr = wks2.Range(wks2.Cells(1, 5), wks2.Cells(1, ZeiAz)).Find(wks1.Cells( _
Zei1, 8)).Column
ZeileNr = wks2.Range(wks2.Cells(1, 1), wks2.Cells(Zei2, 1)).Find(wks1.Cells(Zei1, 3)).Row
wks2.Cells(ZeileNr, SpalteNr).Value = "ja"
End If
End If
Loop
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Range Find Laufzeitfehler
16.09.2014 13:33:35
Rudi
Hallo,
das läuft natürlich in einen Fehler, wenn nix gefunden wird.
Also erst feststellen, ob was gefunden wird.
Set rFind=wks2.Range(wks2.Cells(1, 5), wks2.Cells(1, ZeiAz)).Find(wks1.Cells(Zei1, 8))
If Not Rfind is nothing then
SpalteNr=rFind.Column
End If

ZeileNr analog.
Außerdem solltest du der Find-Methode noch die Parameter LookIn und LookAt mitgeben.
Gruß
Rudi

AW: VBA Range Find Laufzeitfehler
16.09.2014 13:34:20
Daniel
Hi
der Fehler tritt auf, wenn die .FIND-Funktion nichts finden kann, denn von "nichts" kann man keine Zeilennummer oder Spaltennummer ermitteln (darum der Fehler)
um den Fehlerabbruch zu vermeiden, sollte man die Fundstellen derstmal in eine Range-Variable schreiben (hier verursacht das "nichts" noch keinen Fehler) und dann prüfen, ob die Variablen leer sind oder nicht:
für deinen Bereich V (Variablendeklaration bitte an den Anfang des Makros stellen):
Dim ZelleS As Rane
Dim ZelleR As Range
Set ZelleS = wks2.Range(wks2.Cells(1, 5), wks2.Cells(1, ZeiAz)).Find(wks1.Cells(Zei1, 8))
Set ZelleR = wks2.Range(wks2.Cells(1, 1), wks2.Cells(Zei2, 1)).Find(wks1.Cells(Zei1, 3))
If Not (ZelleS Is Nothing And ZelleR Is Nothing) Then
Intersect(ZelleS.EntireColumn, ZelleR.EntireRow).Value = "ja"
End If
Gruß Daniel

Anzeige
AW: VBA Range Find Laufzeitfehler
16.09.2014 14:08:05
Zissy
Hey, danke euch beiden für die schnelle Antwort
@Daniel der Code gibt mir dann auch wieder die gleiche Fehlermeldung aus
@Rudi der Code erfüllt seinen Job
Grüße, Zissy

AW: VBA Range Find Laufzeitfehler
16.09.2014 14:33:40
Daniel
Hi
du musst die Deklaration auch richtig Schreiben:
Dim ZelleS as Range
Hirn einschalten beim Abschreiben ist nicht verboten!
Tippfehler vermeidest du durch Nutzung der Intellisense, diese gibts hier im Forum nicht.
Gruß Daniel

AW: VBA Range Find Laufzeitfehler
16.09.2014 14:56:45
Zissy
Hi,
Die Deklaration habe ich schon berichtigt gehabt. Dennoch tauchte die Fehlermeldung wieder unten im Code auf...
Gruß Zissy

Anzeige
AW: VBA Range Find Laufzeitfehler
16.09.2014 15:25:10
Daniel
Hi
1. wie sieht dein Code aus?
2. in welcher Zeile taucht die Fehlermeldung auf?
3. wie lautet die Fehlermeldung?
4. welche Werte haben die Variablen, die in der Fehlerverursachenden Zeile verwendet werden?
Gruß Daniel

AW: VBA Range Find Laufzeitfehler
16.09.2014 15:47:06
Zissy
HI,

Sub pruef()
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim Zei1 As Integer
Dim Zei2 As Integer
Dim ZeiAz As Integer
Dim SpalteNr As Integer
Dim ZeileNr As Integer
Dim ZelleS As Range
Dim ZelleR As Range
Set wks1 = Worksheets("Tabelle2")
Set wks2 = Worksheets("Tabelle1")
Zei1 = 1 ' Zeilenindex für wks1
Zei2 = 1 ' Zeilenindex für wks2
ZeiAz = wks2.Cells(1, Columns.Count).End(xlToLeft).Column ' Spaltenanzahl wks2
' I. Durchlaufe komplette Spalte
Do Until IsEmpty(wks1.Cells(Zei1, 3))
Zei1 = Zei1 + 1
' II. nur Gruppe1 betrachten
If InStr(wks1.Cells(Zei1, 7), "Gruppe1") > 0 Then
' III. wenn Kennung nicht vorhanden in wsk2
If Range(wks2.Cells(1, 1), wks2.Cells(Zei2, 1)).Find(wks1.Cells(Zei1, 3)) Is Nothing  _
Then
Zei2 = Zei2 + 1
' Kennung setzten in wks2 Spalte 1 schreiben
wks2.Cells(Zei2, 1).Value = wks1.Cells(Zei1, 3)
'  setzten in wks2 Spalte 2 schreiben
wks2.Cells(Zei2, 2).Value = wks1.Cells(Zei1, 6)
' setzten in wks2 Spalte 3 schreiben
wks2.Cells(Zei2, 3).Value = wks1.Cells(Zei1, 5)
' Gruppe setzten in wks2 Spalte 4 schreibens
wks2.Cells(Zei2, 4).Value = wks1.Cells(Zei1, 7)
' IV. Schreibe ja entsprechend, wenn/wo Text in Titel auftaucht
If Range(wks2.Cells(1, 5), wks2.Cells(1, ZeiAz)).Find(wks1.Cells(Zei1, 8),  _
LookIn:=xlValues) Is Nothing Then
Else
SpalteNr = wks2.Cells.Find(wks1.Cells(Zei1, 8).Value).Column
wks2.Cells(Zei2, SpalteNr).Value = "ja"
End If
' V. wenn Kennung bereits in wsk2 vorhanden - Schreibe ja entsprechend, wenn/wo  _
Text in Titel auftaucht
Else
Set ZelleS = wks2.Range(wks2.Cells(1, 5), wks2.Cells(1, ZeiAz)).Find(wks1.Cells( _
Zei1, 8))
Set ZelleR = wks2.Range(wks2.Cells(1, 1), wks2.Cells(Zei2, 1)).Find(wks1.Cells( _
Zei1, 3))
If Not (ZelleS Is Nothing And ZelleR Is Nothing) Then
Intersect(ZelleS.EntireColumn, ZelleR.EntireRow).Value = "ja"
End If
End If
End If
Loop
End Sub
Fehlermeldung taucht bei "Intersect(ZelleS.EntireColumn, ZelleR.EntireRow).Value = "ja"" auf.
Sie lautet: Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt
Wie die Werte tatsächlich aussehen, weiß ich nicht, wollte die Variable ZelleS in einer Zelle ausgeben, bekomme dann aber auch wieder die oben benannte Fehlermeldung.

' wenn Kennung bereits in wsk2 vorhanden
Else
Set ZelleS = wks2.Range(wks2.Cells(1, 5), wks2.Cells(1, ZeiAz)).Find(wks1.Cells( _
Zei1, 8))
Set ZelleR = wks2.Range(wks2.Cells(1, 1), wks2.Cells(Zei2, 1)).Find(wks1.Cells( _
Zei1, 3))
If Not (ZelleS Is Nothing And ZelleR Is Nothing) Then
wks2.Cells(Zei2, 14).Value = ZelleS.Value
wks2.Cells(Zei2, 15).Value = ZelleR.Value
' Intersect(ZelleS.EntireColumn, ZelleR.EntireRow).Value = "ja"
End If
End If
Gruß, Zissy

Anzeige
AW: VBA Range Find Laufzeitfehler
16.09.2014 15:59:45
Daniel
Hi
mach mal aus dem AND ein OR
Gruß Daniel

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige