Avatar billede dkpret Nybegynder
13. februar 2011 - 10:06 Der er 2 kommentarer og
1 løsning

Opdatere eksisterende Workbook med nye vba moduler.

Hej
Excel 2003 / XP
Situationen er den at jeg har lavet et Excel/vba baseret værktøj som benyttes af flere brugere, hver for sig.

Værktøjet genererer flere "resultatsider" og brugerne kan så vælge at udvikle Pivottabeller ud fra disse "resultatsider".

Det vil sige at nu består værktøjet så dels af noget jeg har udviklet og pivottabeller som brugeren har lagt kræfter i.

Spørgsmålet er så

Hvis jeg laver nogle rettelser i en eller flere moduler - kan det så lade sig gøre at distribuere disse rettelser til brugerne på en sådan måde at de ikke skal have en ny Excelfil - men kun de nye moduler. (eller evt. alle moduler).?
Så går deres egen udviklede pivot tabeller ikke til grunde, hvis der kommer en opdatering.

Man kan selvfølgelig gå ind i den enkelte brugers excelfil og manuel tilføje rettelserne - men jeg tænker på en mere smart og brugervenlig metode.  :-)

Mvh

Hans
Avatar billede bak Seniormester
13. februar 2011 - 11:16 #1
Opret dit nye vba-modul i en excelfil.
I samme fil, men et andet modul, indsætter du nedenstående kode.
Når dette regneark åbnes, opretter den en menu.
Princippet er nu at den bruger der skal have skiftet / indsat nyt modul, så åbner dette regneark, samt det regneark der skal have lavet udskiftninger. Man skal så aktivere det regneark der skal skiftes modul i og trykket på menuknappen 'overfør makroer'.

Husk at dette kan kun gøres hvis man har tilladt adgang til VBA-projektmodellen.
(modTID er det modul der skal udskiftes/oprettes)

Option Explicit
Const ModuleName As String = "modTID"

Sub auto_open()
    Call createbar
End Sub

Sub Export_VBA_Module()
    Dim Sfx As String
    Dim VBComp As VBComponent
    Dim VBComp1 As VBComponent
    Dim VBComps As VBComponents
    Dim To_File As Workbook
    Dim ExportName As String

    Set To_File = ActiveWorkbook
    If To_File.Name = ThisWorkbook.Name Then Exit Sub
    Set VBComp = ThisWorkbook.VBProject.VBComponents(ModuleName)
    Sfx = ".bas"
    ExportName = ThisWorkbook.Path & "\" & VBComp.Name & Sfx
    VBComp.Export Filename:=ExportName

    To_File.Activate

    Set VBComps = ActiveWorkbook.VBProject.VBComponents
    For Each VBComp1 In VBComps
        If VBComp1.Name = ModuleName Then VBComps.Remove VBComp1
    Next VBComp1

    ActiveWorkbook.VBProject.VBComponents.Import (ModuleName & ".bas")
    MsgBox ("Makroer overført, husk at gemme dit regneark")
End Sub

Sub createbar()
    Dim Tbar As CommandBar
    Dim Button1 As CommandBarButton
    Set Tbar = CommandBars.Add("Makrooverførsel", , , True)
    Set Button1 = Tbar.Controls.Add(msoControlButton, , , , True)
    With Button1
        .Caption = "Overfør makroer"
        .OnAction = "export_VBA_module"
        .Style = msoButtonCaption
    End With
    Tbar.Visible = True
End Sub
Avatar billede dkpret Nybegynder
13. februar 2011 - 12:06 #2
Hej Bak

Præcis sådan noget jeg havde i tankerne.
Tak for det.

Sender du et svar ?

Mvh Hans
Avatar billede bak Seniormester
13. februar 2011 - 12:23 #3
okay :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester