Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1668to1672
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
Inhaltsverzeichnis

VBA - Reiter entnehmen und Schreibschutz

VBA - Reiter entnehmen und Schreibschutz
18.01.2019 10:57:32
Leonie
Hallo zusammen,
ich bin noch sehr unerfahren im Umgang mit VBA. Grundsätzlich habe ich Programmierkenntnisse in anderen Sprachen, aber mit den VBA-Eigenheiten hapert es doch noch.
Folgendes Problem: Ich möchte aus einer Excel-Mappe 4 Reiter in eine neue Datei kopieren und _
diese neue Datei dann mit einem Schreibschutz versehen. Dazu gab es bereits eine alte Version _
des VBA-Codes, den ich jetzt weiter verändern soll. Davor würde ich aber gerne das Original _
verstehen:

Sub DateiErstellen()
Dim Dateiname As String
Dim tbl As Worksheet
Dim Zelle As Range
Dim Datei_Name
Dateiname = ThisWorkbook.Name
Sheets(Array("Blatt1", "Blatt2",_
"Blatt3", "Blatt4")).Copy
Application.ScreenUpdating = False
For Each tbl In ActiveWorkbook.Worksheets
tbl.Activate
tbl.Unprotect Password:=""
Cells.Select
Selection.Locked = True
ActiveSheet.UsedRange.Select
On Error Resume Next
Selection.SpecialCells(xlCellTypeFormulas)_
.Select
For Each Zelle In Selection
Zelle.Value = Zelle.Value
Next Zelle
Next tbl
For Each tbl In ActiveWorkbook.Worksheets
tbl.Activate
ActiveSheet.UsedRange.Select
Selection.Copy
Selection.Paste
tbl.Protect Password:="test"
ActiveSheet.Range("A1").Select
Next tbl
Application.ScreenUpdating = True
Sheets("Blatt1").Select
Datei_Name =_
Left(Dateiname, Len(Dateiname) - 5) & ".xlsx"
abbr = Application.Dialogs(xlDialogSaveAs)_
.Show(Datei_Name, , , , "test")
If abbr = False Then
MsgBox ("Makro abgebrochen")
ActiveWorkbook.Close SaveChanges:=False
Exit Sub
End If
ActiveWorkbook.Close
MsgBox ("Neue Datei wurde erstellt")
End Sub

Meine Fragen dazu:
1. Macht für mich die Zuweisung Zelle.Value=Zelle.Value keinen Sinn. Wieso weise ich der Zelle den gleichen Wert nochmal zu?
2. Wieso brauche ich sowohl den "Selection.Locked"-Befehl als auch den Protect-Befehl? Ich hätte ja gedacht dass ich nur Protect brauche, aber ohne locked kommt eine Fehlermeldung.
Wenn ich die neu erstellte Datei öffne, dann kann ich zwar über das aufploppende Dialogfenster das Passwort zum Aufhaben des Schreibschutzes eingeben, aber man kann danach trotzdem nichts an den Reitern verändern.
Über ein paar Erklärungen würe ich mich freuen, Danke!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 11:53:32
Rudi
Hallo,
1. Zelle.Value=Zelle.Value ersetzt die Formel einer Zelle durch das Ergebnis. Ist die faule Variante von
Zelle.Copy
Zelle.PasteSpecial xlPasteValues

2. .Locked setzt die Gesperrt-Eigenschaft der Zelle auf WAHR. Wirksam wird das erst beim Setzen des Blattschutzes. Siehe Tab 'Schutz' im Dialog 'Zellen formatieren'.
Gruß
Rudi
Probleme mit VBA Termin zu Outlook
18.01.2019 11:58:37
Michael
Guten Tag Herr Maintaire,
ich bin mir nicht sicher ob mein Problem schon an sie rangetragen wurde.
Aber in meinem Beitrag komme ich nicht weiter und so ziemlich am verzweifeln.
Wäre es eventuell möglich meinen Beitrag sich anzunehmen?
Für einen Profi ist es vielleicht ganz einfach.
Viele Grüße
Michael Pattis
Mein Beitrag:
https://www.herber.de/forum/messages/1668566.html
Anzeige
AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 12:11:19
Leonie
Vielen Dank soweit,Rudi :)
Könnte ich die beiden äußeren For Each-Schleifen dann gleichwertig durch Folgendes ersetzen:
For Each tbl In ActiveWorkbook.Worksheets
tbl.Activate
tbl.Unprotect Password:=""
Cells.Select
Selection.Locked = True
ActiveSheet.UsedRange.Cells = ActiveSheet.UsedRange.Cells.Value
tbl.Protect Password:="test"
ActiveSheet.Range("A1").Select
Next tbl
Dazu noch folgende Fragen:
1. Funktioniert Protect also nur, wenn ich auch die Zellen noch per Locked sperre, oder würde es auch nur mit Protect funktionieren? Bei mir klappt es nicht, aber könnte ja auch an einem Syntaxfehler liegen.
2. Das Problem mit dem Schreibschutz, der nach Eingabe des Passwortes nach Öffnen des Dokuments nicht aufgehoben ist, besteht aber immer noch. Hat da jemand eine Idee? Ich finde es nicht zufriedenstellend, wenn man beim Öffnen das Passwort eingibt um den Schutz aufzuheben und dann den Blattschutz trotzdem nochmal manuell aufheben muss.
Anzeige
AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 12:20:13
Leonie
Und noch eine Frage: Ich denke ich habe verstanden was mit Zelle.Value=Zelle.Value erreicht wird, aber noch nicht warum. Ich möchte es gerne verstehen. Wieso ist Zelle.Value einmal eine Formel und einmal ein Wert (Ergebnis der Formel)?
AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 12:41:26
Rudi
Hallo,
Könnte ich die beiden äußeren For Each-Schleifen dann gleichwertig durch Folgendes ersetzen:
warum probierst du das nicht einfach aus?
1. das sind doch grundlegende Mechanismen, die man bei 'Excel gut' kennen sollte.
In einem neuen Blatt/ Mappe sind alle Zellen gesperrt. Das wird aber nur wirksam, wenn der Blattschutz gesetzt ist. Will man trotz Blattschutz die Bearbeitung einzelner Zellen/ Bereiche erlauben, muss man vorher die Sperre entfernen.
2. Anscheinend hast du noch einen Schreibschutz auf der Mappe. Der hat mit dem Blattschutz nichts zu tun.
.Value ist immer der Wert.
Anzeige
AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 13:07:33
Leonie
Tatsächlich habe ich es ausprobiert und der Output sieht für mich identisch aus. Ich frage, da ich nicht weiß ob sich irgendwelche "nicht sichtbaren" Unterschiede verstecken. Nach deinem Kommentar gehe ich aber davon aus, dass dies nicht der Fall ist.
das sind doch grundlegende Mechanismen, die man bei 'Excel gut' kennen sollte.

Das sehe ich anders. "Gut" bedeutet, dass man viele Funktionen/Eigenschaften kennt, aber eben nicht alle (sonst hätte ich Profi angegeben). Bei Formeln/Komplexen Berechnungen macht mir keiner so schnell was vor. Solche "Spielereien" wie Blattschutz habe ich bisher einfach nie gebraucht und versuche ja gerade mich einzuarbeiten und zu verstehen.
Wenn Cells.Value IMMER der Wert ist, dann macht die Zuweisung Zellen.Value=Zellen.Value keinen Sinn, weil ich dann einen Wert durch den gleichen Wert ersetze. Da hier das Ziel ist, eine hinterliegende Formel durch das Ergebnis zu ersetzen muss das erste Zellen.Value doch die hinterliegende Formel ansprechen.
Sorry wenn ich es so genau nehme, ich halte nichts davon einfach Code zu kopieren den ich nicht gänzlich verstehe.
Anzeige
AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 13:20:33
Werner
Hallo Leonie,
mit Cells.Value sprichst du den Wert in der Zelle an und nicht die Formel, die diesen Wert erzeugt. Durch das Cells.Value = Cells.Value wir halt einfach die Formel durch ihren Wert ersetzt. Ergebnis: Formelwert steht in der Zelle und die Formel ist weg.
Gruß Werner
AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 13:24:53
Leonie
Dann muss ich vielleicht einfach akzeptieren, dass VBA hier anders funktioniert als andere Programmiersprachen ;)
Danke Euch beiden für die Erklärungen!
Gerne u. Danke für die Rückmeldung. o.w.T.
18.01.2019 13:44:07
Werner
AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 14:03:19
EtoPHG
Hallo Leonie,
..., dass VBA hier anders funktioniert als andere Programmiersprachen
Was für Programmiersprachen kennst du denn? und wie funktionieren dort Eigenschaft-Manipulationen von Objekten?
Einige Informationen für einen XL-Formel-Profi ;-)
Tatsache ist, das .Value eine Eigenschaft (property) eines Bereich-Objekts (Range) ist. Die Eigenschaft enthält das Resultat einer Formel oder einen fix eingegebenen Wert (Zahl oder String). Diese Eigenschaft 'überschneidet' sich mit der Eigenschaft .Text (der formatierte Wert von .Value) und der Eigenschaft .Formula (wenn eine Formel, beginnend mit = ,in der Zelle steht, sonst der fixe Wert).
Durch die Zuweisung .Value = .Value wird die Eigenschaft .Formula zu einem fixen Wert!
Gruess Hansueli
Anzeige
Entspricht Kopieren-Einfügen (Werte) ìn XL (owT)
18.01.2019 14:09:02
EtoPHG

AW: VBA - Reiter entnehmen und Schreibschutz
18.01.2019 14:15:09
Leonie
Das ist eine gute Erklärung, vor allem der Verweis auf .Formular und .Text hat mir geholfen. Vielen Dank!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige