1.9k Aufrufe
Gefragt in Tabellenkalkulation von petra65 Experte (1.8k Punkte)
Hallo,

ich möchte aus zwei Schaltflächen einen ToggleButton machen, erhalte aber leider eine Fehlermeldung.
Beide Schaltflächen an sich funktionieren einwandfrei.

Der Code der beiden Schaltflächen lautet:

Sub ausblenden()
Sheets("2008").Select
Columns("H:O").Select
Selection.EntireColumn.Hidden = True
Range("P8").Select
ActiveSheet.Protect (159)
Sheets("2009").Select
Columns("H:O").Select
Selection.EntireColumn.Hidden = True
Range("P8").Select
ActiveSheet.Protect (159)
Sheets("2009").Select
Range("P8").Select
End Sub

Sub einblenden()
strVergleichspasswort = "159"
strPasswort = InputBox("Bitte Passwort Eingeben", "Passwortabfrage")
If strPasswort <> strVergleichspasswort Then
MsgBox "Passwort falsch", vbCritical, "A C H T U N G"
Exit Sub
End If
Sheets("2008").Select
ActiveSheet.Unprotect (159)
Columns("G:P").Select
Selection.EntireColumn.Hidden = False
Range("P8").Select
Sheets("2009").Select
ActiveSheet.Unprotect (159)
Columns("G:P").Select
Selection.EntireColumn.Hidden = False
Range("P8").Select
Sheets("2009").Select
Range("P8").Select
End Sub

Der Code des ToggleButton ist:
Private Sub ToggleButton1_Click() 'Spalten GW ein- bzw. ausblenden

Dim strPasswort As String, strVergleichspasswort As String
Dim intS As Integer

If Me.ToggleButton1.Value = True Then
With Me.ToggleButton1
.Caption = "Auswertung einblenden"
.ForeColor = &HFF&
End With

Sheets("2008").Select
Columns("H:O").Select
Selection.EntireColumn.Hidden = True
Range("P8").Select
ActiveSheet.Protect (159)
Sheets("2009").Select
Columns("H:O").Select
Selection.EntireColumn.Hidden = True
Range("P8").Select
ActiveSheet.Protect (159)
Sheets("2009").Select
Range("P8").Select

ElseIf Me.ToggleButton1.Value = False Then
With Me.ToggleButton1
.Caption = "Auswertung ausblenden"
.ForeColor = &H8000&
End With

strVergleichspasswort = "159"
strPasswort = InputBox("Bitte Passwort Eingeben", "Passwortabfrage")
If strPasswort <> strVergleichspasswort Then
MsgBox "Passwort falsch", vbCritical, "A C H T U N G"
Exit Sub
End If

Sheets("2008").Select
ActiveSheet.Unprotect (159)
Columns("G:P").Select 'HIER FEHLER ?
Selection.EntireColumn.Hidden = False
Range("P8").Select
Sheets("2009").Select
ActiveSheet.Unprotect (159)
Columns("G:P").Select
Selection.EntireColumn.Hidden = False
Range("P8").Select
Sheets("2009").Select
Range("P8").Select
End If

End Sub

Es sollen nur Spalten ausgeblendet und mit Schutz versehen werden, beim zweiten Button wird der Schutz aufgehoben und die Spalten eingeblendet.

Warum funktioniert es nicht ???

Vielen Dank schonmal und viele Grüße

Petra

3 Antworten

0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo Petra...
hab Deinen code mal ein wenig überarbeitet:
Sub ausblenden()
Sheets("2008").Select
ActiveSheet.Columns("H:O").EntireColumn.Hidden = True
'Selection.EntireColumn.Hidden = True
'ActiveSheet.Range("P8").Select
ActiveSheet.Protect (159)
Sheets("2009").Select
ActiveSheet.Columns("H:O").EntireColumn.Hidden = True
'Selection.EntireColumn.Hidden = True
'ActiveSheet.Range("P8").Select
ActiveSheet.Protect (159)
'ActiveSheet.Sheets("2009").Select
'Range("P8").Select
Application.GoTo reference:=Sheets("2008").Cells(8, 16), Scroll:=False
Application.GoTo reference:=Sheets("2009").Cells(8, 16), Scroll:=False
End Sub

Sub einblenden()
' ---------------------- Passwortabfrage --------------------
strVergleichspasswort = "159"
strPasswort = InputBox("Bitte Passwort Eingeben", "Passwortabfrage")
If strPasswort <> strVergleichspasswort Then
MsgBox "Passwort falsch", vbCritical, "A C H T U N G"
Exit Sub
End If
' --------- Wenn Passwort richtig Spalten einblenden --------
Sheets("2008").Select
ActiveSheet.Unprotect (159)
ActiveSheet.Columns("G:P").EntireColumn.Hidden = False
'Selection.EntireColumn.Hidden = False
'Range("P8").Select
Sheets("2009").Select
ActiveSheet.Unprotect (159)
ActiveSheet.Columns("G:P").EntireColumn.Hidden = False
'Selection.EntireColumn.Hidden = False
'Range("P8").Select
'Sheets("2009").Select
'Range("P8").Select
Application.GoTo reference:=Sheets("2008").Cells(8, 16), Scroll:=False
Application.GoTo reference:=Sheets("2009").Cells(8, 16), Scroll:=False
End Sub

'Der Code des ToggleButton ist:
Private Sub ToggleButton1_Click() 'Spalten GW ein- bzw. ausblenden

Dim strPasswort As String, strVergleichspasswort As String
Dim intS As Integer

If Me.ToggleButton1.Value = True Then
With Me.ToggleButton1
.Caption = "Auswertung einblenden"
.ForeColor = &HFF&
End With
' ----------------------- Blatt 2008 ---------------------
Sheets("2008").Select
ActiveSheet.Columns("H:O").EntireColumn.Hidden = True
'Selection.EntireColumn.Hidden = True

'ActiveSheet.Range("P8").Select

ActiveSheet.Protect (159)

' ------------------------ Blatt 2009 --------------------

Sheets("2009").Select
ActiveSheet.Columns("H:O").EntireColumn.Hidden = True
'Selection.EntireColumn.Hidden = True

ActiveSheet.Protect (159)
'------------ Zelle P8 in den Blättern Markieren ------
Application.GoTo reference:=Sheets("2008").Cells(8, 16), Scroll:=False
Application.GoTo reference:=Sheets("2009").Cells(8, 16), Scroll:=False
'ActiveSheet.Range("P8").Select

'Sheets("2009").Select

ElseIf Me.ToggleButton1.Value = False Then
With Me.ToggleButton1
.Caption = "Auswertung ausblenden"
.ForeColor = &H8000&
End With

strVergleichspasswort = "159"
strPasswort = InputBox("Bitte Passwort Eingeben", "Passwortabfrage")
If strPasswort <> strVergleichspasswort Then
MsgBox "Passwort falsch", vbCritical, "A C H T U N G"
Exit Sub
End If

Sheets("2008").Select
ActiveSheet.Unprotect (159)
ActiveSheet.Columns("G:P").EntireColumn.Hidden = False
'Selection.EntireColumn.Hidden = False
'ActiveSheet.Range("P8").Select
Sheets("2009").Activate
ActiveSheet.Unprotect (159)
ActiveSheet.Columns("G:P").EntireColumn.Hidden = False
'Selection.EntireColumn.Hidden = False
Application.GoTo reference:=Sheets("2008").Cells(8, 16), Scroll:=False
Application.GoTo reference:=Sheets("2009").Cells(8, 16), Scroll:=False
'ActiveSheet.Range("P8").Select
' Sheets("2009").Select
' ActiveSheet.Range("P8").Select
End If

End Sub


Du wirst sehen, dass einige Einzelbefehle zusammengefasst sind...
Hab die alten als Kommentar gelassen, damit Du das besser nachvollziehen kannst.

Ich weiss nicht, wie weit Du in VBA bist.... deshalb:
Falls noch Erklärungen nötig sind ...Melden.

Gruß
Kauz
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
Hallo, guten Morgen,

nun funktioniert es einwandfrei ....

Ich kann also dann davon ausgehen, dass Excel nicht wußte bei welchem Tabellenblatt er die Befehle ausführen soll ???

Ich weiss nicht, wie weit Du in VBA bist....

Naja .. aufzeichnen kann ich ein Makro, einfügen auch ... alles andere bereitet mir echt Kopfzerbrechen ;-)

Vielen Dank für Deine Hilfe .

Gruss - Petra
0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo Petra....
ganz genau... Deine Vermutung ist richtig!

Noch ein Tipp für das Ansprechen von Zellen:
Application.GoTo reference:=Sheets("2009").Cells(8, 16), Scroll:=False

Wenn du <False> gegen <True> tauscht, dann wird zu dieser Zelle gescollt.

Ach, und noch'n Tipp:

Range("B3") ist das Gleiche wie cells(3,2).....
Nur bei Cells kommt erst die Zeile und dann die Spalte.

Is ja schön wenn's geklappt hat...

Dann noch viel Spass....

Gruß
Kauz
...