13. februar 2011 - 10:06Der 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. :-)
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
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.