Anzeige
Archiv - Navigation
836to840
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
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wenn Var nicht existiert -> Abbruch! -> wie?

Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 09:04:43
Thomas
Hallo,
mit "Zeile = quelle.Cells.Find(What:=Such, After:=Cells(1)).Row" lese ich aus einer andren Tabelle ein paar Werte aus. Wenn jetzt aber keine Zeile mit dem Suchbegriff (dem Namen) existiert gibt er mir immer wieder den Fehler "Objektvariable oder With-Blockvariable nicht festgelegt". Ich suche nach irgendeiner Möglich zu überprüfen ob "quelle.Cells.Find(What:=Such, After:=Cells(1)).Row" einen Wert hat oder eben nicht, so dass ich dann das Makro (oder VBA Script) mittels "Exit Sub" abbrechen kann, damit diese Fehlermeldung nicht andauernd aufpoppt.
Vielen Dank schonmal
Lg
Thomas

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

Betreff
Datum
Anwender
Anzeige
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 09:53:35
haw
Hallo Thomas,
das Beispiel aus der Hilfe:

Sub Finden()
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub

Gruß Heinz
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 11:35:07
Thomas
Hallo Heinz,
das Problem ist, dass wenn ich dieses "If Not x Is Nothing Then" benutze, kommt es ja hinter "Zeile = ..." Nur der Error kommt ja schon bei dieser Zeile, wodurch das Programm alles folgende gar nicht mehr aufruft und mit einem Error abbricht.
Gruß Thomas
Anzeige
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 12:09:32
haw
Hallo Thomas,
aber das funktioniert ja genauso, wie du es möchtest:
Wenn der Suchbegriff nicht gefunden wird, wird der Variablen c (hier im Beispiel) der Wert Nothing zugewiesen und mit der darauffolgenden Abfrage (If Not c Is Nothing) ausgewertet.
Daher kannst du nicht der Variablen Zeile die ...Row zuweisen, sondern den Bereich:
Set c = quelle.Cells.Find(What:=Such, After:=Cells(1))
If Not c Is Nothing Then
Zeile = c.row
....
End If usw
Gruß Heinz
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 12:25:22
Thomas
Hm okay, hätte bestimmt geklappt, habs jetzt allerdings mit dem On Error gelöst. Trotzdem vielen Dank!
Aber eine weitere Frage hätte ich noch:
Wenn ich in mein Suchfeld einen Namen eingebe und dieser nicht vollständig ist, findet er trotzdem Daten und gibt sie aus. Ich wollte das dann so machen, dass der Name automatisch vervollständigt wird:
Range("A8") = quelle.Cells(Zeile, 1)
Allerdings erkennt das Programm das wieder als eine Änderung von A8 und läuft automatisch nochmal durch, was zu einer endlosschleife führt...
Wie könnte ich das umgehen?
LG
Anzeige
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 09:54:48
otto
Hi,
versuchs erst mal mit:
On Error Resume Next
da wird die nächste ausführbare Anweisung ausgeführt.
Ansonsten musst du eine Sprungmarke setzen:
On Error GoTo weiter
..dein Suchcode...
weiter:
..das was es bei Auftritt des Fehlers machen soll...
Gruß
otto
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 11:33:02
Thomas
Geht da auch sowas wie
On Error
Range("B10") = "Nicht vorhanden"
Sub Exit
Also, dass wenn er nix findet, in eine Spalte Nicht vorhanden schreibt und dann alles abbricht.
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 12:06:50
Thomas
Okay habs jetzt herausgefunden mit On Error GoTo einfach zum Ende springen! Klappt! Danke für die Hilfe.
Aber eine weitere Frage hätte ich noch:
Wenn ich in mein Suchfeld einen Namen eingebe und dieser nicht vollständig ist, findet er trotzdem Daten und gibt sie aus. Ich wollte das dann so machen, dass der Name automatisch vervollständigt wird:
Range("A8") = quelle.Cells(Zeile, 1)
Allerdings erkennt das Programm das wieder als eine Änderung von A8 und läuft automatisch nochmal durch, was zu einer endlosschleife führt...
Wie könnte ich das umgehen?
lg
Anzeige
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 13:15:12
mb
Hallo Thomas,
1) Bleibe doch im alten Thread, sonnst kann man die Diskussion um Dein Problem gar nicht mehr nachvollziehen. Im alten Thread habe ich auch die Lösung für die Automatisierung gepostet, hast Du die gesehen?
2) Poste immer Deinen kompletten Code, sonst artet das hier zum Rätselspiel aus.
3) Was willst Du erreichen? Wenn in A8 z.B. "Sch" eingegeben wird und in der Datenbank "Schneider" und "Schulze" vorkommen, wird der erste gefundene Eintrag genommen, der in der Liste steht. Wie willst Du nun automatisch vervollständigen? Woher soll das Makro wissen, ob "Schneider" oder "Schulze" gewünscht wäre.
Eine Möglichkeit ist, nach der Übereinstimmung der gesamtem Zellen zu suchen. Dann musst Du
Zeile = quelle.Cells.Find(What:=Such, After:=Cells(1)).Row
durch
Zeile = quelle.Cells.Find(What:=Such, After:=Cells(1), LookAt:=xlWhole).Row
ersetzen.
Gruß
Martin
Anzeige
AW: Wenn Var nicht existiert -> Abbruch! -> wie?
23.01.2007 13:54:45
Thomas
Hallo Martin,
du hast Recht, was das automatische vervollständigen betrifft. Die Automatisierung hab ich heute morgen schon alleine hinbekommen :-) Allerdings schau ich mir deine Lösung auch mal an, hier meine:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A8:D8")) Is Nothing Then
Berechtigungen
End If
End Sub

Sub Berechtigungen()
Set quelle = Worksheets("Datenbank").Range("A1:AS19")
Set Such = Worksheets("Sicherheitsstufe").Range("A8")
Worksheets("Sicherheitsstufe").Range("A10:E26").ClearContents
x = 0
LSp = quelle.Cells(quelle.Cells.Count).Column
Range("E8") = "Nicht"
Range("F8") = "vorhanden"
On Error GoTo IsNich
Zeile = quelle.Cells.Find(What:=Such, After:=Cells(1), LookAt:=xlWhole).Row
Range("E8") = quelle.Cells(Zeile, 2)
Range("F8") = quelle.Cells(Zeile, 4)
For i = 4 To LSp
If quelle.Cells(Zeile, i) = "x" Then
Range("B10").Offset(x, 0) = quelle.Cells(3, i)
Range("A10").Offset(x, 0) = x + 1
x = x + 1
End If
Next i
IsNich:
End Sub
Anzeige
Ist denn jetzt noch eine Frage offen? (oT)
23.01.2007 14:32:56
mb
AW: Ist denn jetzt noch eine Frage offen? (oT)
24.01.2007 07:11:02
Thomas
Hi Martin,
nein, eigentlich nicht. Funktioniert jetzt soweit alles wie ich es mir vorgestellt habe!
Vielen Dank!
Thomas
AW: Ist denn jetzt noch eine Frage offen? (oT)
24.01.2007 14:20:05
Thomas
Hallo, es ist doch noch eine Frage offen. Ich habe jetzt ein weiteres Tabellenblatt an den Anfang gepackt, in dem ich den Namen eingeben lasse. Und in der Prüfliste habe ich jetzt einfach so eine verknüfung für den inhalt angelegt. Das script funktioniert nach wie vor, allerdings nicht die automatik. Heisst wenn ich im blatt Name den namen eingebe und enter klicke aktualisiert er nicht die prüfliste.
Hier der Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B7")) Is Nothing Then
Berechtigungen
End If
End Sub

Sub Berechtigungen()
Set quelle = Worksheets("Datenbank").Range("A1:AS19")
Set Such = Worksheets("Name").Range("B7")
Worksheets("Sicherheitsstufe").Range("A10:E26").ClearContents
x = 0
LSp = quelle.Cells(quelle.Cells.Count).Column
Worksheets("Sicherheitsstufe").Range("E8") = "Nicht"
Worksheets("Sicherheitsstufe").Range("F8") = "vorhanden"
On Error GoTo IsNich
Zeile = quelle.Cells.Find(What:=Such, After:=Cells(1), LookAt:=xlWhole).Row
Worksheets("Sicherheitsstufe").Range("E8") = quelle.Cells(Zeile, 2)
Worksheets("Sicherheitsstufe").Range("F8") = quelle.Cells(Zeile, 4)
For i = 4 To LSp
If quelle.Cells(Zeile, i) = "x" Then
Worksheets("Sicherheitsstufe").Range("B10").Offset(x, 0) = quelle.Cells(3, i)
Worksheets("Sicherheitsstufe").Range("A10").Offset(x, 0) = x + 1
x = x + 1
End If
Next i
IsNich:
End Sub
Anzeige
AW: Ereignisprozedur
24.01.2007 16:34:38
mpb
Hallo Thomas,
die Ereignisprozedur

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B7")) Is Nothing Then
Berechtigungen
End If
End Sub

funktioniert nur für das Tabellenblatt, dem sie "zugewiesen" wurde. Also Rechtsklick auf den Tabellenreiter "Namen", Option "Code anzeigen" auswählen und Code reinkopieren.
Gruß
Martin

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige