active.workbook als Objektvariable

Bild

Betrifft: active.workbook als Objektvariable von: Harald E
Geschrieben am: 30.03.2005 09:43:34

Hallo,

um bei eine bestimmten Datei den Blattschutz automatisch aufzuheben, hab ich Folgendes ADD-IN erstellt.
Geplante Funktionsweise:
Wenn Dateiname = BONUSSYSTEM_Jahr_auf_Transfer, dann soll für User1 und User2 jeder Blattschutz aufgehoben werden. (Das ganze natürlich als Before_Close zum setzen der Passwörter)

Das steht im Modul

Declare Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long

..und dieser als Workbook_open Ereignis und bringt in der zweiten Zeile die Fehlermeldung 91 "Objektvariable nicht festgelegt"

Private Sub Workbook_Open()
Dim m As String
m = ActiveWorkbook.Name      'hier kommt die Fehlermeldung
On Error GoTo ende
If m = "BONUSSYSTEM_Jahr_auf_Transfer.xls" Then
   Dim Buffer As String * 100
   Dim BuffLen As Long
   BuffLen = 100
   GetUserName Buffer, BuffLen
   If Left(Buffer, BuffLen - 1) = "User1" Or Left(Buffer, BuffLen - 1) = "User2" Then
   For i = 1 To Worksheets.Count
   Sheets(i).Unprotect "Test"
   Next i   
   End If
End If
ende:
End Sub



Anmerkung: Der Code läuft, wenn er im Modul steht und per F5 ausgelöst wird.
Per Workbook_open als Call aufgerufen, kommt ebenfalls die Fehlermeldung.

Bin mal wieder ratlos.

Danke schonmal
Harald
Bild


Betrifft: AW: active.workbook als Objektvariable von: Oberschlumpf
Geschrieben am: 30.03.2005 09:48:40

Hi Harald

Nur 'ne Idee.
Versuch es mal so:
Dim m As Object
Set m = ActiveWorkbook.Name      'hier kommt die Fehlermeldung
...rest wie gehabt

Konnte ich helfen?

Ciao
Thorsten


Bild


Betrifft: AW: active.workbook als Objektvariable von: Boris
Geschrieben am: 30.03.2005 09:54:44

Hi Thorsten,

...die Name-Eigenschaft liefert einen String und gibt kein Objekt zurück.
Das hätte dir dein Debugger aber auch mitgeteilt...;-)

Grüße Boris


Bild


Betrifft: AW: active.workbook als Objektvariable von: Oberschlumpf
Geschrieben am: 30.03.2005 09:58:04

Hi Boris

OK..haste Recht...hätt ich den Debugger nur mal angeschmissen, und nicht einfach nur eben mal so den Code getextet :-)

War ja auch nur ne Idee...

Ciao
Thorsten


Bild


Betrifft: AW: active.workbook als Objektvariable von: Harald E
Geschrieben am: 30.03.2005 09:59:17

Hallo Thorsten,
danke für den Tipp, aber
der Versuch endet leider mit derselben Fehlermeldung.

Gleicher Code als workbook_close Ereignis bringt übrigens keine Fehlermeldung, die Blätterwerden aber auch nicht geschützt.
;-((

gruß
harald


Bild


Betrifft: AW: active.workbook als Objektvariable von: Frank Domke
Geschrieben am: 30.03.2005 10:20:27

Hallo Torsten,
ich glaube, Dein Ansatz ist falsch! Der Programmcode in Workbook_Open wird aufgerufen, wenn die entsprechende Arbeitsmappe geöffnet wird!
1. Kennst Du den Namen der Arbeitsmappe, also ist die Frage unlogisch.
2. Ist zum Zeitpunkt des Öffenens des AddIn noch keine Arbeitsmappe aktiv.
Wenn Du das mal testen willst, scheibe anstelle AktiveWorkbook ThisWorkbook und Du siehst, was los ist.
Lösungsansatz: https://www.herber.de/forum/archiv/372to376/t372831.htm
Viel Spaß
Frank.


Bild


Betrifft: AW: active.workbook als Objektvariable von: Harald E
Geschrieben am: 30.03.2005 10:34:47

Hallo Frank,

thisworkbook bringt in der Tat den Namen des Add-In....
Der gepostete Lösungsansatz schafft bei mir jedoch nur Verwirrung auf höchstem Niveau.
vba-gut ist für mich noch ausser Reichweite ;-/

Hab's mir trotzdem kopiert, da ich meiner "activewindow-Lösung" nicht so recht über den Weg traue.

Danke
Harald


Bild


Betrifft: AW: active.workbook als Objektvariable von: u_
Geschrieben am: 30.03.2005 10:10:49

Hallo,
da hast du einen Denkfehler.
Workbook_open wird beim Laden des Addins ausgeführt und nicht beim Öffnen irgendeiner anderen Datei. Da Addins immer ausgeblendet sind, gibts auch kein ActiveWorkbook

Gruß


Bild


Betrifft: Newbie-Lösung von: Harald E
Geschrieben am: 30.03.2005 10:18:37

Hallo u_

hat mich gleich auf eine Idee gebracht. Natürlich nix mit High-End und Schönheitspreis, aber es funzt...bisher

statt active.workbook hab ich active.window gesetzt (als string)

Schätze, wenn ich on error noch besser abfange, kann das Ding ins Netzwerk. ;-))

Danke an alle
Harald


Bild


Betrifft: AW: active.workbook als Objektvariable von: Harald E
Geschrieben am: 30.03.2005 11:27:12

Hallo zusammen,

sorry, dass ich hier den Alleinunterhalter gebe.

activewindow funzt auch nur beim Schliessen :-((
und mit dem Ansatz über eine zweites Modul bin ich etwas überfordert, da er mir
Public WithEvents app As Application
nicht in einem xla-Projekt akzeptiert.

Nochmal zur Erläuterung:
Diese spezielle Datei hat mehrere Blätter mit dem gleichen Passwort. Sobald User1 oder User2 die Datei öffnen, sollen der Schutz auf allen Blättern aufgehoben werden (beim Schliessen wieder setzen).
Das Ganze als Add-In, da unsere älteren User jedesmal die Panik kriegen, wenn da ne Makrowarnung erscheint.

Hier nochmals der Ansatz
Klassenmodul:
Declare Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long

DieseArbeitsmappe:
Private Sub Workbook_Open()
Dim n As String
n = ActiveWindow.Name
On Error GoTo ende
If n = "BONUSSYSTEM_Jahr_auf_Transfer.xls" Then
   Dim Buffer As String * 100
   Dim BuffLen As Long
   BuffLen = 100
   GetUserName Buffer, BuffLen
   If Left(Buffer, BuffLen - 1) = "User1" Or Left(Buffer, BuffLen - 1) = "User2" Then
   For i = 1 To Worksheets.Count
   Sheets(i).Unprotect "test"
   Next i
   End If
End If
ende:
End Sub


Wäre schön, wenn mir jemand etwas Hilfestellung leisten könnte
Harald


Bild


Betrifft: AW: active.workbook als Objektvariable von: u_
Geschrieben am: 30.03.2005 12:03:08

Hallo,
Das Ganze als Add-In, da unsere älteren User jedesmal die Panik kriegen, wenn da ne Makrowarnung erscheint.
Erstelle dir doch mit celfcert.exe ein Zertifikat und signiere dein Projekt. Dann kommt die Makrowarnung nur noch 1x.
Um das öffnen beliebiger Dateien mit einem AddIn zu überwachen musst du imho eine eigene Klasse definieren. Wie und ob das geht, kann ich dir aber auch nicht sagen.
Letztendlich ist es das einfachste, den User im Workbook_open der entsprechenden Mappe zu ermitteln. Warum eigentlich mit einer UDF? Es gibt doch ab 2000 Environ ("username"). Oder soll das auch unter 97 laufen?

Gruß


Bild


Betrifft: Kapitulation von: Harald E
Geschrieben am: 30.03.2005 12:34:37

...und zwar bedingungslos.

selfcert wäre ein schöner Weg, wenn nur die alte Explorerversion nicht wäre.
Keine exe, keine Kekse.


Nungut. Ich warte bis die Firma die neuen PC's spendiert, die seit Monaten versprochen sind ;-/ und löse es dann per Zertifikat.


Nochmals Danke und Gruß
Harald


Bild


Betrifft: AW: Kapitulation von: u_
Geschrieben am: 30.03.2005 12:50:25

Hallo,
selfcert.exe ist Bestandteil von Office!

Gruß


Bild


Betrifft: Schon klar.. von: Harald E
Geschrieben am: 30.03.2005 13:31:31

...anhand der Excel-Hilfe und der hiesigen Recherche hab ich die digitale Signatur auch mal versucht, aber die selfcert.exe in dem angegeben Ordner nicht gefunden. Auch sonst kein Suchergebnis.(Keine Dateien versteckt/ausgeblendet)
Ich werd das heute auch nicht mehr versuchen. Mein Tagespensum an Mißerfolgen und Nackenschlägen habe ich erreicht.

Für die elegante Lösung fehlt mir das Know-How. Hatte eigentlich gehofft, dass mein Ansatz nur einer kleiner Korrektur bedarf, aber das ist wohl umfangreicher....also warte ich auf die neuen PC's ;-))

Gruß


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Verknüpfungen Symbolleiste"