Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1120to1124
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

Code stoppt bei Locked

Code stoppt bei Locked
Jörg-HH
Hallo Leute,
ist mir ein Rätsel: der Code stoppt in der ersten Locked-Zeile... kann jemand sagen, warum?
Application.EnableEvents = False
With ThisWorkbook.Worksheets("Formular").Range("C2")
.Locked = False
.Value = strAnbieterName
.Locked = True
End With
'ThisWorkbook.Worksheets("Formular").Range(wsConfig.Range("AQ26").Value).Value = strAnbieterName 'geht nicht - wieso?
Application.EnableEvents = True
Grüße - Jörg
Blattschutz?
Erich
Hi Jörg,
ist ein Blattschutz aktiv?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Blattschutz ja
Jörg-HH
Hallo Erich,
ja - Blatt und Mappe. Aber das Paßwort habe ich leergelassen (also nicht "leer", sondern keine Eingabe)
Vorher hatte ich mit ThisWorkbook.Worksheets("Formular").unprotect versucht, ging aber auch nicht.
Grüße - Jörg
PS zu Blattschutz?
Jörg-HH
...ich habe in einem anderen Modul Dim PW as String für das Paßwort gesetzt. Würde es was helfen, wenn ich dort statt dessen Public PW as String schreibe und dann in diesem Modul .Unprotect PW ?
Jörg
UserInterfaceOnly
Erich
Hi Jörg,
du kannst nicht Zellen entsperren, solange das Blatt geschützt ist.
Und du kannst nicht den Blattschutz aufheben, solange die Mappe geschützt ist.
Also entweder du hebst die Schutze "von oben herab" auf - oder du beschäftigst dich besser mit
UserInterfaceOnly - such mal danach bei "Alle Recherchen".
Wenn du damit den Blattschutz einrichtest, hast du in Makros ein Problem weniger.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.:
Wenn du so etwas schreibst: "der Code stoppt" oder "ging aber auch nicht",
verursachst du vielleicht unnötiges Rätselraten.
Wenn etwas nicht funzt:
Wie lautet die Fehlermeldung (mit Nummer)?
In welcher Codezeile tritt der Fehler auf? (Das hattest du angegeben :-))
Anzeige
AW: UserInterfaceOnly
Jörg-HH
Hi Erich,
der Button Alle Recherchen setzt bei mir nichts in Bewegung - das war mir schon mal vor etlichen Wochen aufgefallen. Ich werde morgen mal nach UserInterfaceOnly graben...
Hier nochmal zum Ablauf:
Ich vergebe in einem Modul ein Paßwort. Das habe ich dort mit Public PW as String deklariert.
PW = InputBox("Vergeben Sie nun ein Passwort", "Abschluss")
wsFormular.Protect PW
ThisWorkbook.Protect PW
ActiveWorkbook.Save
An dieser Stelle wird mir PW in der Überwachung als Leer angezeigt.
bei späterem geschütztem Öffnen der Datei durch den User soll in DieseArbeitsmappe ein Code laufen, der eine Eingabe (StrAnbieterName) abfragt, die in eine geschützte Zelle eingespeist wird. Neueste Variante ist diese:
Application.EnableEvents = False
ThisWorkbook.Unprotect PW
With Tabelle93
.Unprotect PW
.Range("C2").Value = strAnbieterName
.Protect PW
End With
ThisWorkbook.Protect PW
Application.EnableEvents = True
Ich bekomme gemeldet, daß das PW falsch sei. Warum ist es denn nicht verfügbar? Wenn ich die Datei entsperre, muß ich es doch auch eingeben, und es wird akzeptiert?
...naja - jetzt gehma erstmal inne Heia...
Gute Nacht
Jörg
Anzeige
neuer Versuch...
Jörg-HH
Hallo Erich und alle anderen,
zwischenzeitlich habe ich mich über UserInerfaceOnly schlau gemacht und ein paar Kleinigkeiten geändert. Ergebnisse:
Ohne UserInterfaceOnly wollte man mir an der Stelle ThisWorkbook.Unprotect Password:=PW, also da, wo zwei Schritte weiter was in die Zelle C2 reingeschrieben wird, immer erzählen, das PW sei falsch.
Mit UserInterfaceOnly kommt nun immer die Fehlermeldung "Benanntes Argument nicht gefunden", und markiert wird UserInterfaceOnly:=
Was ich nicht verstehe: PW wird mir schon gleich nach der Eingabe überall als "leer" angezeigt - ich denke, ich hab das doch Public deklariert - ist es da nicht überall bekannt?
Hier habe ich mal zusammengestellt, was an Code diesbezüglich vorhanden ist und wo es steht - vielleicht könnt ihr so erkennen, wo der Knoten liegt?
Vielen Dank schon mal für eure Ideen...
Jörg
in einem globalen Modul:
Public strAnbieterName As Variant     'zu Namenseingabe der Anbieter in DieseArbeitsmappe
Aufruf im Blatt ToDo:
Private Sub CmBtFormularVersenden_Click()
Me.CmBtFormularVersenden.Enabled = False
modAusschreibgEinrichten.ToDo_Formular_versandfertig
Me.CmBtFormularVersenden.Enabled = True
im Modul AusschreibungEinrichten:
Public PW As String
Dim wsFormular As Worksheet
Option Explicit
Public Sub ToDo_Formular_versandfertig()
Set wsFormular = ThisWorkbook.Worksheets("Formular")
PW = InputBox("Vergeben Sie nun ein Passwort", "Abschluss")
wsFormular.Protect Password:=PW, UserInterfaceOnly:=True
ThisWorkbook.Protect Password:=PW, UserInterfaceOnly:=True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ActiveWorkbook
.Names.Add Name:="Ausschreibung.Projekt", RefersTo:="=""" & ProjName & """"
.Names.Add Name:="Ausschreibung.TP", RefersTo:="=""" & TPName & """"
.Names.Add Name:="Ausschreibung.Anbieter", RefersTo:="=""" & strAnbieterName & """"
End With
End Sub
in DieseArbeitsmappe:
Private Sub Workbook_Open()
'Informationen aus Namen und Vorversionen einlesen
ProjName = ThisWorkbook.Names("Ausschreibung.Projekt").Value
ProjName = Mid(ProjName, 3, Len(ProjName) - 3)
TPName = ThisWorkbook.Names("Ausschreibung.TP").Value
TPName = Mid(TPName, 3, Len(TPName) - 3)
strAnbieterName = ThisWorkbook.Worksheets("Formular").Range("C2").Value
If ThisWorkbook.Worksheets("Formular").Range("C2").Value  "" Then
MsgBox "Name schon drin"
GoTo hier
Else                                                'Input "...bitte Name in Kurzform..."
strAnbieterName = Application.InputBox(Tabelle93.Range("sprNameKurzf").Value, Tabelle93.Range( _
"sprRegistr").Value)
End If
ThisWorkbook.Unprotect Password:=PW
With Tabelle93
.Unprotect Password:=PW
.Range("C2").Value = strAnbieterName
.Protect Password:=PW
End With
ThisWorkbook.Protect Password:=PW
End Sub

Anzeige
Der Sinn von UserInterfaceOnly besteht...
UserInterfaceOnly
...eigentlich darin, Jörg,
den Passwortschutz nicht aufheben zu müssen, wenn eine Subroutine was am Blatt ändern will — sie darf das nämlich so auch bei PW-Schutz, nur der User eben nicht; seine Schnittstelle (Interface) bleibt weiter gesperrt...
Gruß Luc :-?
dann kann ich Unproptect usw ja entsorgen
Jörg-HH
...ja, Luc, logisch - daran hab ich nicht gedacht - da kann ich ja bei der Einfügung in C2 in DieseArbeitsmappe das Unprotect usw... rausnehmen.
Bleibt aber die Frage, wieso ich gar nicht erst bis dahin komme, weil UserInterfaceOnly schon bemeckert wird. Hab ich irgendwo was zu deklarieren vergessen oder so?
Grüße - Jörg
Anzeige
Keine Ahnung! Aber bei Option Explicit...
Luc:-?
...wird dir das doch angezeigt, Jörg...!?
Gruß Luc :-?
AW: neuer Versuch...
Erich
Hi Jörg,
da gibt es ein grundlegendes Verständnisproblem.
In ToDo_Formular_versandfertig() gibt der User ein Passwort ein.
Das befindet sich in der Variablen PW.
Mit der Variablen werden Blatt und Mappe geschützt.
An dieser Stelle ist "UserInterfaceOnly:=True" evtl. überflüssig.
Es ist nur dann sinnvoll, wenn VOR DEM SCHLIESSEN der Mappe
nach Makroaktionen in geschützten Bereichen stattfinden sollen.
Nun wird die Mappe geschlossen. Damit gibt es auch keine Variable PW mehr.
Beim späteren Öffnen der Mappe wird wieder eine Public-Variable PW neu angelegt.
Sie hat zunächst nur den Initialwert eines Strings, die leere Zeichenkette.
Dass vorher - vor dem vergangenen Schließen der Mappe - PW einmal einen anderen Wert hatte,
kann hier nicht mehr bekannt sein.
Wenn du dein Passwort von einer Sitzung in die nächste rüberretten willst,
musst du dafür sorgen, dass der Wert
- vor dem Schließen irgendwo auf deiner Festplatte (oder sonstwo) gespeichert
- und nach dem Wieder-Öffnen gelesen wird.
Genau das machst du ja z. B. mit ProjName und TPName.


Mir ist noch nicht klar, was genau du erreichen möchtest.
Der User vergibt ein Passwort und speichert die Mappe.
Dann sollte er beim Öffnen das Passwort wieder wissen, oder?
Die Speicherung eines Passworts kann gefährlich sein.
Auch ein Workbook_Open() sollte kein Passwort kennen.
Hier wäre es sinnvoll - nachdem wenn strXY eingegeben wurde,
die Zeile
ActiveSheet.Protect Password:=strXY, UserInterfaceOnly:=True
hinzuschreiben.
Damit wird der Schutz für Makros ausgeschaltet - solange die Mappe offen ist
und kein neuer Schutz eingerichtet wird.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
noch ne Erläuterung...
Jörg-HH
Erich, ich hab noch zu wenig erzählt:
Der User (=mein Chef) erzeugt per Button Private Sub CmBtFormularVersenden_Click() ein Ausschreibungsformular, das an Anbieter versendet wird. Damit die nicht drin rumpfuschen, gibt es einen PW-Schutz.
Der Anbieter soll was ausfüllen und u.a. seinen Namen eingeben. Der wird vom Code aus der Inputbox gelesen und ins geschützte Formular geschrieben (nach C2). Dann schickt der Anbieter das zurück.
Chef bearbeitet das Angebot dann weiter, dazu hebt er den Schutz auf. Das klappt auch nach dem soundsovielten Schließen und Öffnen noch und egal, auf welchem Rechner - irgendwo muß doch das PW gebunkert sein...?! Also irgendwo muß dem Code doch bekannt sein, daß das PW, was Chef eingibt, auch das ist, was Code haben will...? (Ich glaub, da liegt das Verständnisproblem zunäcsht mal bei mir ...)
:-(( Jörg
Anzeige
...ja, aber da kommst du mit VBA nicht ran,...
Luc:-?
...Jörg,
sonst wäre das PW-Knacken ja noch leichter als es ohnehin schon ist...! ;-)
Gruß Luc :-?
Soll ein Schutz ein Schutz sein?
Erich
Hi Jörg,
"irgendwo muß doch das PW gebunkert sein"?
Ja, klar! Aber wie Luc schon schrieb: Mit VBA kommt man da nicht dran.
Das wäre ja auch noch schöner - der PW-Schutz wäre überhaupt nichts mehr wert.
Wenn es so einfach wäre, könnte man den Schutz auch gleich weglassen.
Die bekannten PW-Knackprogramme lesen auch nicht das gespeicherte PW aus,
sondern versuchen es einfach mit vielen Test-PWs, bis sie ein passendes gefunden haben.
Und das muss nicht das gespeicherte sein!
Was ich überhaupt nicht verstehe:
Warum bekommt der Anbieter eine Mappe, in der die Zellen,
die er (ob mit oder ohne Makro) ändern SOLL,
vor seinem Zugriff geschützt sind? Was soll das?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
was der Anbieter tun darf...
Jörg-HH
Hi Erich
die ausgefüllten, rückgesendeten Formulare werden in vorbereitete Blätter kopiert, die eine umfangreiche Kalkulation füttern. Wenn da eine Angabe "xy g/qcm" gefordert ist und der Anbieter gibt einen Text ein, kommen wir nicht weiter. Daher kommt er nur an nicht gesperrte Zellen ran, und die sind mit Gültigkeiten abgesichert. Selbst das gab schon mal Probleme, weil ein Anbieter zeigen mußte, was er drauf hat: hat das PW geknackt, die Gültigkeit geändert und dann irgendwelche Kommentare reingeschrieben. Das führt entweder zu Ausschluß oder zu Mehrarbeit bei uns. Mindestens aber ist es ein ziemlich dummes Geschäftsgebaren.
Dito mit den Dateinamen. Weil die vom Anbieter trotz Bitte, das zu unterlassen, meist verhunzt werden, hab ich eben zwangsweise Dateinamen verordnet. Deswegen auch ein anderer Thread von mir, wo es um Folderpicker ging.
Und nun gehen wir noch einen Schritt weiter - der Anbieter soll seinen Namen in die Inputbox tun - da werden keine Zahlen, Leer- und Sonderzeichen akzeptiert. Diese Eingabe landet dann im Feld für Anbieternamen.
hmmm... jetzt, wo ich das so schreibe, fällt mir ein: Ich könnte vielleicht auch das Namenfeld im Formular ungesperrt lassen und per VBA eine Gültigkeit definieren... Vielleicht wäre das die einfacherere Lösung...
Aber das beantwortet noch nicht die Frage, warum das UserInterfaceOnly als unbekanntes Argument gebrandmarkt wird...
Gruß - Jörg
Anzeige
Viell wird im VBA-Projekt nicht auf die...
Luc:-?
...VBA-Extensibility5.3 verwiesen, Jörg,
könnte da nämlich drin sein...
Morhn, Luc :-?
UserInterfaceOnly nur bei Protect
Erich
Hi Jörg,
kann es sein, dass du Unprotect mit UserInterfaceOnly als Argument hingeschrieben hast?
Die Methode Unprotect hat dieses Argument nicht. Es wäre auch sinnlos:
Wenn der Schutz aufgehoben ist, braucht niemand Sonderrechte für Makros.
UserInterfaceOnly kann als Argument für Protect verwendet werden -
dann dürfen Benutzer nicht (UserInterface), Makros aber wohl.
Alles klar?
@Luc:
Den VBE-Zugriff braucht man hier doch nun wahrlich nicht. War das eine Nebelkerze?
Einen Verweis auf die VBA-Extenibility braucht man, wenn man z. B. Makros mit Makros schreiben will.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: UserInterfaceOnly nur bei Protect
Jörg-HH
Moin Erich
du fragtest kann es sein, dass du Unprotect mit UserInterfaceOnly als Argument... - nein, hab ich nicht. Schau bitte mal ein paar SChritte weiter oben bei der Überschrift "neuer Versuch" - da hab ich mal die wesentlichen Teile des Codes reingeschrieben.
Der Code stoppt im Modul AusschreibungEinrichten bei der Zeile wsFormular.Protect Password:=PW, UserInterfaceOnly:=True mit der Bemerkung "benanntes Argument nicht gefunden"..
Grüße - Jörg
Version?
Erich
Hi Jörg,
arbeitest du wirklich mit Office 2003?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Version 2003
Jörg-HH
...ja - was Anderes kommt mir nich ins Haus :-))
UserInterfaceOnly
Erich
Hi Jörg,
ob es an der Version liegt, kannst du auch an der VBA-Hilfe zu Protect sehen.
Entweder ist UserInterfaceOnly dort aufgeführt oder nicht.
Wenn es nicht an der Version liegt: Vielleicht hast du dich im Code einfach verschrieben?
Noch ein Klärungsversuch:
Teste mal, ob bei dir das Makro abc in dieser Mappe funzt: https://www.herber.de/bbs/user/66604.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Beispielmakro läuft...
Jörg-HH
Hi Erich,
die Hilfe zeigt mir Informationen an.
das Makro läuft.
verschrieben - ma gucken. Eigentlich mach ich viel mit copy&paste, um genau das zu vermeiden.
Mir fällt grad auf: Mein VBA-Editor verschwindet laufend. Ich werd mal den Rechner runterfahren und wieder rauf. Mal sehen, was dann ist.
so long... Jörg
Nebelkerze?! Wieso? Von mir wird auf die...
Luc:-?
...Extensibility ohnehin oft verwiesen, weil einige Subroutinen und Fktt in meinem AddIn genau das tun, Erich.
Manche schreiben sogar Makros, die Makros schreiben, was dem Antivirenpgm gar nicht gefällt... ;-)
War halt nur 'ne Vermutung, die ich nicht überprüft habe, denn ich hatte dazu bisher noch keinen Anlass. Übrigens fkt das UserInterfaceOnly, das ich eigentlich meine, ausreichend erklärt zu haben, auch schon unter xl9, ist also ein „alter Hut“...
Gruß Luc :-?
@Luc: Nebelkerze
Erich
Hi Luc,
"War halt nur 'ne Vermutung, die ich nicht überprüft habe, denn ich hatte dazu bisher noch keinen Anlass."
Wäre nicht die Absicht, so eine Vermutung im Forum zu veröffentlichen,
Anlass genug für eine Überprüfung gewesen?
Ansonsten:
Ganz toll, was die Subroutinen und Fktt in deinem hier unbekannten AddIn so alles können.
Aber hat das diesem Zusammenhang dieses Threads irgend eine Relevanz?
Grüße von Erich aus Kamp-Lintfort
Mann, lass es...! Du kannst gerne alle...
Luc:-?
...Anfragen allein beantworten — ich habe Besseres zu tun! Außerdem ist auch dieses Forum nicht „te pito o te henua“... :-<
Luc :-?
Mann, lass es...
robert
hi Luc,
ich möchte hier für niemanden partei ergreifen, aber deine reaktion
scheint mir etwas übertrieben...
schau dir mal deine beiträge in letzter zeit an-
ich finde kaum einen, der eine wirkliche lösung bietet,
sondern nur andeutungen, mitunter auch spitzige bemerkungen.
..und der nabel der welt.. ja wo ist denn der ? ;-)
nichts für ungut
gruß
robert ;-)
D.h., ich muss mir meine Arbeit doch nicht vom...
Luc:-?
...Forum „absegnen“ lassen, Robert...
Interessant, dass du alle meine Beiträge der „letzten Zeit“ gelesen zu haben meinst! Wenn du nur ein paar Jahre zurück gehst, wirst du feststellen können, dass fast alles schon mal da war und immer wieder dasselbe gefragt wird... Viele Antworter, die z.T. noch in der Liste stehen, haben hier schon lange nichts mehr von sich hören lassen. Andere machen sich auch immer rarer. Warum wohl...?
Bin ich Zwerg Allwissend, dass ich mich mit allen xl/vbTeilen gleich gut auskennen muss? Xl ist ein weites Feld — da ist für viele Spezialgebiete Platz. Deshalb muss ich mir doch nicht vorschreiben lassen, was ich wofür als einen Anlass anzusehen habe! Mein Zeitplan sieht halt anders aus, da hat das, was mich wirklich interessiert, natürlich Vorrang...
Gruß Luc :-?
PS: Schön, dass du oder Tante Google sich in der polynesischen Inselwelt auskennt... ;-)
@alle Streithähne: bitte mal wieder auf'n Teppich!
Jörg-HH
...ich finde, das Forum ist nicht der geeignete Ort, um sich gegenseitig zu beharken. Hier können Laien von Profis lernen, und gelegentlich lernen sogar die Profis voneinander. Wenn die Profis sich gegenseitig diffamieren wollen, könnte man dafür doch einen passenden Thread eröffnen :-))
ich habe für mein Problem noch ein Detail bemerkt - das steht unter der Überschrift "Neuer Versuch 2.Teil". Wer mag - bitte mal reinschauen, vielleicht fällt jemd was ein...?
Grüße - Jörg
neuer Versuch 2.Teil...
Jörg-HH
...so, Jungs - hier noch zwei Details:
1. im Modul AusschreibungEinrichten fiel mir die Reihenfolge der Protect-zeilen auf:
PW = InputBox("Vergeben Sie nun ein Passwort", "Abschluss")
wsFormular.Protect Password:=PW, UserInterfaceOnly:=True
ThisWorkbook.Protect Password:=PW, UserInterfaceOnly:=True
Reklamiert wurde DAS ZWEITE UserInterfaceOnly, also das bei ThisWorkbook.
Ich habe die Zeilen umgestellt - selbes Ergebnis.
Ich habe die bemeckerte Zeile auskommentiert - plötzlich lief der Code weiter!
Es ist also einen Schritt eingegrenzt. Was unterscheidet denn das Blatt von der Mappe beim Thema UserInterfaceOnly...?
################
Nun...
der Code lief durch, und ich kam bis zu der fertigen Ausschreibung. Bei deren Schließen und _ wieder öffnen dann wurde in

ThisWorkbook.Unprotect Password:=PW
With Tabelle93
.Unprotect Password:=PW
.Range("C2").Value = strAnbieterName
.Protect Password:=PW
End With
ThisWorkbook.Protect Password:=PW
die Zeile .Unprotect Password:=PW angemeckert, und zwar mit "ungültiges Passwort"
hoffe, die rauchenden Köpfe haben wieder neue Nahrung.
VBA-Hilfe ist manchmal wertvoll
Erich
Hi Jörg,
zwischen den beiden Methoden besteht ein riesiger Unterschied.
Hilfe zu Worksheet.Protect - Das sind die möglichen Parameter::
Ausdruck.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly,
AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns,
AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting,
AllowFiltering, AllowUsingPivotTables)
Hilfe zu Worksheet.Protect - Das sind die möglichen Parameter::
Ausdruck.Protect(Password, Structure, Windows)
Allein daran siehst du schon den Unterschied. Es würde sicher nicht schaden,
mal intensiv in die Hilfe zu den unterschiedlichen Protects zu schauen.
UserInterfaceOnly finde ich nur bei den Worksheets (und noch bei Charts).


Auf deine 2. Frage hatte ich - so glaube ich - schon geantwortet, um 20:30:41 Uhr.
Da hatte ich geschrieben:
Nun wird die Mappe geschlossen. Damit gibt es auch keine Variable PW mehr.
Beim späteren Öffnen der Mappe wird wieder eine Public-Variable PW neu angelegt.
Sie hat zunächst nur den Initialwert eines Strings, die leere Zeichenkette.
Dass vorher - vor dem vergangenen Schließen der Mappe - PW einmal einen anderen Wert hatte,
kann hier nicht mehr bekannt sein.
Wenn du dein Passwort von einer Sitzung in die nächste rüberretten willst,
musst du dafür sorgen, dass der Wert
- vor dem Schließen irgendwo auf deiner Festplatte (oder sonstwo) gespeichert
- und nach dem Wieder-Öffnen gelesen wird.
Genau das machst du ja z. B. mit ProjName und TPName.
Noch mal: Die Werte von Variablen sind WEG, wenn die Mappe geschlossen wird.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
VBA-Hilfe ist manchmal wertvoll - Korrektur
Erich
Hi Jörg,
vor der 2. Kopie aus der Hilfe muss statt
Hilfe zu Worksheet.Protect - Das sind die möglichen Parameter:
stehen:
Hilfe zu Workbook.Protect - Das sind die möglichen Parameter:
Das war natürlich der Kopierteufel - nicht ich! ;-))
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
ja, die Hilfe...
Jörg-HH
...die hab ich gelesen :-) aber das ist wie mit den Lesebestätigungen: Lesen heißt nicht verstehen.
also ich hab jetzt die Protect-Geschichte so
PW = InputBox("Vergeben Sie nun ein Passwort", "Abschluss")
wsFormular.Protect Password:=PW, UserInterfaceOnly:=True
ThisWorkbook.Protect Password:=PW

in BeforeClose dies
  With ActiveWorkbook
.Names.Add Name:="Ausschreibung.Projekt", RefersTo:="=""" & ProjName & """"
.Names.Add Name:="Ausschreibung.TP", RefersTo:="=""" & TPName & """"
.Names.Add Name:="Ausschreibung.Anbieter", RefersTo:="=""" & strAnbieterName & """"
.Names.Add Name:="Ausschreibung.PW", RefersTo:="=""" & PW & """"
End With
hab ich damit das PW "bewahrt"?
und beim Open steht dies - hab ich damit das PW wieder eingelesen? Jedenfalls wird die Workbookzeile mit Passwort ungültig bemeckert
ThisWorkbook.Unprotect Password:=PW
With Tabelle93
.Unprotect Password:=PW
.Range("C2").Value = strAnbieterName
.Protect Password:=PW
End With
ThisWorkbook.Protect Password:=PW
Grüße - Jörg
na ja, zum Teil
Erich
Hi Jörg,
nun ja, wer programmiert, sollte schon ein wenig mit der Hilfe der Programmiersprache anfangen können...
Mit
.Names.Add Name:="Ausschreibung.PW", RefersTo:="=""" & PW & """"
hast du den Inhalt der Variablen PW in einer Namensdefinition untergebracht.
Namensdefinitionen werden mit der Mappe gespeichert, also:
"hab ich damit das PW "bewahrt"?" Ja!
Dumm ist dabei nur, dass jetzt jeder, der sich die Namen der Mappe ansehen kann,
einen direkten Zugriff auf das Passwort hat. :-((
Nun zum zweiten Teil - beim späteren Öffnen der Mappe ist der Wert der Variablen PW die leere Zeichenkette.
Wenn PW den Wert des gespeicherten Namens haben soll,
musst du der Variablen den Wert erst mal zuweisen.
Entweder das passiert jetzt bei dir nicht - oder diesen Teil des Codes hast du nicht gepostet.
So z. B. kannst du den Wert der Namensdefinition in die Variable PW schreiben lassen:
PW = Evaluate(Names("Ausschreibung.PW").Value)
Ob du danach das "Unprotect" für Worksheets tatsächlich brauchst, bezweifle ich.
Du könntest du mit
Tabelle93.Protect Password:=PW, UserInterfaceOnly:=True
erreichen, dass zwar das Blatt (gegenüber dem User) geschützt bleibt,
deine Makros aber Zellen ändern können. Waren wir da nicht schon mal?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
läuft :-)
Jörg-HH
Hallo Erich
nach noch ein bißchen herumprobieren scheint irgendwie jetzt alles zu laufen. Versteht zwar nur zum Teil, wieso, aber ich muß mich mal zum Thema "Lebensdauer von Variablen" schlau machen. Dann blicke ich da wohl besser durch.
Danke euch allen für die Ideen - auf zum nächsten Problem :-)
Jörg
AW: neuer Versuch 2.Teil...
Tino
Hallo,
UserInterfaceOnly gibt es nur bei den Tabellen
Bei ThisWorkbook.Protect gibt es nur Password, Structure und Windows
(siehe auch in der Hilfe unter Workbook.Protect-Methode)
UserInterfaceOnly gibt es nur beim Tabellenschutz.
(siehe auch in der Hilfe unter Worksheet.Protect-Methode)
Auszug aus der Hilfe:
UserInterfaceOnly
True, um die Benutzeroberfläche, jedoch keine Makros zu schützen.
Ohne Angabe dieses Arguments wird der Schutz auf Makros und die
Benutzeroberfläche angewendet.

Das heißt, Makro können geschützte Zellen verändern, der User aber nicht.
Zu beachten ist auch die Anmerkung
Wenn Sie die ProtectProtect-Methode mit dem auf True gesetzten True
UserInterfaceOnly-Argument bei einem Arbeitsblatt anwenden und dann die Arbeitsmappe speichern,
ist bei erneutem Öffnen der Arbeitsmappe das gesamte Arbeitsblatt (und nicht nur die Oberfläche) geschützt.
Um den Schutz der Benutzeroberfläche nach Öffnen der Arbeitsmappe erneut zu aktivieren,
müssen Sie wieder die ProtectProtect-Methode mit dem auf True gesetzten TrueUserInterfaceOnly anwenden.

Das heißt, nach erneuten öffnen der Datei, muss dies neu gesetzt werden,
daher ist es besser am Anfang eines Makros, die Tabelle mit Protect und UserInterfaceOnly True
neu zu schützen.
Gruß Tino
AW: .Unprotect Password:=PW owT
Detlef
immer noch Frage nach PW
Jörg-HH
Hallo Detlef,
damit kommt immer noch die Meldung PW unbekannt
Grüße Jörg

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige