Anzeige
Archiv - Navigation
540to544
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
540to544
540to544
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bedingung erfüllt - dann Zelle X,Y,Z Sperren...

Bedingung erfüllt - dann Zelle X,Y,Z Sperren...
07.01.2005 21:54:38
Jean-Pierre
Hallo zusammen,
allen ein frohes neues Jahr!
Nun zur Frage, wie lautet der Code (VBA) wenn ich folgendes erreichen möchte:
In Spalte B wird eine Zahl eingetragen (1-3) aufgrund dieser Angabe werden dann entsprechende Zellen schwarz gefärbt (Bedingte Formatierung) ich möchte jedoch über VBA diese Zellen sperren bzw. entsperren.
Beispiel:
In B1 steht 1 dann sollen die Zellen H1-Q1, für eine Eingabe gesperrt werden.
Steht jedoch eine 2 drinn dann sollen die Zellen M1-Q1 gesperrt werden.
Wenn eine 3 drin steht sollen die Zellen nicht gesperrt werden.
Kleine besonderheit dabei, in K1 und P1 werden anhand einer Formel Berechnungen durchgeführt diese beziehen sich jedoch nur auf einen Inhalt in H1,I1 & J1 (Formel in K1) bzw. M1,N1 & O1 (Formel in P1).
Ich möchte verhindern, dass man in besagte Zellen etwas eingibt (ich weiss man sieht es eh nicht) wenn man mit TAB weitergeht. Deswegen sperren.
In diesem Tabellenblatt habe ich bereits folgenden Code drin:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.PrintArea = "$A$1:$I" & Range("A65536").End(xlUp).Row
End Sub

Ich hoffe Ihr könnt mir helfen - ich bin ein totaler nop was VBA angeht :-((
Schöne Grüße aus Berlin
Jean-Pierre

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bedingung erfüllt - dann Zelle X,Y,Z Sperren..
07.01.2005 22:13:18
Josef
Hallo Jean-Pierre!
Das geht zB.so:


      
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
Select Case Target
Case 1
Range("H1:Q1").Locked = 
True
Case 2
Range("H1:Q1").Locked = 
False
Range("M1:Q1").Locked = 
True
Case 3
Range("H1:Q1").Locked = 
False
Case Else
End Select
End If
End Sub
'Das Tabellenblatt musst du per VBA schützen!
'ZB:
Sub Schutz()
Sheets(1).Protect password:="passwort", userinterfaceonly:=
True
End Sub 


Gruß Sepp
Anzeige
AW: Bedingung erfüllt - dann Zelle X,Y,Z Sperren..
07.01.2005 22:25:39
Jean-Pierre
Hallo Sepp,
vielen Dank für die Arbeit, hab da gleich 2 Fragen.
1) Meinen bisherigen Code (leere Zeilen nicht Drucken) wie Bau ich den ein?
2) Wie muss ich das abändern wenn B1-B50 beachtet werden soll und analog dazu natürlich auch die H1-Q1 bis H50-Q50.
Sorry war in meiner Anfrage im Text nicht ganz klar erwähnt. :-( (Ich gelobe Besserung)
Gruß aus Berlin
Jean-Pierre
AW: Bedingung erfüllt - dann Zelle X,Y,Z Sperren..
07.01.2005 22:38:41
Josef
Hallo Jean-Pierre!
Kein problem!
Dein "Before_Print" lass mal so wie es ist!
Hier der code für "B1:B50":


      
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B50")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Select Case Target
Case 1
Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = 
True
Case 2
Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = 
False
Range(Cells(Target.Row, 13), Cells(Target.Row, 17)).Locked = 
True
Case 3
Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = 
False
Case Else
End Select
End If
End Sub 


Gruß Sepp
Anzeige
AW: Bedingung erfüllt - dann Zelle X,Y,Z Sperren..
07.01.2005 23:19:20
Jean-Pierre
Hallo Sepp,
Danke nochmals!
Ich bekomme bei Eingabe 1 in B31 (Spontan genommen) folgenden Fehler:
Laufzeitfehler '1004':
Die Locked-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
Verweis im Debug auf Case 1...

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.PrintArea = "$A$1:$T" & Range("A65536").End(xlUp).Row
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B50")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Select Case Target
Case 1
--> Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = True
Case 2
--> Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = False
Range(Cells(Target.Row, 13), Cells(Target.Row, 17)).Locked = True
Case 3
--> Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = False
Case Else
End Select
End If
End Sub

Die Zeile vom Debuggen hab ich mit --> markiert.
Gebe ich die Zahl 2 ein erscheint der Fehler erneut verweist im Debug auf Case 2
Und bei Eingabe der Zahl 3 das gleiche mit Debug Verweis auf Case 3.
Was ist da verkehrt bzw. falsch?
Gruß aus Berlin
Jean-Pierre
Anzeige
AW: Bedingung erfüllt - dann Zelle X,Y,Z Sperren..
07.01.2005 23:38:46
Josef
Hallo Jean-Pierre!
Ich hab' ja in meinem ersten Postig geschrieben, das du den
Blattschutz mit VBA setzen musst!

Sub schutz()
Sheets("DeineTabelle").Protect Password:="passwort", UserInterfaceOnly:=True
End Sub

Gruß Sepp
AW: Bedingung erfüllt - dann Zelle X,Y,Z Sperren..
07.01.2005 23:46:20
Jean-Pierre
Hallo Sepp,
hmmm, bin in VBA nicht so bewandert. :-((
Hab den Code jetzt so abgespeichert:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.PrintArea = "$A$1:$T" & Range("A65536").End(xlUp).Row
Sub schutz()
Sheets("DeineTabelle").Protect Password:="passwort", UserInterfaceOnly:=True
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B50")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Select Case Target
Case 1
Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = True
Case 2
Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = False
Range(Cells(Target.Row, 13), Cells(Target.Row, 17)).Locked = True
Case 3
Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = False
Case Else
End Select
End If
End Sub

Trotzdem kommt der Fehler wieder...
Gruß aus Berlin
Jean-Pierre
Anzeige
AW: Bedingung erfüllt - dann Zelle X,Y,Z Sperren..
08.01.2005 10:55:09
Josef
Hallo Jean-Pierre!
In die Tabelle gehört dieser Code:
(rechtsklick auf Blattregister &gt Code anzeigen &gt in's rechte Fenster kopieren!)


      
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.PrintArea = "$A$1:$T" & Range("A65536").End(xlUp).Row
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B50")) Is Nothing Then
   
If Target.Count > 1 Then Exit Sub
      
Select Case Target
         
Case 1
            Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = 
True
         
Case 2
            Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = 
False
            Range(Cells(Target.Row, 13), Cells(Target.Row, 17)).Locked = 
True
         
Case 3
            Range(Cells(Target.Row, 8), Cells(Target.Row, 17)).Locked = 
False
         
Case Else
      
End Select
End If
End Sub 


In "DieseArbeitsmappe" gehört dieser Code:
(Doppelklick im VBA-Editor auf "DieseArbeitsmappe")


      
Option Explicit
Private Sub Workbook_Open()
'Tabellenname und Passwort anpassen!
   With Sheets("DeineTabelle")
      .Unprotect password:="passwort"
      .Protect password:="passwort", UserInterfaceOnly:=
True
   
End With
End Sub 


Datei speichern, schliessen und wieder öffnen.
Gruß Sepp
Anzeige
Korrektur!
08.01.2005 11:31:39
Josef
Hallo Jean-Pierre!
Das "Before_Print" gehört natürlich auch in "DieseArbeitsmappe" und nicht
in die Tabelle!


      
Option Explicit
Private Sub Workbook_Open()
'Tabellenname und Passwort anpassen!
   With Sheets("DeineTabelle")
      .Unprotect password:="passwort"
      .Protect password:="passwort", UserInterfaceOnly:=
True
   
End With
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.PrintArea = "$A$1:$T" & Range("A65536").End(xlUp).Row
End Sub 


Gruß Sepp
Anzeige
o.T. - Herzlichen Dank!!!
08.01.2005 14:10:53
Jean-Pierre
Hallo Sepp,
herzlichen Dank auch für deine Geduld mit mir.
Schönes Wochenende und
Grüße aus Berlin
Jean-Pierre

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige