Während beispielsweise die Microsoft Office Anwendungen ihr Objekt-Modell zur "Fernsteuerung" per Script oder in anderen Anwendungen offen legen, steht das Objekt-Modell der VB-Entwicklungsumgebung (VB-IDE) nur für AddIns zur Verfügung. Mit einem kleinen AddIn können Sie allerdings das Objekt-Modell auch nach außen tragen und so zur Verfügung stellen.
Das Prinzip dieses AddIns ist so schlicht wie es elegant ist. Es nimmt wie üblich "seine" Instanz der IDE über die (Ereignis-)Methode AddinInstance_OnConnection des AddIn-Designers bzw. der IDTExtensibility2-Schnittstelle an und legt die Referenz in einem Standard-Modul als öffentliche Variable ab. Über eine Property Get-Prozedur in einer öffentlichen Klasse kann nun eine andere Anwendung die Referenz abholen und wie sonst gewohnt in einem AddIn verwenden. Damit eine solche fernsteuernde Anwendung die Instanz des AddIns finden kann, wird das AddIn als ActveX-EXE kompiliert. Die fernsteuernde Anwendung braucht dazu lediglich einen Verweis auf das AddIn (natürlich geht es, insbesondere in einem Script, auch über CreateObject) und einen Verweis auf die Typbibliothek der IDE (VB6EXT.OLB).
Das besagte Standard-Modul modVBE.bas enthält nur eine globale Variable:
Public gVBE As VBIDE.VBE
Der Code des AddIn-Designers Connect.Dsr:
Private Sub AddinInstance_OnConnection( _
ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, custom() As Variant)
Set gVBE = Application
End Sub
Private Sub AddinInstance_OnDisconnection( _
ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, _
custom() As Variant)
Set gVBE = Nothing
End Sub
Und schließlich noch die wenigen Code-Zeilen der öffentlichen Klasse (Instancing = 5 - MultiUse) VBIDEConnect.cls:
Public Property Get VBE() As VBIDE.VBE
Set VBE = gVBE
End Property
In einer Anwendung können Sie nun zum Beispiel ein neues Projekt in einer bereits gestarteten VB-IDE-Instanz anlegen:
With New VBIDEConnect
With .VBE.VBProjects
.Add vbext_pt_StandardExe, True
End With
End With
In einem Script sieht das ganz ähnlich aus - hier wird allerdings die Instanz des AddIns über CreateObject geladen:
With CreateObject("VBIDEControl.VBIDEConnect")
With .VBE.VBProjects
.Add vbext_pt_StandardExe, True
End With
End With
|