30. november 2003 - 10:14Der er
11 kommentarer og 1 løsning
Kan makroer lave makroer (VBA i Excel)
Jeg har en hel masse Excel-filer, som indeholder de samme VBA-makromoduler. Jeg har nu lavet en "opdatering"/forbedring af mastermakroen, som jeg gerne vil have implementeret i alle disse eksisterende projekter.
Jeg ved, at man kan eksportere makromoduler (masteren) og slette eksisterende makromoduler og indlæse/importere disse gemte moduler (i de eksisterende projekter).
.. men kan man ikke få en VBA-rutine til at gøre dette monotone arbejde ? Jeg har forsøgt med Excel makrooptageren, men når jeg forsøger at optage noget, som foregår i makromodulerne bliver der ikke optaget noget.
sub main her gør start set det du ber om. Den og det nye modul skal ligge i et regneark, der er åben, Aktiver så det regneark der skal have et nyt modul og kør så makroen Main. Husk at ændre linien Const MODULE_NAME As String = "Misc" til det modulnavn du bruger. Bemærk at der ikke er nogen fejlfangere her.
Option Explicit Const MODULE_NAME As String = "Misc" ' modulet der skal udskiftes Const TEMPFILE As String = "c:\Modul.bas" ' temporær fil Public WKB As Workbook
Private Sub Export_Mod() ThisWorkbook.VBProject.VBComponents(MODULE_NAME).Export TEMPFILE End Sub
Private Sub Remove_Mod(FILE As String) On Error Resume Next Workbooks(FILE).VBProject.VBComponents.Remove _ Workbooks(FILE).VBProject.VBComponents(MODULE_NAME) End Sub
Private Sub Import_Mod(FILE As String) Workbooks(FILE).VBProject.VBComponents.Import TEMPFILE End Sub
Sub Main() Dim stFile As String stFile = ActiveWorkbook.Name Export_Mod Remove_Mod (stFile) Import_Mod (stFile) Kill TEMPFILE ' fjern temporær fil End Sub
Tænk forøvrigt også på at en sådan makro risikerer at blive fanget af antivirus-programmer, idet den jo er bygget tl at ændre/tilføje kode til eksisterende regneark.
I stedet for at flytte alle dine makroer (moduler) til hver enkelt excelbog skal du overveje om det ikke er en ide at lave en dll-fil der indeholder hele dit bibliotek af funktioner? (Som du så sætter en reference til fra din workbook.) På den måde er det nemt at vedligeholde / opdatere. Du behøver nu ikke at "kopiere" masteren til alle dine excelbøger hver gang.
Det er heller ikke muligt med mindre du har Visual Basic til rådighed. Men hvis du ikke har det kan du evt. klare dig med at flytte dine koder over i et tomt regneark og gemme denne som en xla-fil. Herefter går du op i Funktioner / tilføjelsesprogeammer og finder din nye xla-fil og sætter flueben ved den. Nu er dine funktioner altid til rådighed, uanset hvilket regneark du åbner. Hvis du har andre der bruger dine ark skal de også bare have xla-filen.
caschmidt -> Sorry - jeg havde ikke lige tænkt på at det var et "rent" excelspm. Det er trods alt et VisualBasic forum her :-) Men hvor om alting er, så er en xla-fil et rigtig godt alternativ (det bedste mener jeg!) hvis du ikke har Visual Basic til rådighed.
Ja! Fordelen er at en xla-fil er en såkaldt add-in (tilføjelsesprogram) Som bak skriver har du altid dine funktioner / makroer til rådighed. Du behøver ikke at åbne filen hver gang du har brug for en af makroerne derfra.
Det behøver jeg da heller ikke med Person.xls, for den har jeg jo arkiveret i mappen XLStart og den starter derfor altid sammen med Excel. Men OK, jeg kan da godt se mulighederne i en add-in, hvor bruger kan slå funktionen til og fra efter behov.
Forøvrigt har i mellemtiden fået løst mit problem, som beskrevet i spørgsmålet øverst på denne side. Det var naturligvis bak, som ledte mig på vej med sine "sub-main" koder. Hvis bak vil svare (ikke blot kommentere) skal jeg gerne tildele point.
Jo, sagtens, men nu havde jeg lige de tre stumper, og dette var den nemmeste måde at sammensætte dem på ;-)
Synes godt om
Ny brugerNybegynder
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.