Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Laufzeitfehler 424 -Objekt erforderlich
#1
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.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#2
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ß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • WillWissen
Top
#3
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
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • WillWissen
Top
#4
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
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • WillWissen
Top
#5
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.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste