Exportera och importera VBA-moduler

Här demonstreras tekniker för att exportera och importera moduler från / till arbetsböcker.

Export- och importprocedurerna nedan motsvaras av de manuella kommandona:


Undvik i möjligaste mån att tilldela modulerna  filändelsen "bas" vid export. De flesta anti-virusprogram har en tendens till att vid import uppfatta dessa som virusfiler och låser helt sonikt arbetsboken där koden körs från.

De filer som skapas vid export och som används vid import är textfiler varför vid t ex export/import av arbetsbladmodul så är det endast modulen och dess innehåll som exporteras/importeras och inte arbetsbladet i sig.

Glöm inte av att ange en referens "Microsoft Visual Basic for Applications Extensibility 5.3".

Exemplena finns ej att tillgå för hämtning.


Export av klass-, standardmodul och formulär

Vid export finns den aktuella modulen kvar i VBA-projektet.

Sub Exportera_Standardmodul()

   '© 2002 Alla rättigheter XL-Dennis

   Dim vbaProjekt As VBIDE.VBProject

   Dim vbaModul As VBIDE.VBComponent

    Set vbaProjekt = ThisWorkbook.VBProject
 

   'För klass-, standardmoduler och formulär används denna tilldelning.

   Set vbaModul = vbaProjekt.VBComponents("Modul2")  

   'Modulen exporteras här och tilldelas ett annat namn.

   vbaModul.Export ("c:\Test.txt")

 End Sub

 

Export av arbetsbladmoduler

Varje arbetsbladmodul har ett unikt kodnamn (CodeName) och detta används vid export av arbetsbladmoduler enligt följande:

Sub Exportera_Arbetsbladmodul()

   '© 2002 Alla rättigheter XL-Dennis

   Dim vbaModul As VBIDE.VBComponent
 

    'För arbetsblad, diagramblad och klassmoduler används denna tilldelning .

   With ThisWorkbook

      Set vbaModul = .VBProject.VBComponents(.Worksheets("Blad1").CodeName)

   End With

    'Modulen exporteras här och tilldelas ett annat namn.

   vbaModul.Export ("c:\Test.txt")

End Sub

 

Export av arbetsbokmodul

Här använder vi oss av arbetsbokmodulens kodnamn.

Sub Exportera_Arbetsbokmodul()

   '© 2002 Alla rättigheter XL-Dennis

   Dim vbaModul As VBIDE.VBComponent

   'För arbetsbokmoduler används denna tilldelning

   With ThisWorkbook

      Set vbaModul = .VBProject.VBComponents(.CodeName)

   End With

   'Modulen exporteras här och tilldelas ett annat namn.

   vbaModul.Export ("c:\Test.txt")

End Sub

 

Exportera alla moduler

Slutligen visas här hur vi kan exportera samtliga moduler i ett VBA-projekt.

Sub Exportera_Alla_moduler()

   '© 2002 Alla rättigheter XL-Dennis

   Dim vbaModuler As VBIDE.VBComponents

   Dim vbaModul As VBIDE.VBComponent

    Set vbaModuler = ThisWorkbook.VBProject.VBComponents

 

   For Each vbaModul In vbaModuler

      vbaModul.Export ("c:\backup\" & vbaModul.Name & ".txt")

   Next vbaModul

End Sub

 

Import av moduler

Att importera moduler av typerna standard, diagram, formulär, arbetsblad och klass är enkelt och proceduren nedan visar hur det sker.

Import av arbetsbokmodul och arbetsbladmoduler fungerar visserligen men de ersätter inte de nuvarande modulerna utan läggs till VBA-projektet som klassmoduler.

Vill vi "ersätta" dessa moduler får det ske genom att först ta bort all kod i de existerande modulerna och därefter skriva in den nya koden.

Sub Importera_Standardmodul()

   '© 2002 Alla rättigheter XL-Dennis

   Dim vbaProjekt As VBIDE.VBProject

   Dim stSokvagFil As String

   Set vbaProjekt = ThisWorkbook.VBProject
 

    stSokvagFil = "c:\Test.txt"  

   vbaProjekt.VBComponents.Import (stSokvagFil)

 End Sub