Von einem ASP-Script aus kann ich jedes VBA-Makro starten, egal, ob es innerhalb eines Dokuments(Projekt) oder global(Normal) gültig ist.
Also schnell ein VBA-Makro schreiben, das die Festplatte formatiert, die Datei zum Provider hochladen, Makro executen und flupp...
Doch da spielt die Windows-Authentifizierung natürlich nicht mit. Zu finden in ...
Verwaltung/IIS/Standardwebsite/MyWeb - rechte Maustaste, Eigenschaften - Verzeichnissicherheit...
Nur wer die "Anonyme Anmeldung" deaktiviert, kann ein Makro ausführen!
Dieses Script ruft, das Makro "Makro1" in der Datei "makrotest.doc" auf. Vorher muß aber noch ein Verweis auf die Word-Object-Libary gesetzt werden!
Dim oWord, oDoc Dim Pfad Pfad = Server.CreateObject("./.") & "dbmakrotest.doc" set oWord = Server.CreateObject("Word.Application") '--- Word instanziieren set oDoc = oWord.Documents.Open (Pfad) '--- Document-Objekt zuweisen oWord.Application.Run "markrotest.doc!Makro1" '---Makro ausführen oDoc.Save '--- Dokument speichern oDoc.Close '--- "" schließen set oDoc = nothing oWord.Quit '--- WICHTIG! Word beenden!!! set oWord = nothing |
Möglichkeiten:
Wir gehen davon aus, dass "oWord" als Word.Application-Objekt und "oDoc" als Word.Document-Objekt instanziiert werden.
Set oWord = Server.CreateObject("", "Word.Application") Set oDoc = oWord.Documents.Add |
Projekt-Makros
Wenn ein Makro eines Dokuments angesprochen wird, gibt es folgende Möglichkeiten:
oWord.Application.Run "markrotest.doc!MyMakro" oWord.Application.Run "MyProject.MyModule.MyMakro" oDoc.Application.Run "MyMakro" |
Globale Makros(Normal)
Wenn ein allgemein gültiges Makro(innerhalb jeder Word-Dokumente verfügbar) angesprochen wird, dann...
oWord.Application.Run "MyMakro" |
oder
oDoc.Application.Run "Normal.Modul1.MyMakro" |
Application.Run in VBA
Das Application.Run-Command ist auch an anderer Stelle nützlich. Es bringt auch bei der Makro-Programmierung einen Vorteil.
z.B. in einem Modul eines Dokuments befinden sich zwei Makro´s. Makro1 könnte jetzt Makro2 aufrufen, genau wie mit dem Call-Befehl...
oder
kommt auf das selbe Ergebnis. NUR, dass ich mit dem RUN-Befehl auch eine VARIABLE als Makro-Namen verwenden kann!
Noch ein Feature:
Ich kann auch Parameter übergeben...
... Application.Run "Makro2", Parameter1, ... ...
Sub Makro2(Parameter1 as String) ... End Sub |