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.

Blattschutz mit VBA aufheben
#11
H Günter,

ich vergaß leider das rot markierte:

If Target.Address = "$J$1" Then
  If Sheets("Daten").Visible = -1 Then
   
Mit True oder False ist es leider nicht getan:

-1 - xlSheetVisible     = True
0 - xlSheetHidden       = False
2 - xlSheetVeryHidden   = True


Gruß Uwe
Antworten Top
#12
Hallo Uwe,

it's really true :21:
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#13
Hi Uwe,

(27.02.2015, 12:42)Kuwer schrieb: H Günter,

ich vergaß leider das rot markierte:

If Target.Address = "$J$1" Then
  If Sheets("Daten").Visible = -1 Then
   
Mit True oder False ist es leider nicht getan:

-1 - xlSheetVisible     = True
0 - xlSheetHidden       = False
2 - xlSheetVeryHidden   = True


Gruß Uwe

ok, so wie ich das verstanden habe, ersetzen die Ziffern die einzelnen Blattzustände. Was ich nun nicht verstehe, ist dein Satz, dass es mit True oder False nicht getan ist. Ich habe deshalb ein Verständnisproblem, weil ich, neugierig wie ich nun mal bin ;), das "-1" mit True ausgetauscht und zudem Andrés Rat
Zitat:und
   Me.Range("H2").Activate
durch
   Me.Activate
   Range("H2").Activate
befolgt. Somit sieht das Makro so aus:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Doppelklick im Sheet "Ausgabe" von Uwe

If Target.Address = "$J$1" Then
  If Sheets("Daten").Visible = True Then
    Sheets("Daten").Visible = xlVeryHidden
    Me.Protect 'Password:="xxx"
  Else
    Sheets("Daten").Visible = True
    Me.Unprotect 'Password:="xxx"
    Me.Activate
    Range("H2").Activate
  End If
  Cancel = True
End If
End Sub

Das Ergebnis: 100 % das Ziel erreicht!!

Was ist nun der Unterschied zwischen den herkömmlichen (soweit mir laienhaft bekannt) =TRUE oder =FALSE bei den verschiedenen Zuständen und den von dir gezeigten Zahlen. Was wird wann benutzt/benötigt?

Und wieso muss das Aktivieren der Zelle H2 durch doppeltes "Activate" erfolgen? Ich erhalte zwar die Meldung über den Laufzeitfehler 1004, sobald ich das Makro mit auskommentierter Zeile "Me.Activate" starte. Verstanden habe ich aber nicht warum. In so manchen Makros habe ich die Aktivierung einer Zelle durch einfaches "Range("xx").Activate" gesehen.

Über ein paar erklärende Worte würde ich mich riesig freuen.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#14
Hallo Günter,

wie ich schon scherzhaft schrieb, die -1 steht für TRUE. 0 und mehr dann für FALSE. Hintergrund ist, dass man anhand der Zahlen den Zustand False oder True auch berechnen kann. Du könntest z.B. eine Bedingung
IF 4 - 3 Then ...
setzen oder etwas in der Art
a = 4 - 3
If a Then ...
Das Beispiel ist jetzt zwar nicht besonders sinnvoll, aber manchmal ist das Prinzip schon zu gebrauchen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#15
Hallo André,

(27.02.2015, 20:10)schauan schrieb: wie ich schon scherzhaft schrieb, die -1 steht für TRUE. 0 und mehr dann für FALSE.

ich meine, das mal anders gelesen zu haben: Alles was nicht 0 ist, ist wahr. Somit würde das 'und mehr dann für FALSE' nicht stimmen. Siehe auch das Beispiel von Uwe.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#16
Hallo zusammen,

das was Stefan schreibt, habe ich auch hier gelesen.

Gruß
Max
Antworten Top
#17
Hallöchen,

da hab ich wohl "mehr" geschrieben, als nötig.

Siehe auch
Code:
Sub test()
For i = -2 To 2
  If i Then MsgBox "TRUE" & i Else MsgBox "FALSE" & i
Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#18
Hallo Günter,

bei mir läuft das Makro auch mit folgender Zeile ohne Fehlermeldung

Code:
Me.Range("H2").Activate

Was ich allerdings nicht verstehe ist, warum Du für ein Blatt "xlVeryHidden" noch einen Blattschutz vergibst?
Dieses Blatt kannst Du doch ohnehin nur über VBA wieder einblenden, oder?

Gruß
Max

EDIT:
Schnell das "h" in Günt(h)er entfernt  Blushsmiley

In Ergänzung:
Du müsstest Deinen Code auch meiner Meinung nach im If-Statement ändern, andernfalls wird das Passwort nicht abgefragt:

If...
.
.
 Me.Unprotect


und im Else-Teil dann
Else
.
.
Me.Protect Password:="xxx"
Antworten Top
#19
Hi Günter,

- alles ungleich Null ist Wahr/True.
- If Sheets("Daten").Visible = True Then ist dasselbe wie If Sheets("Daten").Visible Then
- das "von Uwe" im Code kannst Du weglassen, wenn es nicht der Code von Uwe ist  Wink

Was seltsam ist, ist, das es mit = True oder ganz weglassen von = True trotzdem anfangs manchmal funktioniert,
bei mir auch, weshalb ich gar nicht weiter darüber nachdachte.
Andrés Änderungen/Erweiterungen kann ich nicht beurteilen, weil ich den Sinn bezüglich einer Codeverbesserung nicht verstehe.

So läuft es bei mir ohne Errors:

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 'Doppelklick im Sheet "Ausgabe"
 
 If Target.Address = "$J$1" Then
   Cancel = True
   If Sheets("Daten").Visible = -1 Then
     Sheets("Daten").Visible = 2
     Me.Protect Password:="xxx"
   Else
     Sheets("Daten").Visible = -1
     Me.Unprotect Password:="xxx"
     Me.Range("H2").Activate
   End If
 End If
End Sub

Gruß Uwe

PS: Einrückungen werden im CODE-Tag verändert!
Antworten Top
#20
Hallo Freunde,

ganz herzlichen Dank nochmals an alle Helfer.

Ich habe nun 2 funktionierende Makros, den Vorschlag von Edgar arbeite ich in ruhiger Minute nochmals durch. Danke auch für die Erklärungen, die mich wieder ein Stückchen (VBA-)klüger werden ließen.

@Max
Ich kenne ja die Seiten von Peter Haserodt, trotzdem habe ich nicht daran gedacht, hier wieder mal zu stöbern. Schande :29:
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