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

Laufzeitfehler 1004

Laufzeitfehler 1004
29.06.2020 13:37:29
and2handles
Moin Leute,
ich habe mir nen VBA Code zusammengebastelt und kopiert der eigentlich sehr gut funktioniert und ich habe ihn mit weiteren Funktionen erweitert.
Leider funktioniert der folgende Part nicht:
Sheets("AlleDaten").Select
Columns("A:A").Select
Range("A200").Activate
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
Wenn ich den Code einzeln laufen lasse funktioniert er einwandfrei aber wenn ich ihn mit dem restlichen Code laufen lasse bekomme ich einen Laufzeitfehler 1004. Hat jemand eine Ahnung woran das liegen kann?
Unten der Gesamtcode.
'Fügt Datenblätter zusammen
Sub AlleDaten()
' Einfügen erste Zelle table1
Sheets("page 1").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "Schlag/Zyklus"
Selection.AutoFill Destination:=Range("A1:G1"), Type:=xlFillDefault
Range("A1:G1").Select
'Es werden die Daten aller Tabellenblätter innerhalb einer Datei auf einem neuen Tabellenblatt gelistet.
'Die Tabellenblätter haben eine Überschrift in Zeile 1 ab A1, die Daten stehen ab Zeile 2
'Die Tabellenblätter haben einen identischen Aufbau ( Anzahl Spalten ). Die Anzahl der Zeilen spielt keine Rolle.
'Ein Tabellenblatt mit dem Namen "AlleDaten" wird, wenn nicht bereits vorhanden, ganz links erstellt.
Dim wks As Worksheet 'Tabelle AlleDaten
Dim intSh As Integer 'Zähler für Tabelle1 bis TabelleX
Dim intLastS As Integer 'Letzte benutzte Spalte in den Tabellen
Dim bln As Boolean
'Prüfung ob Blatt "AlleDaten" bereits vorhanden ist.
For intSh = 1 To ActiveWorkbook.Worksheets.Count
If Worksheets(intSh).Name = "AlleDaten" Then
Set wks = Worksheets("AlleDaten")
bln = True
Exit For
End If
Next
'Falls nicht vorhanden dann erstellen
If bln = False Then
Set wks = Worksheets.Add
wks.Name = "AlleDaten"
End If
'Blatt AlleDaten nach links schieben
wks.Move Before:=Sheets(1)
'Daten auf Blatt "AlleDaten" löschen und die Überschrift aus Tabelle1 holen
'Anzahl der Spalten zählen. Gilt dann für alle Blätter da Aufbau identisch sein muss
wks.Cells.ClearContents
Worksheets(2).Rows(1).Copy Destination:=wks.Range("A1")
intLastS = wks.Cells(1, Columns.Count).End(xlToLeft).Column
'Daten aus allen Tabellen nach Tabelle "AlleDaten" übertragen
For intSh = 2 To ActiveWorkbook.Worksheets.Count
With Worksheets(intSh)
'Zellübertragung
.Range(.Cells(8, 1), .Cells(fncLastRow(intSh, intLastS), intLastS)).Copy
wks.Cells(wks.UsedRange.Rows.Count, 1).Offset(1, 0).PasteSpecial Paste:=xlValues
End With
Next
Application.CutCopyMode = False
'bereinigt pseude-leere Zellen im aktiven Tabellenblatt
Dim Zelle As Range, StatusCalc As Long
If ActiveSheet.Type = xlWorksheet Then
With Application
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
For Each Zelle In ActiveSheet.UsedRange.Cells
If Not Zelle.HasFormula Then
If Not IsEmpty(Zelle) And Zelle.Value = "" Then
Zelle.ClearContents
End If
End If
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
End If
Sheets("AlleDaten").Select
Columns("A:A").Select
Range("A200").Activate
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
End Sub

Public Function fncLastRow(ByVal intSh As Integer, intLastS As Integer) As Long
Dim intS As Integer
With Worksheets(intSh)
For intS = 1 To intLastS
If .Cells(Rows.Count, intS).End(xlUp).Row > fncLastRow Then
fncLastRow = .Cells(Rows.Count, intS).End(xlUp).Row
End If
Next
End With
End Function

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004
29.06.2020 14:44:47
Werner
Hallo,
und wie bitte lautet denn die Fehlerbeschreibung?
Noch was:
Wenn du hier Code einstellst, dann benutze dazu bitte die "Code Tags". Bei deiner Function hast du das doch auch gemacht.
Da bleibt dann die Code-Formatierung erhalten.
Gruß Werner
AW: Laufzeitfehler 1004
29.06.2020 15:02:17
and2handles
Hallo Werner, entschuldigung aber ich hatte die Code-Stylierung bei der Eingabe nicht finden können. Bei der Function wurde dies von der Seite automatisch erkannt. Der Fehler ist: Laufzeitfehler '1004' Anwendungs- oder objektdefinierter Fehler
Hier nochmal der Code:

'Fügt Datenblätter zusammen
Sub AlleDaten()
' Einfügen erste Zelle table1
Sheets("page 1").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "Schlag/Zyklus"
Selection.AutoFill Destination:=Range("A1:G1"), Type:=xlFillDefault
Range("A1:G1").Select
'Es werden die Daten aller Tabellenblätter innerhalb einer Datei auf einem neuen Tabellenblatt  _
gelistet.
'Die Tabellenblätter haben eine Überschrift in Zeile 1 ab A1, die Daten stehen ab Zeile 2
'Die Tabellenblätter haben einen identischen Aufbau ( Anzahl Spalten ). Die Anzahl der Zeilen  _
spielt keine Rolle.
'Ein Tabellenblatt mit dem Namen "AlleDaten" wird, wenn nicht bereits vorhanden, ganz links  _
erstellt.
Dim wks As Worksheet      'Tabelle AlleDaten
Dim intSh As Integer      'Zähler für Tabelle1 bis TabelleX
Dim intLastS As Integer   'Letzte benutzte Spalte in den Tabellen
Dim bln As Boolean
'Prüfung ob Blatt "AlleDaten" bereits vorhanden ist.
For intSh = 1 To ActiveWorkbook.Worksheets.Count
If Worksheets(intSh).Name = "AlleDaten" Then
Set wks = Worksheets("AlleDaten")
bln = True
Exit For
End If
Next
'Falls nicht vorhanden dann erstellen
If bln = False Then
Set wks = Worksheets.Add
wks.Name = "AlleDaten"
End If
'Blatt AlleDaten nach links schieben
wks.Move Before:=Sheets(1)
'Daten auf Blatt "AlleDaten" löschen und die Überschrift aus Tabelle1 holen
'Anzahl der Spalten zählen. Gilt dann für alle Blätter da Aufbau identisch sein muss
wks.Cells.ClearContents
Worksheets(2).Rows(1).Copy Destination:=wks.Range("A1")
intLastS = wks.Cells(1, Columns.Count).End(xlToLeft).Column
'Daten aus allen Tabellen nach Tabelle "AlleDaten" übertragen
For intSh = 2 To ActiveWorkbook.Worksheets.Count
With Worksheets(intSh)
'Zellübertragung
.Range(.Cells(8, 1), .Cells(fncLastRow(intSh, intLastS), intLastS)).Copy
wks.Cells(wks.UsedRange.Rows.Count, 1).Offset(1, 0).PasteSpecial Paste:=xlValues
End With
Next
Application.CutCopyMode = False
'bereinigt pseude-leere Zellen im aktiven Tabellenblatt
Dim Zelle As Range, StatusCalc As Long
If ActiveSheet.Type = xlWorksheet Then
With Application
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
For Each Zelle In ActiveSheet.UsedRange.Cells
If Not Zelle.HasFormula Then
If Not IsEmpty(Zelle) And Zelle.Value = "" Then
Zelle.ClearContents
End If
End If
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
End If
Sheets("AlleDaten").Select
Columns("A:A").Select
Range("A200").Activate
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
End Sub
Public Function fncLastRow(ByVal intSh As Integer, intLastS As Integer) As Long
Dim intS As Integer
With Worksheets(intSh)
For intS = 1 To intLastS
If .Cells(Rows.Count, intS).End(xlUp).Row > fncLastRow Then
fncLastRow = .Cells(Rows.Count, intS).End(xlUp).Row
End If
Next
End With
End Function
Mit dem Problem-Part:
Sheets("AlleDaten").Select
Columns("A:A").Select
Range("A200").Activate
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"

Anzeige
AW: Laufzeitfehler 1004
29.06.2020 17:03:37
Werner
Hallo,
mir ist da noch so einiges unklar:
Beschreib doch mal was der Code machen soll. So wie ich das sehe, willst du die Daten von allen Blättern ins Blatt "AlleDaten" übertragen.
Offensichtlich wohl von A8 bis letzte belegte Zeile / letzte belegte Spalte
Was ist aber mit dem Blatt "page 1" ?
Am besten wäre es, wenn du mal eine Datei hier einstellst mit ein zwei Blättern aus denen die Daten kopiert werden sollen. Dort ein paar Beispieldaten rein. Wichtig ist, dass der Tabelleaufbau exakt deinem Original entspricht.
Und auf welchem Blatt soll das hier passieren?
For Each Zelle In ActiveSheet.UsedRange.Cells
If Not Zelle.HasFormula Then
Gruß Werner
Anzeige
AW: Laufzeitfehler 1004
30.06.2020 08:19:25
and2handles
Moin Werner,
zur Erklärung des Codes:
1.Als erstes kopiert er in page 1 in der ersten Zeile von A1:G1 Text der dem weiteren Code signalisiert, dass er immer alles von A:G kopieren soll.
2.Anschließend kopiert er den Inhalt aller Tabellenblätter in AlleDaten.
3.Dann leert er pseudoleere Zellen da ich am Ende mit
Sheets("AlleDaten").Select
Columns("A:A").Select
Range("A200").Activate
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
die leeren Zellen in Spalte A füllen möchte. Per Makro-Aufzeichnung habe ich dabei folgendes gemacht:
1. Spalte A auswählen
2. STRG + G
3. Dann auf Inhalt klicken und dann auf den Reiter Leerzellen klicken
4. Damit kann ich alle noch leeren Zellen anwählen. Mit dem Einfügen des Zellinhaltes =[Arrow Up] für alle leeren Zellen fügt er immer den Inhalt der oberen Zelle ein. Dies würde dann zb so aussehen
ALT:
  • 9000
    ....
    ....
    9200
    ....
    ....
    9300
    ....
    9400

  • NEU:
  • 9000
    9000
    9000
    9200
    9200
    9200
    9300
    9300
    9400

  • For Each Zelle In ActiveSheet.UsedRange.Cells
    If Not Zelle.HasFormula Then
    
    den Code habe ich nicht selber geschrieben aber er funktioniert für AlleDaten soweit ich das verstanden habe, da dies das Tabellenblatt ist welches zu dem Zeitpunkt ausgewählt ist.
    https://www.herber.de/bbs/user/138647.xlsm
    Anzeige
    AW: Laufzeitfehler 1004
    30.06.2020 10:36:43
    and2handles
    Hallo Werner,
    Du bist ein Schatz!
    Vielen lieben Dank!
    Wie ich sehe hast du den Code auch noch ein wenig aufgeräumt was garnicht nötig war.
    Danke :)
    Gruß Tobias
    Gerne u. Danke für die Rückmeldung. o.w.T.
    30.06.2020 10:46:28
    Werner

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige