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