Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1456to1460
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 Blattschutz

VBA Blattschutz
09.11.2015 11:36:32
Matthias
Hallo,
ich habe folgendes Problem und zwar habe ich in meinem Blatt folgendes makro:
Public Function TakeComment(rngQuelle As Range, Optional rngZiel As Range)
If rngZiel Is Nothing Then
Set rngZiel = Application.Caller
End If
With rngZiel
If Not .Comment Is Nothing Then
.Comment.Delete
End If
.AddComment rngQuelle(1, 1).Text
End With
End Function
das Funktioniert auch sehr gut, solange es keinen Blattschutz gibt.
Wie bekomme ich den Blattschutz nun aufgehoben, das Makro ausgeführt und danach den Blattschutz wieder gesetzt.
Das ganze soll automatisch ausgeführt werden.
Hoffe mir kann jemand helfen.
LG

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Blattschutz
09.11.2015 11:39:06
Bernd
Hie,
mit:
ActiveSheet.Unprotect Password:="Dein Passwort"
ActiveSheet.Protect Password:="Dein Passwort"
mfg Bernd

AW: VBA Blattschutz
09.11.2015 11:40:54
Matthias
Ja, das hab ich schon rausgefunden, allerdings meckert er bei mir, wegen Sub.
Wie müsste mien Kompletter Code den ausehen, ich probiere schon seit stunden.

AW: VBA Blattschutz
09.11.2015 11:50:53
Martin
Ich kenn mich mit VBA auch nicht wirklich aus aber sowas hab ich schon mal gebraucht. Versuch mal:
Public Function TakeComment(rngQuelle As Range, Optional rngZiel As Range)
ActiveSheet.Unprotect Password:="Dein Passwort"
If rngZiel Is Nothing Then
Set rngZiel = Application.Caller
End If
With rngZiel
If Not .Comment Is Nothing Then
.Comment.Delete
End If
.AddComment rngQuelle(1, 1).Text
End With
ActiveSheet.Protect Password:="Dein Passwort"
End Function
Falls das nicht geht muss jemand anderes helfen...

Anzeige
AW: VBA Blattschutz
09.11.2015 11:56:42
Matthias
leider nicht, ich verzweifel noch.

AW: VBA Blattschutz
09.11.2015 12:55:45
MatthiasG
Hallo Matthias,
das Problem ist, dass deine Funktion TakeComment() offenbar in einer Zelle als Formel steht und durch Änderung eines Zellbezuges aufgerufen wird.
Ich kenne die Details nicht, aber innerhalb einer Funktion (wenn sie von einer Formel in einer Excel-Zelle aufgerufen wird) kann man keine anderen Zellen manipulieren und offenbar auch den Blattschutz-Status nicht ändern.
Mich wundert es da schon, dass man immerhin den Zellkommentar ändern kann.
siehe z.B. auch hier:
http://www.office-loesung.de/ftopic202630_0_0_asc.php
Du müsstest dann also mit dem Change- oder Calculate-Ereignis arbeiten.
Gruß Matthias

Anzeige
AW: VBA Blattschutz
09.11.2015 13:00:27
Matthias
Im Grunde funktioniert ja alles, es muss nur folgendes noch Passieren,
Es muss automatisch der Blattschutz aufgehoben werden, dann mein Makro ausgeführt werden und danach automatisch das blatt wieder geschützt werden.
Ich bekomme hin, das der Blattschutz aufgehoben wird, das Makro ausgeführt wird, bekomme das Blatt aber nicht wieder automatisch geschützt. Mein Derzeitiger Code sieht so aus :
Sub Auto_Open()
Call aufheben
End Sub Sub aufheben()
ActiveSheet.Unprotect 123456
End Sub
Public Function TakeComment(rngQuelle As Range, Optional rngZiel As Range)
If rngZiel Is Nothing Then
Set rngZiel = Application.Caller
End If
With rngZiel
If Not .Comment Is Nothing Then
.Comment.Delete
End If
.AddComment rngQuelle(1, 1).Text
End With
End Function

Sub schutz()
ActiveSheet.Protect 123456
End Sub

Anzeige
AW: VBA Blattschutz
09.11.2015 13:05:24
MatthiasG
Hallo,
heißt das, die Funktion steht nicht in einer Formel und wird nur einmalig beim Öffnen der Mappe aufgerufen?
Gruß Matthias

AW: VBA Blattschutz
09.11.2015 13:07:03
Matthias
Ja genau,
Aufgerufen wird es mit
=TakeComment(A1;C1)
Allerdings nur beim 1 starten von Excel, veränderungen werden erst nach neustart übernommen, ist auch ok so, das funktioniert aber nur bei nicht geschütztem Arbeitsblatt.

AW: VBA Blattschutz
09.11.2015 13:32:23
MatthiasG
Hallo,
also steht's doch in einer Formel.
Wenn die Berechnung sowieso nur einmal beim Öffnen durchgeführt werden soll, dann versuch' mal folgendes:

Sub Auto_Open()
Call aufheben
'Alles neu berechnen:
Application.CalculateFull
'warten, bis alles berechnet ist:
Do
DoEvents
Loop Until Application.CalculationState = xlDone
Call schutz
End Sub
Public Function TakeComment(rngQuelle As Range, Optional rngZiel As Range)
If rngZiel Is Nothing Then
Set rngZiel = Application.Caller
End If
With rngZiel
If Not .Comment Is Nothing Then
.Comment.Delete
End If
.AddComment rngQuelle(1, 1).Text
End With
End Function
Sub aufheben()
ActiveSheet.Unprotect Password:="123456"
End Sub
Sub schutz()
ActiveSheet.Protect Password:="123456", Userinterfaceonly:=True
End Sub

Übrigens ist Auto_Open() nicht mehr üblich, man sollte eigentlich im Modul "DieseArbeitsmappe" das Workbook_Open()-Ereignis verwenden. Das wird nur noch aus Kompatibilitätsgründen unterstützt.
Gruß Matthias

Anzeige
AW: VBA Blattschutz
09.11.2015 13:35:40
MatthiasG
Noch ne Frage:
Was steht eigentlich als Ergebnis in der Zelle mit =TakeComment()?
Da wird ja gar kein Wert zugewiesen.

AW: VBA Blattschutz
09.11.2015 13:03:01
Tino
Hallo,
Evtl. mal so versuchen.
Public Function TakeComment(rngQuelle As Range, Optional rngZiel As Range)
If rngZiel Is Nothing Then
Set rngZiel = Application.Caller
End If
With rngZiel
.Parent.Unprotect Password:="Dein Passwort"
If Not .Comment Is Nothing Then
.Comment.Delete
End If
.AddComment rngQuelle(1, 1).text
.Parent.Protect Password:="Dein Passwort"
End With
End Function
Von wo wird diese Function aufgerufen?
Wenn die Function aus einer Zelle aufgerufen wird, hast Du schlechte Karten.
Dann würde ich über ein Eventmakro gehen! (Worksheet_Change)
Gruß Tino
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige