Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
824to828
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
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Globale Variable für geöffnete Arbeitsmappen

Globale Variable für geöffnete Arbeitsmappen
03.12.2006 02:06:15
doey
Hi,
hab ein Problem!
Habe eine Arbeitsmappe,welche von Woche zu Woche kopiert wird.
Diese Arbeitsmappe enthält ein Skript, dass bei Workbook Open ein AddIn vom Server zur lokalen Festplatte kopiert und anschließend läd.
Diese Ausführung möchte ich umgehen, denn wenn ich z.B. mir zwei Dateien (eine aus der Vorwoche und eine aus der aktuellen Woche anschauen möchte, kommt eine Fehlermeldung, dass das AddIn bereits benutzt wird und keinen Zugriff darauf habe.
Nun stell ich mir vor, dass ich einen Zähler vor diesen Kopiervorgang einbaue und abfrage ob das AddIn kopiert werden soll oder nicht! Dieser Zähler soll die gleichen Mappen zählen und bei WorkbookbeforeClose den Zähler wieder runtersetzen.
Wenn der Zähler wieder bei 1 am Schluss ist, kann das Addin und Menü entladen werden, ansonsten soll das Skript verlassen werden.
hier ein kleines beispiel, was ich meine:
Workbook Open ()
If x = 1 then 'wenn nur eine Mappe offen ist
soll AddIn kopiert werden!
Menü geladen werden
x = x + 1 ' Zähler hoch
Else
if x größer 1 then
exit sub
End if
End if
End sub
Workbook Before Close ()
If x = 1 then
entlade das Menü
entlade AddIn
else
if x größer 1 then
exit sub
end if
end if
end sub
Hierfür wird, denke ich eine globale Variable für x benötigt, weil diese Variabel ja für mehrere Arbeitsmappen zur Abfrage benötigt wird, oder?
Vielleicht weiß jemand eine bessere Lösung für dieses Problem.
Hoffe es war einigermaßen verständlich, was ich möchte?!?!
Wäre super, wenn mir jemand behilflich sein könnte!
Gruß doey

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Globale Variable für geöffnete Arbeitsmappen
03.12.2006 03:20:06
Nepumuk
Hallo doey,
ich habe mal ein Addin mit einer globale Klasse für alle Variablentypen geschrieben. Darauf kannst du aus allen geöffneten Mappen, über eine weitere Klasse zugreifen. Hast du Interesse und kennst du dich ein bisschen mit Klassen aus, um es dir gegebenenfalls anzupassen?
Gruß
Nepumuk
AW: Globale Variable für geöffnete Arbeitsmappen
03.12.2006 12:00:34
fcs
Hallo doey,
das 2. laden des AddIns kann man in einer einfachen Prüfroutine verhindern, siehe Beispiel.
Den Zähler, der die Anzahl der AddIn-Aufrufe verfolgt und beim Schließen der letzten aufrufenden Datei das AddIn deinstalliert, könnte man durch ein zusätzliches Modul in der xla-Datei realisieren.
Statt in der XLA-Datei, kann man die Prozeduren auch in der persönlichen Makroarbeitsmappe oder in einer eigenen Arbeitsmappe einbauen, die als ausgeblendete Datei geöffnet wird. Dann müssen jedoch bei jedem Anwender die entsprechenden Dateien geändert/eingerichtet werden.
Gruss
Franz

Prozeduren unter DieseArbeitsmappe:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call AddinCheckSchliessen
End Sub
Private Sub Workbook_Open()
Call AddinCheckOeffnen
End Sub
Private Sub AddinCheckOeffnen()
On Error GoTo Fehler1  'Addin wurde noch nicht installiert
If Application.AddIns("Test01").Installed = True Then
MsgBox "Das AddIn 'Test01.xla' ist bereits installiert!" 'Test-Zeile
Application.Run "TEst01.xla!ZaehlerErhoehen"
Else
AddIns("Test01").Installed = True
Application.Run "TEst01.xla!ZaehlerErhoehen"
End If
Exit Sub
Fehler1:
'AddIn installieren
Application.DisplayAlerts = False
AddIns.Add FileName:="C:\Test\TEst01.xla"
Application.DisplayAlerts = True
AddIns("Test01").Installed = True
Application.Run "TEst01.xla!ZaehlerErhoehen"
End Sub
Private Sub AddinCheckSchliessen()
Application.Run "TEst01.xla!ZaehlerReduzieren"
End Sub
Prozeduren in einem Modul der xla-Datei:
Private AufgerufenZaehler As Integer
Sub ZaehlerErhoehen()
AufgerufenZaehler = AufgerufenZaehler + 1
MsgBox "Zählerstand: " & AufgerufenZaehler 'Test-Zeile
End Sub
Sub ZaehlerReduzieren()
AufgerufenZaehler = AufgerufenZaehler - 1
MsgBox "Zählerstand: " & AufgerufenZaehler 'Test-Zeile
If AufgerufenZaehler = 0 Then
'AddIn deinstallieren
AddIns("Test01").Installed = False
End If
End Sub

Anzeige
AW: Globale Variable für geöffnete Arbeitsmappen
03.12.2006 16:51:49
doey
Hi Nepumuk,
wäre nett, wenn du mir das AddIn zur Verfügung stellen würdest!
Bin jetzt zwar kein Crack in Sachen Klassenmodule, aber mit ein bißchen Zeit arbeite ich mich da schon rein!
Hi Frank,
das ist genau das, was ich gesucht habe!!!
Vielen Dank für deine Mühe
Gruß doey
AW: Globale Variable für geöffnete Arbeitsmappen
04.12.2006 08:47:27
doey
Guten Morgen Nepumuk,
ich dank Dir...den Spaß werde ich sicher haben!!! :)
is ja ganz schön heftig der Code...
da erstmal durchzublicken wie das ganze funktioniert, braucht schon einige Zeit bei mir!!!
gruß doey
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige