Microsoft Excel

Herbers Excel/VBA-Archiv

unmerge auf ganzes Blatt

Betrifft: unmerge auf ganzes Blatt von: yummi
Geschrieben am: 04.11.2014 01:00:53

Hallo zusammen,

Aufgabe ist es eine Arbeitsmappe "einzufrieren" so dass keine Änderungen mehr vorgenommen werden können (Reviewergebnis)

Das kann ich mit wks.Cells.Locked = true und anschliessendem Blattschutz auch wunderbar machen

Das Problem tritt dann auf, wenn in dem Sheet verbundenen Zellen vorhanden sind, dann funktioniert das lock nicht. Da ich aber nicht weiß wo auf dem Arbeitsblatt verbundene Zellen sind (sind auch jedes mal woanders, manchmal auch gar nicht) dachte ich mir ich mach ein unmerge damit das lock wieder geht.

Wenn ich jetzt aber ein wks.cells.unmerge dauert das ziemlich lange.

Daher meine Fragen:
Gibt es eine schnellere Methode?
Kann man abfragen, ob es verbundene Zellen auf einem Sheet gibt?

Vielen Dank für Eure Anregungen
yummi

  

Betrifft: 2x ja! von: Luc:-?
Geschrieben am: 04.11.2014 03:04:45

Warum so umständlich, Yummi?
Normalerweise sind doch alle Zellen (vor-)gesperrt, das gehört zu ihrem Format. Wird das Blatt geschützt, kannst du keine mehr ändern!
Wurde der Schutz für einige aufgehoben, kann man die Totalsperre für alle ganz einfach manuell wiederherstellen, indem man durch Klick auf die leere RahmenZelle links oben alle auswählt, Format wählt und das Sperrhäkchen unter Schutz setzt. Schon sind alle wieder gesperrt. Anschließend nur noch Blatt schützen.
Wenn du das unbedingt automatisieren willst, reicht ggf schon die Aufzeichnung dieses Vorgangs mit dem Makro-Recorder.
Merke: Die Zellen eines ZellVerbunds können zwar verschiedene Werte enthalten (der Klassiker nur 1.Zelle gefüllt, alle anderen leer bedeutet auch verschiedene Werte!), aber (in Xl!) stets nur ein Format, was man auch bemerkt, wenn man eine VerbundZelle zB rot färbt und dann den Verbund wieder aufhebt → alle Zellen sind (in Xl, nicht in LO/OO!) jetzt rot, auch, wenn sie vor dem Verbinden verschiedene Farben hatten und nicht nur farblos waren!
Morrn, Luc :-?


  

Betrifft: AW: 2x ja! von: yummi
Geschrieben am: 04.11.2014 08:28:25

Hallo Luc,

ich muss das automatisieren, weil es ein Review ist. Es gibt Unterschriftenfelder, wo die Leute eine elektronische Unterschrift hinterlegen, dass sie das 2. Sheet geprüft haben.
Das 2. Sheet soll dann, nach unterzeichnen, nicht mehr änderbar sein.

Das kann ich wie gesagt mit der locked Eigenschaft setzen. Wenn jetzt allerdings verbundene Zellen irgendwo auf dem Sheet sind, dann gibt es den Fehler, dass die locked Eigenschaft nicht gesetzt werden kann (ist auch beim händischen sperren so).

Deshalb will ich alle verbunden Zellen aufbrechen und zwar automatisch um sie alle sperren zu können. Es kann nämlich sein, dass nicht alle Zellen gesperrt sind. Darauf habe ich keinen Einfluss, weil das 2. Sheet in die Arbeitsmappe händisch reinkopiert wird vom 1. Reviewer.

Das Problem ist halt nur, dass das ziemlich lange dauern kann. Wie kann ich das beschleunigen?

Function SperreAlleZellen(ByVal wks As Worksheet)
Dim letztezeile As Long
Dim letztespalte As Long

    letztezeile = wks.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    letztespalte = wks.UsedRange.SpecialCells(xlCellTypeLastCell).Column
    wks.Range(wks.Cells(1, 1), wks.Cells(letztezeile, letztespalte)).UnMerge
    wks.Cells.Locked = True
End Function
Habe das jetzt so zeitoptimiert, geht schneller als das mit dem gesamten Blatt zu machen. Geht es noch schneller?

Gruß
yummi


  

Betrifft: Geht es noch schneller? von: Rudi Maintaire
Geschrieben am: 04.11.2014 10:10:07

Hallo,
schalte die autom. Berechnung zwischendurch ab. Und nat. wieder an!

Gruß
Rudi


  

Betrifft: AW: Geht es noch schneller? von: yummi
Geschrieben am: 04.11.2014 11:49:52

Danke Rudi,

gute Idee zusammen mit der Bereichsbeschränkung die ich vorher schon eingebaut habe geht es jetzt in akzeptabler Zeit.

Gruß
yummi


  

Betrifft: AW: Ohne die Zellverbünde aufzuheben von: Daniel
Geschrieben am: 04.11.2014 12:05:54

Hi

bei mir ist es in Excel 2010 nicht erforderlich, die Zellverbünde aufzuheben, wenn ich die Locked-Eigenschaft verändern will.
Man muss nur darauf achten, dass man von einem Zellverbund alle Zellen bearbeitet.
Der Fehler tritt auf, wenn man versucht einen Teil eines Zellverbundes zu verändern.

Worksheets("Tabelle1").Cells.Locked = True

sollte daher auch bei vorhandenen verbundenen Zellen problemlos funktionieren.
Da für alle Zellen dieselbe Formatierung gesetzt wird, geht das auch normalerweise recht schnell.


  

Betrifft: Eben, aber Yummi hat sich ja auf seine Idee ... von: Luc:-?
Geschrieben am: 04.11.2014 12:09:32

…versteift… ;->
Luc :-?


  

Betrifft: AW: Eben, aber Yummi hat sich ja auf seine Idee ... von: yummi
Geschrieben am: 04.11.2014 12:45:03

das hat nix mit versteift zu tun (auch nict mit beratungsresisten ;-))
Der Fehler ist ja real aufgetretten. Ich hab das ganze Blatt ausgewählt und locked auf true gesetzt und bekam die Meldung, dass die locked Eigenschaft nicht gesetzt werden kann.

Ohne verbundene Zellen geht's aber, daher die Idee es so zu machen

Bin immer offen für Ideen

Es funzt aber dank euren Hinweisen
yummi


  

Betrifft: Bei uns klappt das aber auch wie beschrieben... von: Luc:-?
Geschrieben am: 04.11.2014 12:47:27

Luc :-?


  

Betrifft: AW: Eben, aber Yummi hat sich ja auf seine Idee ... von: Daniel
Geschrieben am: 04.11.2014 13:04:20

Hi
dann zeig mal deine Datei, würde mich schon interessieren, was da die Ursache ist.
Texte kannst du ja löschen oder durch "x" ersetzen.

hast du eventuell versucht, den Code in einer früheren Excelversion laufen zu lassen?
Gruß Daniel


  

Betrifft: AW: Eben, aber Yummi hat sich ja auf seine Idee ... von: yummi
Geschrieben am: 04.11.2014 13:53:31

Hi,
hab die original Datei nicht hier, geht erst in ein paar Tagen.

Gruß
yummi