Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
588to592
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
588to592
588to592
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

active.workbook als Objektvariable

active.workbook als Objektvariable
30.03.2005 09:43:34
Harald
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

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: active.workbook als Objektvariable
30.03.2005 09:48:40
Oberschlumpf
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
AW: active.workbook als Objektvariable
30.03.2005 09:54:44
Boris
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
AW: active.workbook als Objektvariable
30.03.2005 09:58:04
Oberschlumpf
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
Anzeige
AW: active.workbook als Objektvariable
30.03.2005 09:59:17
Harald
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
AW: active.workbook als Objektvariable
30.03.2005 10:20:27
Frank
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.
Anzeige
AW: active.workbook als Objektvariable
30.03.2005 10:34:47
Harald
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
AW: active.workbook als Objektvariable
30.03.2005 10:10:49
u_
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ß
Newbie-Lösung
30.03.2005 10:18:37
Harald
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
Anzeige
AW: active.workbook als Objektvariable
30.03.2005 11:27:12
Harald
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
Anzeige
AW: active.workbook als Objektvariable
30.03.2005 12:03:08
u_
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ß
Anzeige
Kapitulation
30.03.2005 12:34:37
Harald
...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
AW: Kapitulation
30.03.2005 12:50:25
u_
Hallo,
selfcert.exe ist Bestandteil von Office!
Gruß
Schon klar..
30.03.2005 13:31:31
Harald
...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ß
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige