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


Gehe zu:


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