Lägga till och ta bort moduler

Här visas tekniker för att lägga till respektive ta bort moduler från arbetsböcker. Det är viktigt att ha i åtanke att den eller de arbetsböcker som berörs måste vara öppna när någon av procedurerna exekveras.

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


Lägga till Moduler

Följande procedur visar hur vi lägger till moduler. Vi kan inte via VBE lägga till nya arbetsblad. I koden används de konstanta benämningarna för de olika modultyperna.

Sub Lägga_Till_Moduler()

   '© 2002 Alla rättigheter XL-Dennis

   Dim vbaProjekt As VBIDE.VBProject

   Dim vbaModul As VBIDE.VBComponent

 

   Application.VBE.MainWindow.Visible = False

    Set vbaProjekt = ThisWorkbook.VBProject

   With vbaProjekt.VBComponents

      'Standardmodul

      .Add vbext_ct_StdModule

      'Klassmodul

      .Add vbext_ct_ClassModule

      'Formulär

      .Add vbext_ct_MSForm

   End With

    Application.VBE.MainWindow.Visible = True

End Sub  

 

Ta bort moduler

Att ta bort moduler är också relativt enkelt. Dock måste vi förstå att vi varken kan ta bort kodmoduler för diagramblad, arbetsblad eller för ThisWorkbook/DennaArbetsbok. Den sistnämnda kan överhuvudtaget inte tas bort.

Sub TaBort_Standardmodul()

   '© 2002 Alla rättigheter XL-Dennis

   Dim vbaProjekt As VBIDE.VBProject

   Dim stModul As String

 

   Set vbaProjekt = ThisWorkbook.VBProject

   'För klass-, standardmoduler och formulär.

   stModul = "Modul2"

 

   With vbaProjekt.VBComponents

      .Remove VBComponent:=.Item(stModul)

   End With

 End Sub

 

Ta bort alla moduler

Här visas hur vi kan ta bort alla moduler i en arbetsbok. Proceduren tar även bort sig själv varför den inte bör testas på viktiga arbetsböcker. Som angivits ovan kan vissa typer av moduler inte tas bort.

Sub TaBort_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

      If vbaModul.Type <> 100 Then

         vbaModuler.Remove vbaModul

      End If

   Next vbaModul

 End Sub