Probleme mit Range-Objekten

Bild

Betrifft: Probleme mit Range-Objekten
von: Rohfleisch
Geschrieben am: 13.09.2015 10:31:13

Hallo liebe Forennutzer,
wieder einmal stehe ich vor dem Problem, dass reines Ausprobieren mich nicht zum Ziel führt.
Ich habe folgenden Code und bekomme beim Bestätigen "Laufzeitfehler 424 objekt erforderlich".

Private Sub Erstellen_Click()
    Call NewRow()
    Firstempty.Select
End Sub
Sub NewRow(Optional ByRef Firstempty As Range)
    Dim LastFilled As Range
    Dim Lastval As Integer
    Dim NewVal As String
    
    Set LastFilled = Range("Artikelnummern").End(xlDown)
    Set Firstempty = LastFilled.Offset(1)
    Lastval = LastFilled.Value
    NewVal = Lastval + 1
    Do Until Len(NewVal) = 5
        NewVal = "0" & NewVal
    Loop
    LastFilled.Copy
    Firstempty.PasteSpecial (xlPasteFormats)
    Firstempty.Value = NewVal
    Application.CutCopyMode = False
End Sub

Ich hoffe mir kann hier jemand heraushelfen und mich belehren. Vielen Dank!
Beste Grüße,
Rohfleisch

Bild

Betrifft: AW: Probleme mit Range-Objekten
von: Gerd L
Geschrieben am: 13.09.2015 10:50:09
Hallo,
schreibe ins Modul ganz oben Option Explicit. Du wirst so feststellen, dass die Variable
Firstempty auf Modulebene oder als globale Variable (Public ...As Range) zu deklarieren ist.
Gruß Gerd

Bild

Betrifft: AW: Probleme mit Range-Objekten
von: fcs
Geschrieben am: 13.09.2015 13:21:22
Hallo Rohfleisch,
Da dein Makro die Variable "Firstempty" als Parameter verwendet muss eine entsprechende Variable übergeben werden, die du dann nutzen kannst, wenn die Sub die Ausführung an das aufrufende Makro zurückgibt.
Wenn du im Hauptmakro einen Einzeiler haben möchtest, dann musst du deine Sub in eine Function umwandeln, die die Zelle mit der neuen Nummer als Range zurückgibt.
Wenn Zahlen als Text mit führenden Nullen dargestellt werden sollen, dann kann man dies unter VBA mit einer Anweisung erreichen. Eine Schleife ist nicht erforderlich.
Gruß
Franz

Private Sub Erstellen_Click()
     Dim Zelle As Range
     Call NewRow(Zelle)
     Zelle.Select
End Sub
     'Zahlen mit führende Nullen als Text darstellen
     NewVal = Format(Lastval + 1, "00000")

Variante mit Function
Private Sub Erstellen_Click()
     Call fncNewRow.Select
End Sub
 
Function fncNewRow() As Range
     Dim LastFilled As Range
     Dim Firstempty As Range
     Dim Lastval As Integer
     Dim NewVal As String
     Application.ScreenUpdating = False
     Set LastFilled = Range("Artikelnummern").End(xlDown)
     If LastFilled.Row = Range("Artikelnummern").Parent.Rows.Count Then
        Set LastFilled = Range("Artikelnummern")
     End If
     Set Firstempty = LastFilled.Offset(1)
     Lastval = Val(LastFilled.Value)
     LastFilled.Copy
     Firstempty.PasteSpecial (xlPasteFormats)
     Application.CutCopyMode = False
     
     'Zahlen mit führende Nullen als Text darstellen
     NewVal = Format(Lastval + 1, "00000")
     Firstempty.Value = NewVal 'oder = "'" & NewVal wenn Textdarstellung sicher sein soll
     
     Application.ScreenUpdating = True
     Set fncNewRow = Firstempty
End Function


Bild

Betrifft: AW: Probleme mit Range-Objekten
von: Rohfleisch
Geschrieben am: 15.09.2015 11:16:58
Vielen Dank für die Hilfe! Ich bin leider erst jetzt dazu gekommen die Tipps umzusetzen.
Grüße,
Rohfleisch

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Wert kopieren"