Avatar billede caschmidt Nybegynder
30. november 2003 - 10:14 Der 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.

MvH
Carsten
Avatar billede bak Forsker
30. november 2003 - 11:25 #1
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
Avatar billede bak Forsker
30. november 2003 - 11:27 #2
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.
Avatar billede slo Nybegynder
01. december 2003 - 11:14 #3
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.
Avatar billede caschmidt Nybegynder
01. december 2003 - 16:27 #4
Til slo:
Æhh "dll-filer" ?
Nu er jeg ganske vist ikke novice indenfor VBA-koder, men dér faldt jeg godt nok af.
Er det svært ?
Avatar billede bak Forsker
01. december 2003 - 16:40 #5
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.
Avatar billede slo Nybegynder
02. december 2003 - 08:32 #6
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.
Avatar billede caschmidt Nybegynder
02. december 2003 - 08:41 #7
Som jeg læser jeres kommentarer om xla-filer lyder det som om, at en xla-fil kan gøre det samme som de VBA-koder jeg p.t. har liggende i Person.xls ?
Avatar billede slo Nybegynder
02. december 2003 - 08:44 #8
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.
Avatar billede caschmidt Nybegynder
02. december 2003 - 09:09 #9
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.
Avatar billede bak Forsker
02. december 2003 - 13:32 #10
fint :-)
Avatar billede caschmidt Nybegynder
03. december 2003 - 16:33 #11
Fair nok :-)
PS: Hvorfor var det nødvendigt med Sub-Main koder ?  Kunne main ikke løse opgaven i én Sub ?
Avatar billede bak Forsker
04. december 2003 - 08:00 #12
Jo, sagtens, men nu havde jeg lige de tre stumper, og dette var den nemmeste måde at sammensætte dem på ;-)
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
Kategori
Kurser inden for grundlæggende programmering

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