Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Laufzeitfehler '424': Objekt erforderlich


Betrifft: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 24.08.2016 11:35:07

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

  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Nepumuk
Geschrieben am: 24.08.2016 12:08:35

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Rudi Maintaire
Geschrieben am: 24.08.2016 12:12:52

Hallo,
lass .Value weg.

Gruß
Rudi


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 24.08.2016 12:22:23

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Rudi Maintaire
Geschrieben am: 24.08.2016 12:30:19

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 24.08.2016 12:55:45

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 24.08.2016 12:56:21

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Nepumuk
Geschrieben am: 24.08.2016 13:57:10

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 24.08.2016 14:37:54

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Nepumuk
Geschrieben am: 24.08.2016 14:42:02

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 24.08.2016 14:56:35

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Nepumuk
Geschrieben am: 24.08.2016 16:59:08

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 25.08.2016 08:42:29

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


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 25.08.2016 08:52:59


Bzw. wenn ich den Code mehrmals durchlaufen lasse, wird manchmal auch angezeigt "Die Autofiltermethode des Rangeobjekts konnte nicht ausgeführt werden".


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 25.08.2016 09:03:34


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".


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Nepumuk
Geschrieben am: 25.08.2016 10:34:30

Hallo,

ich hab es mit deiner Mustermappe getestet, da gab es keine Fehlermeldung, aber ich hab nur Excel 2013. Was nun?

Gruß
Nepumuk


  

Betrifft: AW: Laufzeitfehler '424': Objekt erforderlich von: Leonida
Geschrieben am: 25.08.2016 10:47:20

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


Beiträge aus den Excel-Beispielen zum Thema "Laufzeitfehler '424': Objekt erforderlich"