Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Image
BildScreenshot zu Image Image-Seite mit Beispielarbeitsmappe aufrufen

Code stoppt bei Locked | Herbers Excel-Forum


Betrifft: Code stoppt bei Locked von: Jörg-HH
Geschrieben am: 13.12.2009 23:22:53

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

  

Betrifft: Blattschutz? von: Erich G.
Geschrieben am: 13.12.2009 23:29:44

Hi Jörg,
ist ein Blattschutz aktiv?

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: Blattschutz ja von: Jörg-HH
Geschrieben am: 13.12.2009 23:36:12

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


  

Betrifft: PS zu Blattschutz? von: Jörg-HH
Geschrieben am: 13.12.2009 23:42:50

...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


  

Betrifft: UserInterfaceOnly von: Erich G.
Geschrieben am: 14.12.2009 00:38:49

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 :-))


  

Betrifft: AW: UserInterfaceOnly von: Jörg-HH
Geschrieben am: 14.12.2009 01:22:23

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


  

Betrifft: neuer Versuch... von: Jörg-HH
Geschrieben am: 14.12.2009 19:31:52

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



  

Betrifft: Der Sinn von UserInterfaceOnly besteht... von: Luc:-?
Geschrieben am: 14.12.2009 19:50:43

...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 :-?


  

Betrifft: dann kann ich Unproptect usw ja entsorgen von: Jörg-HH
Geschrieben am: 14.12.2009 20:11:24

...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


  

Betrifft: Keine Ahnung! Aber bei Option Explicit... von: Luc:-?
Geschrieben am: 14.12.2009 20:42:40

...wird dir das doch angezeigt, Jörg...!?
Gruß Luc :-?


  

Betrifft: AW: neuer Versuch... von: Erich G.
Geschrieben am: 14.12.2009 20:30:41

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


  

Betrifft: noch ne Erläuterung... von: Jörg-HH
Geschrieben am: 14.12.2009 20:51:58

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


  

Betrifft: ...ja, aber da kommst du mit VBA nicht ran,... von: Luc:-?
Geschrieben am: 14.12.2009 21:03:28

...Jörg,
sonst wäre das PW-Knacken ja noch leichter als es ohnehin schon ist...! ;-)
Gruß Luc :-?


  

Betrifft: Soll ein Schutz ein Schutz sein? von: Erich G.
Geschrieben am: 14.12.2009 21:41:17

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


  

Betrifft: was der Anbieter tun darf... von: Jörg-HH
Geschrieben am: 14.12.2009 22:12:50

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


  

Betrifft: Viell wird im VBA-Projekt nicht auf die... von: Luc:-?
Geschrieben am: 15.12.2009 05:59:59

...VBA-Extensibility5.3 verwiesen, Jörg,
könnte da nämlich drin sein...
Morhn, Luc :-?


  

Betrifft: UserInterfaceOnly nur bei Protect von: Erich G.
Geschrieben am: 15.12.2009 09:55:47

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


  

Betrifft: AW: UserInterfaceOnly nur bei Protect von: Jörg-HH
Geschrieben am: 15.12.2009 11:43:17

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


  

Betrifft: Version? von: Erich G.
Geschrieben am: 15.12.2009 12:20:48

Hi Jörg,
arbeitest du wirklich mit Office 2003?

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Version 2003 von: Jörg-HH
Geschrieben am: 15.12.2009 12:52:18

...ja - was Anderes kommt mir nich ins Haus :-))


  

Betrifft: UserInterfaceOnly von: Erich G.
Geschrieben am: 15.12.2009 12:50:33

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


  

Betrifft: Beispielmakro läuft... von: Jörg-HH
Geschrieben am: 15.12.2009 13:10:21

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


  

Betrifft: Nebelkerze?! Wieso? Von mir wird auf die... von: Luc:-?
Geschrieben am: 15.12.2009 17:51:03

...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 :-?


  

Betrifft: @Luc: Nebelkerze von: Erich G.
Geschrieben am: 15.12.2009 18:22:07

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


  

Betrifft: Mann, lass es...! Du kannst gerne alle... von: Luc:-?
Geschrieben am: 15.12.2009 18:47:22

...Anfragen allein beantworten — ich habe Besseres zu tun! Außerdem ist auch dieses Forum nicht „te pito o te henua“... :-<
Luc :-?


  

Betrifft: Mann, lass es... von: robert
Geschrieben am: 15.12.2009 19:37:32

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 ;-)


  

Betrifft: D.h., ich muss mir meine Arbeit doch nicht vom... von: Luc:-?
Geschrieben am: 16.12.2009 05:52:56

...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... ;-)


  

Betrifft: @alle Streithähne: bitte mal wieder auf'n Teppich! von: Jörg-HH
Geschrieben am: 15.12.2009 20:37:25

...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


  

Betrifft: neuer Versuch 2.Teil... von: Jörg-HH
Geschrieben am: 15.12.2009 20:47:14

...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.


  

Betrifft: VBA-Hilfe ist manchmal wertvoll von: Erich G.
Geschrieben am: 15.12.2009 21:01:37

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


  

Betrifft: VBA-Hilfe ist manchmal wertvoll - Korrektur von: Erich G.
Geschrieben am: 15.12.2009 21:04:54

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


  

Betrifft: ja, die Hilfe... von: Jörg-HH
Geschrieben am: 15.12.2009 21:41:38

...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


  

Betrifft: na ja, zum Teil von: Erich G.
Geschrieben am: 16.12.2009 00:30:59

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


  

Betrifft: läuft :-) von: Jörg-HH
Geschrieben am: 17.12.2009 11:30:22

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


  

Betrifft: AW: neuer Versuch 2.Teil... von: Tino
Geschrieben am: 15.12.2009 21:05:40

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


  

Betrifft: AW: .Unprotect Password:=PW owT von: Detlef
Geschrieben am: 14.12.2009 13:52:06




  

Betrifft: immer noch Frage nach PW von: Jörg-HH
Geschrieben am: 14.12.2009 19:15:47

Hallo Detlef,

damit kommt immer noch die Meldung PW unbekannt

Grüße Jörg