Anzeige
Archiv - Navigation
1508to1512
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 '424': Objekt erforderlich

Laufzeitfehler '424': Objekt erforderlich
24.08.2016 11:35:07
Leonida
Liebes Forum,
ich habe eine Excel-Tabelle mit Daten im ersten Tabellenblatt (die Datei hat mehrere Blätter) von A1:V507, die ich gerne durch einen Autofilter in Spalte F nach den Werten, die sich dort befinden, in einzelne Dateien splitten würde.
Das Tabellenblatt "Gesamtübersicht" besteht aus Datensätzen von Mitarbeitern und in Spalte F befindet sich die Führungskraft. Diese sollen den einzelnen Führungskräften geschickt werden.
Das an sich ist erstmal nicht so kompliziert, allerdings gibt es noch einige Schwierigkeiten in dieser Datei. Die Datensätze befinden sich in A1:V480 und von A481:V507 befindet sich eine zusätzliche Tabelle mit Formeln, die in jeder gesplitteten Datei vorhanden sein muss.
1. Die Spalten Q:V sollen komplett ausgeblendet werden, sich aber noch in den neuen Dateien befinden, da dort nicht sichtbare Formeln hinterlegt sein sollen. Dasselbe gilt für die Zeilen 482:494 und 496:507.
2. Die Liste wird nach den Führungskräften, also Werten in Spalte F, aufgeteilt, wobei sich zusätzlich der Bereich A481:V507 in jeder Datei befinden muss.
3. Alle Zellen außer K4:N(Zähle die Zeilen) sollen mit einem Passwort gesperrt sein.
4. Die Dateien sollen unter dem gleichen Pfad & "/" & "FK Tools" unter dem Namen der jeweiligen Führungskraft gespeichert werden.
Für mich als VBA-Anfänger war es gerade so möglich einen so speziellen Code zu schreiben, allerdings bin ich nicht sicher, ob er mich zum Ziel bringt.
Sub LB_Liste_splitten2()
Dim D As Object
Dim lz As Long
Dim v As Object
Dim wb As Workbook
Dim lng As Long
Dim line As Long
Application.ScreenUpdating = False
Set D = CreateObject("scripting.dictionary")
With Tabelle1
With .Range("A1:V507").CurrentRegion
lz = Cells(Rows.Count, 6).End(xlUp).Row
For Each v In Range("A4:V" & lz).Offset(1).Value
If v  "" Then D(v) = 0
Next
For Each v In D.Keys
Set wb = Workbooks.Add(xlWBATWorksheet)
lng = Cells(Rows.Count, 10).End(xlUp).Row
Sheets("Gesamtübersicht").Range("A1:P" & lng).Copy
wb.Worksheets(1).Cells(1).PasteSpecial Paste:=xlPasteAll
wb.Worksheets(1).Cells(1).PasteSpecial Paste:=xlPasteColumnWidths
wb.Worksheets(1).Cells(1).PasteSpecial Paste:=xlPasteFormulas
With wb.Sheets(1)
line = Cells(Rows.Count, 1).End(xlUp).Row
.Range("A4:V" & line).AutoFilter 6, v
If .Range("F4:F" & lz).Cells.Value  v Then _
EntireRow.Delete
.Range("K2:N" & line).Locked = False
.Protect "Era"
.AutoFilter
End With
wb.SaveAs ActiveWorksheet.Parent.Parent.Path & "\FK Tools" & "\" & v & ".xlsx",  _
xlOpenXMLWorkbook
wb.Close False
Next
End With
End With
MsgBox "Finished!"
End Sub

Ich kann es leider auch nicht ausprobieren, da in folgender Zeile der "Laufzeitfehler '424': Objekt erforderlich" angezeigt wird:
For Each v In Range("A4:V" & lz).Offset(1).Value

Komischerweise habe ich einen ähnlichen Code für ein anderes Projekt, in dem die Zeilen bis zum Laufzeitfehler aber komplett identisch sind und der Code läuft einwandfrei. Warum dieser es nicht tut, bleibt mir ein Rätsel.
Ich habe mein Problem zwar schon in einer Antwort auf einen anderen Beitrag geschildert, habe darauf aber leider keine Antwort bekommen. Deshalb hoffe ich, dass mir jetzt eventuell jemand helfen kann.
Gruß Leonida
P.S.: Hier ist eine Beispiel-Datei, wie meine Datei aussieht.
https://www.herber.de/bbs/user/107774.xlsx

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 12:08:35
Nepumuk
Hallo,
so:
For Each v In Range("A4:V" & lz).Offset(1)
Warum eigentlich OffSet(1) fang doch einfach in Zeile 5 an.
Gruß
Nepumuk
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 12:12:52
Rudi
Hallo,
lass .Value weg.
Gruß
Rudi
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 12:22:23
Leonida
Hallo Rudi, hallo Nepumuk,
vielen Dank für die schnellen Antworten!
Ich habe eure Tipps ausprobiert, allerdings läuft der Code immer noch nicht und folgende Zeile wird mit der gleichen Fehlermeldung angezeigt:
For Each v In D.Keys
Wenn ihr mir dabei noch einmal helfen könntet, würde ich mich sehr freuen.
Gruß
Leonida
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 12:30:19
Rudi
Hallo,
dann ist D wohl leer.
Kleine Ergänzung:
      For Each v In Range("A4:V" & lz).Offset(1)
If v  "" Then D(v.Value) = 0
Next
Gruß
Rudi
Anzeige
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 12:55:45
Leonida
Hallo,
ich hab den Code jetzt entsprechend geändert, allerdings liegt immer noch der Fehler in der genannten Zeile. Wenn ich die Zeile anklicke, wird mir angezeigt "v = Nothing".
Bedeutet das, dass v leer ist? Dann weiß ich nämlich überhaupt nicht mehr, was ich tun muss :D
Gruß
Leonida
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 12:56:21
Leonida
Hallo,
ich hab den Code jetzt entsprechend geändert, allerdings liegt immer noch der Fehler in der genannten Zeile. Wenn ich die Zeile anklicke, wird mir angezeigt "v = Nothing".
Bedeutet das, dass v leer ist? Dann weiß ich nämlich überhaupt nicht mehr, was ich tun muss :D
Gruß
Leonida
Anzeige
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 13:57:10
Nepumuk
Hallo,
du hast die Variable v als Object deklariert um die Keys des Dictionarys zu durchlaufen benötigst du eine Variable die als Variant deklariert ist.
Gruß
Nepumuk
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 14:37:54
Leonida
Vielen Dank für die Hilfe, allerdings laufe ich von einem Fehler zum nächsten. Sobald ich einen Fehler korrigiert habe, taucht ein neuer auf und ich bin mir nicht sicher, ob dieser Code überhaupt am Ende das tut, was ich will...
Ich habe jetzt in der Zeile
If .Cells("F4:F" & lz).Value  v Then _

einen Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler.
Nachdem ich eure Ratschläge befolgt habe, sieht der aktuelle Code so aus:
Sub LB_Liste_splitten2()
Dim D As Object
Dim lz As Long
Dim v As Variant
Dim wb As Workbook
Dim lng As Long
Dim line As Long
Application.ScreenUpdating = False
Set D = CreateObject("scripting.dictionary")
With Tabelle1
With .Range("A1:V507").CurrentRegion
lz = Cells(Rows.Count, 6).End(xlUp).Row
For Each v In Range("A4:V" & lz)
If v  "" Then D(v.Value) = 0
Next
For Each v In D.Keys
Set wb = Workbooks.Add(xlWBATWorksheet)
lng = Cells(Rows.Count, 10).End(xlUp).Row
.Range("A1:P" & lng).Copy
wb.Worksheets(1).Cells(1).PasteSpecial Paste:=xlPasteAll
wb.Worksheets(1).Cells(1).PasteSpecial Paste:=xlPasteColumnWidths
wb.Worksheets(1).Cells(1).PasteSpecial Paste:=xlPasteFormulas
With wb.Sheets(1)
line = Cells(Rows.Count, 1).End(xlUp).Row
.Range("A4:V" & line).AutoFilter 6, v
If .Cells("F4:F" & lz).Value  v Then _
EntireRow.Delete
.Range("K2:N" & line).Locked = False
.Protect "Era"
.AutoFilter
End With
wb.SaveAs ActiveWorksheet.Parent.Parent.Path & "\FK Tools" & "\" & v & ".xlsx",  _
xlOpenXMLWorkbook
wb.Close False
Next
End With
End With
MsgBox "Finished!"
End Sub
Falls ihr noch Lust und Geduld habt, euch mit meinem Problem auseinander zu setzen, freue ich mich sehr. Ich könnte es allerdings verstehen, wenn dieses Projekt mittlerweile keinen Spaß mehr macht...
Gruß
Leonida
Anzeige
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 14:42:02
Nepumuk
Hallo,
Cells("F4:F" & lz) ist Unsinn denn das Cells-Objekt kann nur eine einzelne Zelle umfassen. Zudem kannst du einen Bereich nicht mit einem einzelnen Wert vergleichen.
Wenn ich wüsste was du genau vor hast, wäre es einfacher zu helfen. Deine leere Tabelle die du hochgeladen hast ist nicht wirklich hilfreich.
Gruß
Nepmuk
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 14:56:35
Leonida
Hallo Nepumuk,
ich kann leider aus Datenschutzgründen nicht mehr aus der Tabelle preisgeben, als du dort siehst. Die Personendaten stehen zwischen Zeile 3 und Zeile 481 mit ca. 80 verschiedenen Führungskräften.
Zum Ablauf: Ich habe überlegt, wie ich es hinbekomme, dass ich die Masterdatei mit allen Mitarbeitern splitten kann und als Tools an die einzelnen Führungskräfte schicken kann, wobei eben die Überschriften in Zeile 1-3 komplett übernommen werden sollen, aber auch die Zellen und Formeln ab Zeile 481. Die Spalten Q bis T müssten auch überall enthalten sein, allerdings ausgeblendet. Also soll quasi nur der Bereich A1:T480 gefiltert werden und für jedes Filterergebnis eine Datei erstellt werden. Das Problem ist, dass immer wieder neue Führungskräfte dazukommen können oder welche wegfallen. Deshalb kann ich den Vorgang nicht per Makro aufnehmen, weil die Prozedur sonst abhängig von den Namen der Führungskräfte wäre.
Ich hoffe das ist jetzt verständlich formuliert...
Gruß
Leonida
Anzeige
AW: Laufzeitfehler '424': Objekt erforderlich
24.08.2016 16:59:08
Nepumuk
Hallo,
teste mal:
Option Explicit

Public Sub LB_Liste_splitten2()
    
    Dim objCell As Range
    Dim objWorkbook As Workbook
    Dim objDictionary As Object
    Dim avntValues As Variant, vntKey As Variant
    
    With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    Set objDictionary = CreateObject("Scripting.Dictionary")
    
    With Tabelle1
        
        avntValues = .Range(.Cells(4, 6), .Cells(.Rows.Count, 6).End(xlUp)).Value2
        
        For Each vntKey In avntValues
            
            objDictionary(vntKey) = vbNullString
            
        Next
        
        For Each vntKey In objDictionary.Keys
            
            If Trim$(vntKey) <> vbNullString Then
                
                Set objWorkbook = Workbooks.Add(xlWBATWorksheet)
                
                Call .Rows(3).AutoFilter(Field:=6, Criteria1:=vntKey)
                
                Call .Range(.Cells(1, 1), .Cells(600, 16)).Copy
                
                With objWorkbook.Worksheets(1)
                    
                    Call .Cells(1).PasteSpecial(Paste:=xlPasteColumnWidths)
                    Call .Cells(1).PasteSpecial(Paste:=xlPasteAll)
                    
                    .Range(.Cells(4, 11), .Cells(.Cells( _
                        .Rows.Count, 6).End(xlUp).Row, 14)).Locked = False
                    
                    .Cells(3, 1).Select
                    
                    Call .Protect(Password:="Era")
                    
                End With
                
                Call objWorkbook.SaveAs(Filename:=ThisWorkbook.Path & "\FK Tools\" & _
                    vntKey, FileFormat:=xlOpenXMLWorkbook)
                Call objWorkbook.Close
                
                Set objWorkbook = Nothing
                
            End If
        Next
        
        Call .ShowAllData
        
    End With
    
    Set objDictionary = Nothing
    
    With Application
        .CutCopyMode = False
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Laufzeitfehler '424': Objekt erforderlich
25.08.2016 08:42:29
Leonida
Vielen Dank Nepumuk, dass du dir die Mühe gemacht hast!
Allerdings habe ich in der Zeile
Call .Rows(3).AutoFilter(Field:=6, Criteria1:=vntKey)
wieder einen Anwendungs- oder objektdefinierten Fehler...
Gruß Leonida
AW: Laufzeitfehler '424': Objekt erforderlich
25.08.2016 08:52:59
Leonida
Bzw. wenn ich den Code mehrmals durchlaufen lasse, wird manchmal auch angezeigt "Die Autofiltermethode des Rangeobjekts konnte nicht ausgeführt werden".
AW: Laufzeitfehler '424': Objekt erforderlich
25.08.2016 09:03:34
Leonida
Bzw. wenn ich den Code mehrmals durchlaufen lasse, wird manchmal auch in der selben Zeile angezeigt "Die Autofiltermethode des Rangeobjekts konnte nicht ausgeführt werden".
Anzeige
AW: Laufzeitfehler '424': Objekt erforderlich
25.08.2016 10:34:30
Nepumuk
Hallo,
ich hab es mit deiner Mustermappe getestet, da gab es keine Fehlermeldung, aber ich hab nur Excel 2013. Was nun?
Gruß
Nepumuk
AW: Laufzeitfehler '424': Objekt erforderlich
25.08.2016 10:47:20
Leonida
Hallo Nepumuk,
ich danke dir wirklich für deine Mühe, aber ich denke, dass wir aufgrund der Beachtung des Datenschutzes so leider nicht weiterkommen. Dann muss mein Chef ggf. jemanden mit der Programmierung beauftragen :D
Trotzdem vielen Dank für deine Arbeit!
LG Leonida

44 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige