Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
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
Zellen sperren in Schleife
14.11.2020 21:54:53
Peer
Hallo und Guten Abend.
Seit langer Zeit schiebe ich schon dieses Problem mit mir rum und habe es wegen anderen "Schmerzen" hinten angestellt und hoffen nun, einige Profis können wir einen kleinen Tipp geben.
Ich lasse du nachfolgenden Sub aus allen Monatstabellen durch Erzeugen eines "neuen Jahr" alle Zellen mit Inhalt löschen. Leider sind danach alle Zellen entsperrt bzw. auswählbar und überschreibbar. Ich möchte aber gern, dass alle als "gesperrt" deklarierten Zellen "gesperrt" und auch "nicht auswählbar" (oder auch enabled) bleiben bzw. werden.
Dabei nahm ich an, dass .locked ausreichend sei. Aber den ist nicht so.
Wie kann ich in der Schleife mein Anliegen verwirklichen?

Sub Neues_Jahr(control As IRibbonControl)
Dim lngYear As Long, lngMonth As Long, lngDay As Long
Dim datDay As Date, varFerien As Variant, varFeiertage As Variant, strFeiertag As String
Dim bolHolyday As Boolean
Dim wks As Worksheet
On Error GoTo ERRORHANDLER
With Application
.ScreenUpdating = False
.EnableEvents = False
.AskToUpdateLinks = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
End With
If MsgBox("Möchtest du wirklich das komplette Jahr löschen?" & vbCrLf _
& "Damit gehen alle Einträge verloren.", vbYesNo + vbQuestion, "Aktuelles Jahr löschen") =  _
vbYes Then
frm_Jahr.Show
Application.Calculate
  ActiveWorkbook.Unprotect
lngYear = Sheets("Gesamtstunden").Range("B25")
For lngMonth = 1 To 12
ThisWorkbook.Names.Item(MonthName(lngMonth)).RefersTo = Array(False, False, False, False)
'Set wks = Sheets(Format(DateSerial(lngYear, lngMonth, 1), "mmmm"))
With Worksheets(MonthName(lngMonth))
.Unprotect
'Zellen leeren und Formate entfernen
With .Range("B12:C42")
.ClearContents
.Font.ColorIndex = xlAutomatic
.Font.Bold = False
.Interior.ColorIndex = xlNone
.ClearComments
End With
.Range("D12:E42,G12:L42,P12:U42,X12:X42,Z12:AK42").ClearContents
.Range("V10:W43").Interior.ColorIndex = 15
'vom 1.Tag des Monats bis zum letzten
For lngDay = 1 To Day(DateSerial(lngYear, lngMonth + 1, 0))
'Datum ermitteln
datDay = DateSerial(lngYear, lngMonth, lngDay)
'In 'Feietage' das Datum suchen
With Sheets("Feiertage").Range("Feiertage") '? Leerzeichen am Ende vom Bereichsnamen ? _
_
varFeiertage = Application.Match(CLng(CDate(datDay)), .Columns(2), 0)
If IsNumeric(varFeiertage) Then
'Tag ist Feiertag
strFeiertag = .Cells(varFeiertage, 1).Text
Else
'Tag ist kein Feiertag
strFeiertag = ""
End If
End With
'In 'Ferien' das Datum suchen - kleiner oder gleich
varFerien = Application.Match(CLng(datDay), _
Sheets("Ferien").Range("Bayern").Columns(1), 1)
bolHolyday = False
'Wenn Datum gefunden, dann vergeichen ob das Enddatum auch im Bereich liegt
If IsNumeric(varFerien) Then
bolHolyday = Sheets("Ferien").Range("Bayern").Cells(varFerien, 2) >= datDay
End If
'Die Datumszellen
With .Range(.Cells(lngDay + 11, 2), .Cells(lngDay + 11, 3))
.Value = datDay 'Datum eintragen
'Wenn Wochentag größer Freitag, dann rote Schriftfarbe
If Weekday(datDay, vbMonday) > 5 Or IsNumeric(varFeiertage) Then .Font.ColorIndex = 3
'Wenn Wochentag ist Sonntag oder es ist ein Feiertag, dann Fettschrift
.Font.Bold = Weekday(datDay, vbMonday) = 7 Or IsNumeric(varFeiertage)
'Wenn Datum innerhalb eines Ferienbereiches liegt, dann Hintergrund Hellgrün
If bolHolyday Then .Interior.Color = RGB(235, 241, 222)
'Wenn Datum ein Feiertag, dann Kommentar in Spalte B
If strFeiertag  "" Then
With .Range("A1")
'.Interior.Color = RGB(255, 255, 153) 'helles gelb
.AddComment strFeiertag
.Comment.Shape.TextFrame.AutoSize = True
.Comment.Shape.Fill.Transparency = 0
End With
End If
End With
Next
.Range("F12:F4,M12:M43,V12:W42").EnableSelection.Locked = True
.Protect
End With
Next
gobjRibbon.Invalidate
    ActiveWorkbook.Protect
'ActiveWorkbook.EnableSelection = xlUnlockedCells
Sheets("Januar").Select
Range("D12").Select
ERRORHANDLER:
If Err.Number  0 Then
MsgBox "Fehler in con_Jahr_neu" & vbLf & vbLf & "Prozedur:" & vbTab & "Neues_Jahr" & vbLf & _
"Nummer:" & vbTab & Err.Number & vbLf & "Meldung:" & vbTab & Err.Description & vbLf & _
IIf(Erl, "Zeile:" & vbTab & Erl, ""), vbExclamation, "Fehler!"
Err.Clear
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
.AskToUpdateLinks = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
End With
Else: Exit Sub
End If
End Sub

Wie man sieht, habe ich schon einiges versucht, komme aber nicht weiter.
Hat jemand eine Tipp?
Vielen Dank im Voraus.
Gruß
Peer

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen sperren in Schleife
14.11.2020 23:30:02
onur
Wo hast du DAS denn her:
Range("F12:F4,M12:M43,V12:W42").EnableSelection.Locked = True
?
Das kommt davon, wen man "On Error" als Universalrettung gegen Fehler benutzt, nur weil man nicht richtig programmieren kann. DER FEHLER IST IMMER NOCH DA, aber die Meldung wird unterdrückt und verursacht ganz woanders ganz andere Probleme.
Wenn du das mal ausschaltest, siehst du, wo der Fehler liegt.
1) .EnableSelection gilt nur für Blätter
2) .EnableSelection.LOCKED gibt es nicht.
AW: Zellen sperren in Schleife
15.11.2020 08:28:38
Peer
Hallo onur.
Die Zeile

Range("F12:F4,M12:M43,V12:W42").EnableSelection.Locked = True
war nur ein verzweifelter letzte Versuch.
Das ich programmieren kann, habe ich nicht behauptet. Ich denke, dass können nur wenige hier und suchen deshalb Hilfe.
Ich habe die Fehlermeldung deaktiviert und die Sub durchlaufen lassen. Fehler wurde keiner angezeigt. Die Zellen waren weiterhin auswählbar und überschreibbar.
Deiner Aussage nach, weiß ich jetzt, was nicht geht, aber nicht, was geht.
Im Internet habe ich einiges dazu gelesen und ausprobiert. Ich habe alle Tabellen einen Blattschutz verpasst und die relevanten Zellen vorher gesperrt. Nun nahm ich an, wenn die Sub durchläuft und dafür den Blattschutz kurz ausschaltet, das damit alles funktioniert.
Gruß
Peer
Anzeige
AW: Zellen sperren in Schleife
15.11.2020 11:03:59
Peer
Danke onur.
An das Archiv dachte ich nicht mehr. Die letzten Tage sind bei mir wie zugebrettert.
Dank für deine Recherche und Hilfe.
Schönen Sonntag.
Peer
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige