Clever-Excel-Forum

Normale Version: Laufzeitfehler 424 -Objekt erforderlich
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen zusammen,

bitte nochmals um Hilfe bei einem VBA-Problem. Was will ich erreichen?

Mit Klick auf ein Icon soll

  - als erstes der Blattschutz aufgehoben und
  - Zelle O2 ausgewählt werden (dient ausschließlich dazu, den Fokus von einem bestimmten Bereich zu entfernen, falls dort eine Zelle markiert ist)
  - danach sollen die Spalten O:P eingeblendet und nach getaner Arbeit
  - durch erneuten Klick wieder ausgeblendet werden
  - jetzt soll die Zelle L17 ausgewählt und
  - der Blattschutz wieder aktiviert werden.
 
So sieht mein bisheriges Makro aus:
Code:
Option Explicit

Sub Spalten_ein_und_Ausblenden()
    With Worksheets("Auswertung")
        .Unprotect 'Password:="xxx"
        .Select.Range ("O2")
            If Columns("O:P").EntireColumn.Hidden = True Then
              Columns("O:P").EntireColumn.Hidden = False
            Else: Columns("O:P").EntireColumn.Hidden = True
        .Select.Range ("L17")
        .Protect 'Password:="xxx"
            End If
    End With

End Sub

Sobald die Anweisung If Columns... erreicht ist, meldet Excel "Laufzeitfehler 424 - Objekt erforderlich".

Was habe ich falsch gemacht? Die Hilfe hat mir nicht wirklich geholfen (ist aber sicherlich meinen rudimentären Kenntnissen geschuldet)

Danke für eure Hilfe.
Hallo,

Select ist eine Methode des Range-Objekts und kein Objekt, weshalb Du Select.Range... nicht verwenden kannst.
Kein Fehler in dem Sinne, aber besser ist es, die Hierarchie auch bei Columns einzuhalten. Dein Code, modifiziert ...

Code:
Sub Spalten_ein_und_Ausblenden()
    With Worksheets("Auswertung")
        .Unprotect 'Password:="xxx"
        .Range("O2").Select
            If .Columns("O:P").EntireColumn.Hidden = True Then
              .Columns("O:P").EntireColumn.Hidden = False
            Else: Columns("O:P").EntireColumn.Hidden = True
        .Range("L17").Select
        .Protect 'Password:="xxx"
            End If
    End With

End Sub

Variante von Deinem Code, etwas vereinfacht ...

Code:
Sub Spalten_ein_und_Ausblenden2()
 
  With Worksheets("Auswertung")
   
  .Unprotect 'Password:="xxx"
  .Range("O2").Select
   
  .Columns("O:P").EntireColumn.Hidden = Not _
  .Columns("O:P").EntireColumn.Hidden
   
  .Range("L17").Select
  .Protect 'Password:="xxx"
   
  End With

End Sub

Es würde ausreichen, die Eigenschaft Hidden zu invertieren bzw. zu negieren, um denselben
Effekt zu erzeugen.

Gruß
Hallo,

vor "Columns" steht kein Punkt, d.h. das bezieht sich auf das aktuelle Sheet. Von der Logik her sollte es aber das mit "with" genannte Sheet sein.

mfg
Hallo, :19:

statt mit "Select" kannst du auch mit "Goto" arbeiten - da wäre bei Bedarf noch ein Scrollen möglich: :21:

Code:
Option Explicit
Public Sub Main()
    With ThisWorkbook.Worksheets("Auswertung")
        .Unprotect 'Password:="xxx"
        .Columns("O:P").EntireColumn.Hidden = Not .Columns("O:P").EntireColumn.Hidden
        Application.Goto .Range("L17"), False ' Oder True, wenn hingescrollt werden soll
        .Protect 'Password:="xxx"
    End With
End Sub
Hallo Mourad,

vielen Dank für die Korrektur des Codes und der für mich hilfreichen Erklärung. Die verkürzte Variante  habe ich schon irgendwann mal gesehen, mir aber keinen Reim darauf gemacht - auch hier wieder ein etwas klarerer Blick (und Futter für meine Schnipsel-Sammlung)

Hallo Ralf,

auch dir ein dickes Dankeschön. Deine Variante mit Goto ist bei Bedarf sicherlich sehr interessant.

Danke Fennek für den Hinweis auf die fehlenden Punkte.