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

Fehler zwischen Tabellenblätter

Fehler zwischen Tabellenblätter
21.01.2020 08:21:47
Tim
Hallo Liebe Exelaner,
ich habe ein Problem, dass ich leider nicht verstehe. Ich lasse folgendes Script laufen:
Sub Test()
For z = 1 To 3
For Each s In Array(Spalte01, Spalte02, Spalte03, Spalte04, Spalte05, Spalte06,  _
Spalte07)
With Worksheets("Matrix")
If .Cells(z, s).NumberFormat Like Suche Then
Set FindLeer = Range(Cells(1, s), Cells(3, s)).Find(What:="", LookIn:=xlValues,  _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
.Cells(z, s).Clear
.Range(Cells(z + 1, s), Cells(FindLeer.Row - 1, s)).Cut    '-> Fehler
Cells(z, s).Select
.Paste
End If
End With
Next s
Next z
End Sub

Wenn ich es vom entsprechenden Tabellenblatt aus laufen lasse, dann funktioniert alles einwandfrei. Wenn ich allerdings es von einem anderen Tabellenblatt aus laufen lasse kommt folgender Fehler in der markierten Zeile:
"Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler"
Wenn ich im Debugmodus allerdings das Script vom Tabellenblatt, welches nicht funktioniert, aus starten lasse und dann ins Tabellenblatt gehe in dem es funktioniert und Schritt für Schrit weitergehe kommt der Fehler nicht. Ich denke also es ist ein Bezugsfehler. Wenn ich bspw. nur Range (ohne Worksheet) nutze dann funktioniert es zwar, aber logischerweise macht er mir da quatsch.
Kann mir jemand helfen?

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler zwischen Tabellenblätter
21.01.2020 08:27:05
Torsten
Hallo Tim,
1. wenn du mit Option Explicit arbeiten wuerdest, wuesstest du schon einmal, dass man alle Variablen deklarieren sollte.
2. zu deinem Fehler: in der With Anweisung musst du vor jeden Range oder Cells den Punkt setzten, da ohne Punkt VBA immer auf das aktive Blatt referenziert.

Sub Test()
For Z = 1 To 3
For Each s In Array(Spalte01, Spalte02, Spalte03, Spalte04, Spalte05, Spalte06,  _
Spalte07)
With Worksheets("Matrix")
If .Cells(Z, s).NumberFormat Like Suche Then
Set FindLeer = .Range(.Cells(1, s), .Cells(3, s)).Find(What:="", LookIn:=xlValues,  _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
.Cells(Z, s).Clear
.Range(Cells(Z + 1, s), Cells(FindLeer.Row - 1, s)).Cut    '-> Fehler
.Cells(Z, s).Select
.Paste
End If
End With
Next s
Next Z
End Sub

Gruss Torsten
Anzeige
AW: Fehler zwischen Tabellenblätter
21.01.2020 08:28:15
Torsten
Hab sogar noch ein Cells verpasst:

Sub Test()
For Z = 1 To 3
For Each s In Array(Spalte01, Spalte02, Spalte03, Spalte04, Spalte05, Spalte06,  _
Spalte07)
With Worksheets("Matrix")
If .Cells(Z, s).NumberFormat Like Suche Then
Set FindLeer = .Range(.Cells(1, s), .Cells(3, s)).Find(What:="", LookIn:=xlValues,  _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
.Cells(Z, s).Clear
.Range(Cells(Z + 1, s), .Cells(FindLeer.Row - 1, s)).Cut    '-> Fehler
.Cells(Z, s).Select
.Paste
End If
End With
Next s
Next Z
End Sub

Anzeige
AW: Fehler zwischen Tabellenblätter
21.01.2020 08:46:07
Tim
Hallo Thorsten,
also erst einmal vielen lieben Dank für deine Antwort.
Ich benutze die Option Explicit Methode, allerdings habe ich dir nur einen Auszug aus meinem Code hochgeladen und deshalb die Dimensionierung der Parameter nicht mit aufgeschrieben. Tut mir Leid, hätte ich machen sollen.
Deine Tips sind auch sehr gut, habe ich direkt geändert. Der nächste Fehler tritt jetzt allerdings bei .Cells(z,s).Select auf:
Laufzeitfehler '1004': Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden.
Hast du noch einen schlauen Tipp für mich? =)
AW: Fehler zwischen Tabellenblätter
21.01.2020 08:54:43
Torsten
Select kannst du dir eh zu 99% sparen. Braucht man in fast allen Faellen nicht. Auch in deinem.
Dann benutze Copy anstatt Cut. Wenn du den kopierten Zellbereich loeschen moechtest, mach das in einem extra Befehl.
Frage: Findet das alles innerhalb des Blattes "Matrix" statt, oder soll das Paste in einem anderen Tabellenblatt passieren?
Wenn alles in "Matrix" dann so:

Sub Test()
For Z = 1 To 3
For Each s In Array(Spalte01, Spalte02, Spalte03, Spalte04, Spalte05, Spalte06, _
Spalte07)
With Worksheets("Matrix")
If .Cells(Z, s).NumberFormat Like Suche Then
Set FindLeer = .Range(.Cells(1, s), .Cells(3, s)).Find(What:="", LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
.Cells(Z, s).Clear
.Range(.Cells(Z + 1, s), .Cells(FindLeer.Row - 1, s)).Copy    '-> Fehler
.Cells(Z, s).Paste
Application.CutCopyMode = False
End If
End With
Next s
Next Z
End Sub

Wenn in ein anderes Tabellblatt kopiert wird, dann so:

Sub Test()
For Z = 1 To 3
For Each s In Array(Spalte01, Spalte02, Spalte03, Spalte04, Spalte05, Spalte06, _
Spalte07)
With Worksheets("Matrix")
If .Cells(Z, s).NumberFormat Like Suche Then
Set FindLeer = .Range(.Cells(1, s), .Cells(3, s)).Find(What:="", LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
Sheets("DieAndereTabelle").Cells(Z, s).Clear
.Range(.Cells(Z + 1, s), .Cells(FindLeer.Row - 1, s)).Copy    '-> Fehler
Sheets("DieAndereTabelle").Cells(Z, s).Paste
Application.CutCopyMode = False
End If
End With
Next s
Next Z
End Sub

Anzeige
AW: Fehler zwischen Tabellenblätter
21.01.2020 09:04:34
Tim
Danke, das Funktioniert super, es wird ins gleiche Tabellenblatt kopiert. Danke!
Bitte bitte,
21.01.2020 09:54:21
Torsten

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige