Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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)
Antworten 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
Antworten 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
Antworten 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
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • WillWissen
Antworten 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)
Antworten Top


Gehe zu:


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