Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zugriff auf geschützten VBA-Code

87 views
Skip to first unread message

Adrian Herrmann

unread,
Mar 5, 2003, 7:25:40 AM3/5/03
to
Hallo,

ich benutze in einem selbstgeschriebenen Add-In folgende Funktion um
VBA-Code aus einem bestimmten Modul auszulesen um ihn in die Arbeitsmappe
einzufügen die durch das Programm mit Daten gefüllt wird.


Private Function getCode(stModulName)
'Liefert den Code des eines Modules als String
Dim VBC As Object
Dim stCode As String
Dim nz As Long
Dim wb As Workbook

Set wb = ThisWorkbook

Set VBC = wb.VBProject.VBComponents(stModulName)
nz = VBC.codemodule.CountOfLines
stCode = VBC.codemodule.Lines(1, nz)
Set VBC = Nothing
getCode = stCode
End Function


Das funktioniert natürlich dann nicht mehr, wenn ich den Code mit einem
Paßwort schütze. Der Zugriff erfolgt aus dem geschützten Add-In. Gibt es in
diesem besonderen Fall die Möglichkeit auf den Code trotzdem zuzugreifen?
Alternativ besteht natürlich die Möglichkeit ein zusätzliches, nicht
geschütztes Add-In mit den Funktionen anzulegen. Das kleine Tool soll
allerdings frei verfügbar gemacht und nicht allzu kompliziert in der
Installation werden.

Diese Funktionen müssen in allen Arbeitsmappen mit diesen Daten vorhanden
sein. Das Add-In ist nur zum Erstellen der Daten erforderlich.

Die Möglichkeit den Code in einem String zu hinterlegen hatte ich auch schon
durchgespielt, ist aber bei Updates recht unhandlich.

Hat jemand einen Ansatz?

Gruß
Adrian Herrmann


Philipp von Wartburg

unread,
Mar 5, 2003, 6:00:24 PM3/5/03
to
Hallo Adrian

Für den Zugriff auf geschützten VBA-Code existiert sehr wahr-
scheinlich keine Lösung, weil geschützt ist geschützt. Gut, man
könnte per VBA-Code das VBA-Projekt entsperren, indem man
mit SendKeys den Menübefehl "Eigenschaften von Projekt" auf-
ruft und dann das Kennwort in den Kennwortdialog einfüllt. Würde
ich aber nicht machen, da danach sämtlicher Code des Add-Ins
ungeschützt ist. Der Schutz kann per VBA nicht mehr aktiviert
werden. Er wird erst wieder aktiv, indem das Add-In geschlossen
und neu geöffnet wird.

Eine gute Variante finde ich die Auslagerung des zu kopierenden
VBA-Codes in eine Textdatei. Die Textdatei kann dann in ein Modul
einer beliebigen Mappe importiert werden, wobei sich die Import-
prozedur (Sub GetCode) weiterhin im geschützten Add-In befindet.

Beispiel:
Sub GetCode()
With ActiveWorkbook.VBProject
.VBComponents.Add 1
.VBComponents("Modul1").CodeModule.AddFromFile _
"S:\VBA-Code.txt"
End With
End Sub

Diese Lösungsvariante ist absolut flexibel:
- Wenn der zu importierende VBA-Code mal ändert, muss die
Änderung nur im Textfile gemacht werden - und wenn das Text-
file auf einem zentralen Laufwerk liegt (Netzwerkserver), erfolgt
die Änderung an einer einzigen Stelle.
- Installation oder Distribution entfällt (verglichen mit einem Add-In)
- Da ein Textfile verwendet wird und beim Import nur ein Lese-Zugriff
stattfindet, ist das Textfile nie von einem Benutzer gesperrt; kann
somit jederzeit bearbeitet bzw. ausgetauscht werden. Dies wäre bei
der Variante Add-In nicht der Fall.
- Damit nicht irgendwelche User den VBA-Code im Textfile ungewollt
ändern, kann die Datei als read-only markiert werden. Zusätzlich
könnte man die Zugriffsrechte der Benutzer für diese Datei auf
"Lesen" beschränken.

Gruss
Philipp

Adrian Herrmann schrieb in Nachricht ...

Adrian Herrmann

unread,
Mar 6, 2003, 6:17:38 AM3/6/03
to
Hallo,

erst mal Danke für Deine sehr ausführliche Antwort:

> Eine gute Variante finde ich die Auslagerung des zu kopierenden
> VBA-Codes in eine Textdatei. Die Textdatei kann dann in ein Modul
> einer beliebigen Mappe importiert werden, wobei sich die Import-
> prozedur (Sub GetCode) weiterhin im geschützten Add-In befindet.

Die Variante gefällt mir schon ganz gut. Die Updates sind auch eigentlich
nicht so häufig, es handelt sich um überschaubare Funktionen. Ich hatte auch
schon überlegt den Code in einer Datenbank abzulegen, so wäre der Zugriff
recht flexibel und besser geordnet.

Einziger Punkt wäre, daß das Add-In selbst als xla frei weitergegeben werden
soll und ich mir Gedanken machen muß wie ich sicherstelle, daß das Ganze
funktioniert wenn jemand diese Textdateien oder DB nicht übernommen hat.

Hier könnte ich im ersten Schritt die wenigen zum Betrieb der Tabellen
notwendigen Funktionen als String im Code hinterlegen und die restlichen
Bibliotheken aus der Datei nehmen.

Gruß
Adrian Herrmann


0 new messages