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

.find leerer Wert abfangen

.find leerer Wert abfangen
12.07.2016 10:28:30
Jörg
Hallo Leute, ich habe folgenden Code Scnipsel:
With Worksheets("Kreditoren").Range("b:b")
Set RngIndex = .Find(what:=strSpedName, LookIn:=xlValues) 'Blattname in Spalte suchen
intIndex = RngIndex.Row 'gefundene Zeile übernehmen
End With
Wenn jetzt in dem Worksheet Kreditoren der Wert nicht gefunden wird, fällt VBA mit einer fehlerhaften Objektvariablen zuweisung auf die NAse.
Ich bräuchte heirzu eine Fehlerbehandlung, damit VBA nicht auf Fehler läuft.
Mein Versuch:
If Not RngIndex.Row Is Nothing Then
MsgBox "leider nix gefunden"
End If
funktioniert leider nicht, da ja keine Zuweisung an RNGIndex erfolgt ist...
Wie kann ich hier vorgehen?
Vielen lieben Dank

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .find leerer Wert abfangen
12.07.2016 10:30:56
Hajo_Zi
if not RngIndex is Nothing then

AW: .find leerer Wert abfangen
12.07.2016 10:34:01
baschti007
SO ?
With Worksheets("Kreditoren").Range("b:b")
Set RngIndex = .Find(what:="X", LookIn:=xlValues) 'Blattname in Spalte suchen
If RngIndex Is Nothing Then Exit Sub Else intIndex = RngIndex.Row
End With

AW: .find leerer Wert abfangen
12.07.2016 10:35:39
Hajo_Zi
Exit Sub sollte vermieden werden, da dies ein Programmabbruch ist.
Gruß Hajo

AW: .find leerer Wert abfangen
12.07.2016 10:48:16
Jörg
Hallo Leute. Vielen Dank für Eure Hilfe.
Leider habe ich das, was ihr vorschlagt schon versucht.
Beim Einzelschitt Durchlauf komme ich noch an diese Stelle:
set RngIndex = .Find......
hier findet VBA in dem Worksheet nichts. Deshalb wird dem RngIndex = nothing zugewiesen.
Bei der If Abfrage
If rngIndex.Row is Nothing
kommt die Laufzeit 91 Fehlermeldung Objektvariable oder With-Blockvariable nicht festgelegt
und ich komme nicht weiter.
Ein Exit will ich vermeiden, da ich, wenn der Wert nicht gefunden wird, die benötigten Daten mit Hilfe von evtl. Inputboxen oder eines Forms bekommen möchte = Else Zweig.
Vielleicht gibt es noch weiter Ideen?
Vielen Dank

Anzeige
AW: .find leerer Wert abfangen
12.07.2016 10:52:04
Werner
Hallo Jörg,
With Worksheets("Kreditoren").Range("b:b")
Set RngIndex = .Find(what:=strSpedName, LookIn:=xlValues) 'Blattname in Spalte suchen
If Not RngIndex Is Nothing Then
MsgBox RngIndex.Row
Else: MsgBox "nix gefunden"
End If
End With

Gruß Werner

AW: .find leerer Wert abfangen
12.07.2016 10:52:44
Hajo_Zi
ich sehe es also richtig, mein Vorschlag hat Dir nicht gefallen, darum wurde er nicht eingesetzt.
Ich bin dann raus.
Gruß Hajo

AW: .find leerer Wert abfangen
12.07.2016 11:14:16
Jörg
Hi Hajo,
ich habe Deinen Vorschlag schon probiert. Leider bekomme ich bei allen bisherigen Vorschlägen (auch dem von Werner usw.) immer wieder die Laufzeit 91 Fehlermeldung.
Ich glaube, wenn set rngIndex ein nothing ist, dann mag VBA das nicht.
Vielleicht kann man das ganze ja auch anders lösen.
zur Erlärung:
Ich möchte in dem Worksheet "Kreditoren" in der Spalte (b:b) nach einem bestimmten Wert (in diesem Fall der Name) suchen.
Wenn dieser vorhanden ist, sollen verschiedene Zellen der gefundenen Row in Variablen geschrieben werden.
Wenn nichts (Wert kommt in dem Worksheet nicht vor) sollen die benötigten Werte via Eingabe vom User hinzugefügt werden.
Ich dachte, ich kann das mit .find machen, aber wie es aussieht hat VBA mit meiner Denkweise n Problem? ;-)

Anzeige
AW: .find leerer Wert abfangen
12.07.2016 11:19:28
Werner
Hallo Jörg,
das funktioniert schon so, ich habe es ja getestet. Vielleicht solltest du mal deinen ganzen Code posten. Vor allem auch interessant, wie du deine Variablen definiert hat. Es macht wenig Sinn hier nur ein Code-Schnipsel gezeigt zu bekommen.
Gruß Werner

AW: .find leerer Wert abfangen
12.07.2016 11:26:23
Jörg
Mach ich doch gern. Sorry Du hast Recht. Hier der Code:
Private Sub cmdNew_Click()
Dim strSpedName As String, LngLastRow As Long, intIndex As Integer, StrKredNr As String
Worksheets(1).Activate
LngLastRow = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row + 1 'Ergibt letzte Zeile in Ü _
bersicht
strSpedName = InputBox("Speditionsname eingeben:", "Neue Spedition")
If strSpedName = "" Then
Exit Sub
Else
With Worksheets("Kreditoren").Range("b:b")
Set RngIndex = .Find(what:=strSpedName, LookIn:=xlValues) 'Blattname in Spalte suchen
If Not RngIndex.Row Is Nothing Then             'Hier passiert der Fehler.!!!!!!!!!!!!
MsgBox "not leider nix gefunden"
Else
MsgBox "leider nix gefunden"     'gefundene Zeile übernehmen
'intIndex = RngIndex.Row
End If
End With
Worksheets(1).Unprotect
Worksheets(1).Range("b" & LngLastRow).Value = strSpedName
StrKredNr = Worksheets("Kreditoren").Range("A" & intIndex)
Worksheets(1).Range("a" & LngLastRow).Value = StrKredNr
Worksheets(1).Unprotect
Call WS_Copy(strSpedName)'Aufruf zum Kopieren des Blanko-Worksheets
End If
End Sub

Anzeige
AW: .find leerer Wert abfangen
12.07.2016 11:31:04
baschti007
Mach ma so

If RngIndex Is Nothing Then              'Hier passiert der Fehler.!!!!!!!!!!!!
MsgBox "not leider nix gefunden"

AW: .find leerer Wert abfangen
12.07.2016 11:45:55
Werner
Hallo Jörg,
Option Explicit
Private Sub cmdNew_Click()
Dim strSpedName As String
LngLastRow As Long
intIndex As Long
StrKredNr As String
dim RngIndex as Range
Worksheets(1).Activate
LngLastRow = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row + 1 'Ergibt letzte Zeile in Ü _
bersicht
strSpedName = InputBox("Speditionsname eingeben:", "Neue Spedition")
If strSpedName = "" Then
Exit Sub
Else
With Worksheets("Kreditoren").Range("b:b")
Set RngIndex = .Find(what:=strSpedName, LookIn:=xlValues) 'Blattname in Spalte suchen
If Not RngIndex Is Nothing Then             'Hier passiert der Fehler.!!!!!!!!!!!!
'### Hier dann der Code der ausgeführt werden soll, wenn der Begriff _
gefunden wurde ###
MsgBox "Suchbegriff in Zeile " & RngIndex.Row & " gefunden."
Else
MsgBox "leider nix gefunden"     'gefundene Zeile übernehmen
End If
End With
Worksheets(1).Unprotect
Worksheets(1).Range("b" & LngLastRow).Value = strSpedName
StrKredNr = Worksheets("Kreditoren").Range("A" & intIndex)
Worksheets(1).Range("a" & LngLastRow).Value = StrKredNr
Worksheets(1).Unprotect
Call WS_Copy(strSpedName)'Aufruf zum Kopieren des Blanko-Worksheets
End If
End Sub
Als erstes solltest du dir angewöhnen oberhalb (außerhalb) deiner Sub Option Explicit einzutragen. Dann wird dir nämlich sofort angemeckert, wenn du eine Variable nicht definiert/dimensioniert hast.
Dann wäre die sicherlich aufgefallen, dass deine Variable RngIndex nicht dimensioniert ist.
Zudem hast du in dieser Zeile ständig
If Not RngIndex.Row Is Nothing Then
das hat keiner geschrieben sondern das
If Not RngIndex Is Nothing Then
Getestet habe ich deinen Code jetzt aber nicht.
Gruß Werner

Anzeige
AW: .find leerer Wert abfangen
12.07.2016 12:18:12
Jörg
Ich bin zu doof zum lesen.
Vielen Dank. schon gehts. Ein riiiiesen Dnake an alle.

AW: Gerne u. Danke für die Rückmeldung. o.w.T
12.07.2016 13:35:19
Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige