Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
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
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Änderung der Zeilenhöhe trotz Blattschutz

Änderung der Zeilenhöhe trotz Blattschutz
28.05.2006 02:38:08
Catie
Liebe Spezialisten,
ich verwende das unten stehende Makro in meiner Arbeitsmappe. Nun habe ich einige Zellen entsperrt, dafür dann das ganze Blatt gesperrt, d.h. man kann nur einige Zellen editieren. Dies behindert nun die Ausführung des Makros, es gibt eine Fehlermeldung. Das Makro soll dann prüfen ob das Blatt gesperrt ist. Wenn ja (was ja immer der Fall ist), soll es den Zellschutz vorübergehend freigeben und die Änderung der Zeilenhöhe erlauben. Wäre sehr schön, wenn mir jemand das anpassen könnte.
Und hier das Makro:

Sub autofitXLMergedCells()
'Passt Zeilenhöhe an den Text innerhalb von verbundenen Zellen im selektierten Bereich an
'(Die Autofit-Methode des Excel-Range-Objektes funktioniert für verbundene Zellen nicht)
On Error GoTo Err_autofitXLMergedCells
Dim lo_CurRange As Excel.Range
Dim lsg_SumCellWidths As Single
Dim lsg_OriginalWidthFirstCol As Single
Dim lsg_NewRowHeight As Single
Dim li_MergedCellsCount As Integer
With Selection
If .MergeCells Then
If .Rows.Count = 1 And .WrapText = True Then
lsg_OriginalWidthFirstCol = .Cells(, 1).ColumnWidth
'Einzelzellbreiten und Breiten der Gitterlinien summieren
For Each lo_CurRange In Selection
lsg_SumCellWidths = lo_CurRange.ColumnWidth + lsg_SumCellWidths
li_MergedCellsCount = li_MergedCellsCount + 1
Next
lsg_SumCellWidths = lsg_SumCellWidths + (li_MergedCellsCount - 1) * 0.71
'Verbindung der Zellen aufheben, erste (datentragende) Zelle auf Gesamtbreite ausdehnen und
'Höhe anpassen über Standardmethode
.MergeCells = False
.Cells(1).ColumnWidth = lsg_SumCellWidths
.EntireRow.AutoFit
'Resultierende Zeilenhöhe merken, erste Zelle zurücksetzen, Verbindung wiederherstellen, Höhe anpassen
lsg_NewRowHeight = .RowHeight + 15
.Cells(1).ColumnWidth = lsg_OriginalWidthFirstCol
.MergeCells = True
.RowHeight = lsg_NewRowHeight
End If
End If
End With
Exit Sub
'Nur für's Debuggen
Resume
Err_autofitXLMergedCells:
MsgBox Err.Number & ": " & Err.Description
End Sub

Gruss
Catie

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderung der Zeilenhöhe trotz Blattschutz
28.05.2006 07:39:13
Bernd

moin catie,


füge am anfang deines code diese zeile ein:
ActiveSheet.Unprotect password:="DeinPasswort"
'hebt den blattschutz auf


und am ende:
ActiveSheet.Protect password:="DeinPasswort"
'setzt den blattschutz wieder


gruss bernd


AW: Änderung der Zeilenhöhe trotz Blattschutz
28.05.2006 09:42:02
WernerB,
Hallo Catie,
so kannst Du feststellen, ob der Blattschutz für das aktive Blatt aktiviert ist und dann ggf. entsprechend (siehe auch Vorschlag von Bernd) darauf reagieren:

Sub Catie()
If ActiveSheet.ProtectContents Then
MsgBox "Blattschutz ist gesetzt !"
rlse
MsgBox "Blattschutz ist nicht gesetzt !"
End If
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
AW: Änderung der Zeilenhöhe trotz Blattschutz
05.06.2006 03:34:31
Catie
Hallo WernerB
Ich entschuldige mich schon mal, daß ich 1. so spät Rückmeldung gebe und 2. wahrscheinlich an falscher Stelle. Habe nach Windows-Neuinstallation nicht gleich den richtigen Thread gefunden. Hoffe, ihr lieben Helfer könnt es trotzdem zuordnen:
Habe eure Angaben befolgt und erhalte immer nur eine Fehlermeldung, die da heisst:
1004: Die MergeCells-Eigenschaft des Range-Objektes kann nicht festgelegt werden. Das hat sicher mit den verbundenen Zellen zu tun, vor denen WernerB so gewarnt hat.
Ich hab's nun so gemacht, dass ich beim Entsperren der relevanten Zellen auch einige "Zellen-" und "Zeilenformatierung" zugelassen habe. Das scheint mein Problem zu lösen.
Vielen Dank an die Ratgeber, es werden sicher noch mehr Fragen auftauchen, wenn das Ding mal implementiert wird.
Gruß
Catie
Anzeige
AW: Änderung der Zeilenhöhe trotz Blattschutz
31.05.2006 11:22:26
Catie
Hallo,
sorry, daß ich mich erst jetzt zurückmelde, hatte einige Zeit keinen Netzzugang.
Habs ausprobiert, aber der von euch genannte Eintrag müsste noch dahingehend ergänzt werden, daß nur diejenigen Zellen im Blatt gesperrt werden, die in den Zellformaten bei Schutz "locked" sind. Ansonsten wird mir ja das ganze Blatt gesperrt. Das müsste gehen, habe in der Hilfe sowas gesehen, weiss aber nicht wie man den Befehl schreibt.
Gruß
Catie
AW: Änderung der Zeilenhöhe trotz Blattschutz
31.05.2006 13:00:29
WernerB.
Hallo Catie,
Deine Aussage "Ansonsten wird mir ja das ganze Blatt gesperrt" lässt in mir den Verdacht aufkeimen, dass Du grundsätzliche Probleme bei der Vorgehensweise mit dem Blattschutz hast.
Zunächst mal sind in jedem Tabellenblatt alle Zellen "von Haus aus" so eingestellt, dass sie bei Aktivierung des Blattschutzes gesperrt ("locked") sind.
Wenn Du einzelne Zellen vom Blattschutz ausnehmen (Inhalte sollen editierbar sein) willst, dann musst Du sie markieren und kannst dann über
Format / Zellen / Schutz
das Häkchen bei "gesperrt" rausnehmen ("unlocked").
Wenn danach der Blattschutz aktiviert wird, so kann man nur noch in den so eingestellten Zellen auch inhaltliche Veränderungen vornehmen.
Wenn Du noch weitere Fragen dazu hast, dann melde Dich einfach noch mal.
Gruß
WernerB.
Anzeige
AW: Änderung der Zeilenhöhe trotz Blattschutz
31.05.2006 16:28:38
Catie
Hallo WernerB,
"über
Format / Zellen / Schutz
das Häkchen bei "gesperrt" rausnehmen ("unlocked")."
Genau das habe ich gemacht und nur die unlocked Zellen sind editierbar. Nachdem der Blattschutz wieder aktiviert wird, ist diejenige (verbundene) Zelle (unlocked) nach dem Durchlauf der Zeilenhöhenanpassung per Makro (s. oben) aber auch locked.
Ich hoffe, der Satz ist verständlich so.
Gruß
Catie
AW: Änderung der Zeilenhöhe trotz Blattschutz
01.06.2006 07:33:02
WernerB.
Hallo Catie,
ich habe mich - zugegeben - vorher nicht mit dem Inhalt Deines Makros befasst, sondern mich allein auf das Aus- bzw. Einschalten des Blattschutzes konzentriert.
Verbundene Zellen sind - sehr vorsichtig ausgedrückt - nicht besonders Makro-Tauglich; von daher vermeide ich sie wie der Teufel das Weihwasser.
In Deinem Fall habe ich das Makro mal (ungetestet) wie folgt ergänzt:
1. Am Anfang Abfrage, ob Blattschutz aktiviert; falls ja, wird dieser aufgehoben.
2. Am Ende wird der Blattschutz (wieder) aktiviert.
3. Vor dem Auflösen der verbundenen Zellen Abfrage, ob Zellschutz aufgehoben ist.
4. Nach dem (Wieder-)Generieren der verbundenen Zellen wird der Zellschutz ggf. wieder aufgehoben.
Zu 1. und 2.: Hier musst Du jeweils noch den Text "DeinPasswort" durch Dein eigenes Passwort (in Anführungszeichen !) ersetzen.

Sub autofitXLMergedCells()
'Passt Zeilenhöhe an den Text innerhalb von verbundenen Zellen im selektierten Bereich an
'(Die Autofit-Methode des Excel-Range-Objektes funktioniert für verbundene Zellen nicht)
On Error GoTo Err_autofitXLMergedCells
Dim lo_CurRange As Excel.Range
Dim lsg_SumCellWidths As Single
Dim lsg_OriginalWidthFirstCol As Single
Dim lsg_NewRowHeight As Single
Dim li_MergedCellsCount As Integer
Dim Zs As Boolean
If ActiveSheet.ProtectContents Then ActiveSheet.Unprotect Password:="DeinPasswort"
With Selection
If .MergeCells Then
If .Rows.Count = 1 And .WrapText = True Then
lsg_OriginalWidthFirstCol = .Cells(, 1).ColumnWidth
'Einzelzellbreiten und Breiten der Gitterlinien summieren
For Each lo_CurRange In Selection
lsg_SumCellWidths = lo_CurRange.ColumnWidth + lsg_SumCellWidths
li_MergedCellsCount = li_MergedCellsCount + 1
Next
lsg_SumCellWidths = lsg_SumCellWidths + (li_MergedCellsCount - 1) * 0.71
'Verbindung der Zellen aufheben, erste (datentragende) Zelle auf Gesamtbreite ausdehnen und
'Höhe anpassen über Standardmethode
If .Locked = False Then Zs = True
.MergeCells = False
.Cells(1).ColumnWidth = lsg_SumCellWidths
.EntireRow.AutoFit
'Resultierende Zeilenhöhe merken, erste Zelle zurücksetzen, Verbindung wiederherstellen, Höhe anpassen
lsg_NewRowHeight = .RowHeight + 15
.Cells(1).ColumnWidth = lsg_OriginalWidthFirstCol
.MergeCells = True
If Zs = True Then .Locked = False
.RowHeight = lsg_NewRowHeight
End If
End If
End With
ActiveSheet.Protect Password:="DeinPasswort"
Exit Sub
'Nur für's Debuggen
Resume
Err_autofitXLMergedCells:
MsgBox Err.Number & ": " & Err.Description
End Sub

Ich hoffe, das Makro funktioniert so wie gewünscht; ich habe es wie bereits eingangs erwähnt, nicht getestet.
Gruß
WernerB.
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige