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

unerklärliche Fehlermeldung

unerklärliche Fehlermeldung
Gregor
Hallo zusammen
Ich habe folgenden Code "gebastelt":
Sub Filtern_Linien_No()
Tabellenblatt = usrFiltern_Tabelle.cboTabellenblatt_Linien_No.Value
Spalte_Nutzlänge = Worksheets(Tabellenblatt).Rows(1).Find("Perronnutzlänge", LookAt:=xlWhole). _
Column
Spalte_Linie_No = Worksheets(Tabellenblatt).Rows(1).Find("Linie-No", LookAt:=xlWhole).Column
intLastColumn = Worksheets(Tabellenblatt).Cells(1, Columns.Count).End(xlToLeft).Column
intLastRow = Worksheets(Tabellenblatt).Cells(Rows.Count, Spalte_Nutzlänge).End(xlUp).Row
Linie_No = usrFiltern_Tabelle.cboLinien_No.Value
Unload usrFiltern_Tabelle
usrMaster_Warten.Show
Application.Wait (Now + TimeValue("00:00:01"))
GetMoreSpeed True
With Worksheets(Tabellenblatt)
Set rng = .Columns(Spalte_Linie_No).Find(Linie_No, LookIn:=xlValues, LookAt:=xlWhole)
If Not rng Is Nothing Then
firstAddress = rng.Address
Zeile = rng.Row
ZeileEnd = IIf(IsEmpty(.Cells(Zeile + 1, 1)), IIf(IsEmpty(.Cells(.Cells(Zeile, 1).End( _
xlDown).Row - 1, Spalte_Nutzlänge)), .Cells(.Cells(Zeile, 1).End(xlDown).Row, Spalte_Nutzlänge).End(xlUp).Row, .Cells(Zeile, 1).End(xlDown).Row - 1), Zeile)
'--- bestimmt letzte Zeile Tabelle zum Einfügen
intLastRowPaste = Worksheets(2).Cells(Rows.Count, Spalte_Nutzlänge).End(xlUp).Row + 1
'--- Kopierbereich
Set Kopieren = .Range(.Cells(Zeile, 1), .Cells(ZeileEnd, intLastColumn))
'--- Zielbereich
Set Ziel = Worksheets(2).Cells(intLastRowPaste, 1)
Kopieren.Copy Ziel
Do
Set rng = .Columns(Spalte_Linie_No).FindNext(rng)
Zeile = rng.Row
If rng.Address = firstAddress Then Exit Do
ZeileEnd = IIf(IsEmpty(.Cells(Zeile + 1, 1)), IIf(IsEmpty(.Cells(.Cells(Zeile, 1). _
End(xlDown).Row - 1, Spalte_Nutzlänge)), .Cells(.Cells(Zeile, 1).End(xlDown).Row, Spalte_Nutzlänge).End(xlUp).Row, .Cells(Zeile, 1).End(xlDown).Row - 1), Zeile)
'--- bestimmt letzte Zeile Tabelle zum Einfügen
intLastRowPaste = Worksheets(2).Cells(Rows.Count, Spalte_Nutzlänge).End(xlUp).Row +  _
1
'--- Kopierbereich
Set Kopieren = .Range(.Cells(Zeile, 1), .Cells(ZeileEnd, intLastColumn))
'--- Zielbereich
Set Ziel = Worksheets(2).Cells(intLastRowPaste, 1)
Kopieren.Copy Ziel
Loop
End If
End With
End Sub
Beim der 1. Ausführung des Codes findet es nichts, dh. das 1. rng ist Nothing und geht zu End if und bei jeder weiteren Ausführung wird bei "Spalte_Linie_No" die Fehlermeldung "Objektvariable oder With-Blockvariable nicht festgelegt" erzeugt. Der Variable habe ich mit Public das Format Byte zugewiesen. Ich vermute dass die Find-Methode "With Workscheets(Tabellenblatt) ...... Probleme bereitet, weil ähnliche Code ohne diese Find-Methode funktionieren. Ich weiss aber nicht, was dieses Verhalten auslöst. Vermutlich gibt es für einen Excel-Spezialisten eine Erklärung. Was ist hier unlogisch?
Vielen Dank
Gregor

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Zu Trocken : Bitte betreffende Mappe hochladen
20.05.2010 10:09:05
NoNet
Hallo Gregor,
alleine anhand des Codes ist das Thema wohl zu "trocken", um es zu lösen.
Feucht-fröhlicher wäre es, wenn Du uns auch das betreffende Tabellenblatt zur Verfügung stellen würdest, damit man das Problem am "lebenden Objekt" analysieren kann.... ;-)
Lade die Mappe / das Blatt doch bitte als Anhang hoch und poste den Link zur Mappe - Danke.
Gruß, NoNet
AW: Zu Trocken : Bitte betreffende Mappe hochladen
20.05.2010 12:36:59
Gregor
Hallo
Die Mappe ist zu gross oder zu komplex um für das Hochladen zu vereinfachen, deshalb habe ich den Code vereinfacht (ohne Variablen). Das Problem muss beim Set rng liegen, offenbar muss ich die Columns(10) beim Wiht Worksheets("Test2") einfügen, dann läufts problemlos:
Sub Test()
With Worksheets("Test2").Columns(10)
Set rng = .Find(150, LookIn:=xlValues, LookAt:=xlWhole)
If Not rng Is Nothing Then
firstAddress = rng.Address
Zeile = rng.Row
With Worksheets("Test2")
ZeileEnd = Zeile + 5
intLastRowPaste = Worksheets("Test1").Cells(Rows.Count, 17).End(xlUp).Row + 1
Set Kopieren = .Range(.Cells(Zeile, 1), .Cells(ZeileEnd, 83))
Set Ziel = Worksheets("Test1").Cells(intLastRowPaste, 1)
Kopieren.Copy Ziel
End With
Do
Set rng = .FindNext(rng)
Zeile = rng.Row
If rng.Address = firstAddress Then Exit Do
With Worksheets("Test2")
ZeileEnd = Zeile + 5
intLastRowPaste = Worksheets("Test1").Cells(Rows.Count, 17).End(xlUp).Row + 1
Set Kopieren = .Range(.Cells(Zeile, 1), .Cells(ZeileEnd, 83))
Set Ziel = Worksheets("Test1").Cells(intLastRowPaste, 1)
Kopieren.Copy Ziel
End With
Loop
End If
End With
End Sub

In meinem Beispiel habe/musste ich die Funktion With Worksheets("Test2") schliessen und neu setzten, offenbar wegen der FindNext-Methode. Kann ich den Code einfacher schreiben? Ich benötige diesen für viele andere Abfragen.
Gruss Gregor
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige