Avatar billede snowball Novice
19. august 2004 - 14:04 Der er 18 kommentarer og
2 løsninger

Udfør macroer der ligger i en anden fil

Hej.

Jeg søger råd til hvordan man nemmest, og ikke mindst bedst, klarer nedenstående opgave:

Jeg har en Excel fil med flere ark. Disse ark benytter sig at en masse macroer. Disse macroer vil jeg nu gerne flytte over i en Excel fil for sig selv, sådan så jeg let kan rette eventuelle fejl og dermed ikke igen skal sende den rettede Excel fil rundt til alle dem der bruger det.

Hvordan kalder man derfor bedst en macro som ligger i et andet ark? Jeg skulle gerne kunne sætte parametre på når jeg kalder macroerne i det andet ark.

Skal man "bare" åbne filen med macroer når man åbner den anden fil, og så er alt som det plejer? Vil det give nogen problemer når der er flere der skal bruge filerne på samme tid?

På forhånd tak.
Avatar billede sjap Praktikant
19. august 2004 - 15:52 #1
Gem makroerne i en såkaldt xla fil. Denne fil kan du så hente via tilføjelsesprogrammer, og dermed er funktionerne altid tilgængelige.
Avatar billede sjap Praktikant
19. august 2004 - 16:02 #2
Proceduren for at lave en xla fil er (så vidt jeg lige husker):

- Opret et tomt ark med alle dine makroer
- Gem regnearket som en xla-fil ("Gem som" filtype "Tilføjelsesprogram" eller et eller andet med xla)

Sværere er det faktisk ikke.

For at få adgang til makroerne, skal du

- Vælg menuen Funktioner/Tilføjelsesprogrammer
- Find din fil på listen eller brug funktionen "Gennemse" til at finde filen (Den dukker automatisk op på listen, hvis filen er gemt i mappen "Bibltek" i "Programmer\Microsoft Office\Office\")
Avatar billede snowball Novice
20. august 2004 - 07:50 #3
sjap: Jeg kan ikke helt få det til at virke. Jeg har oprettet en .xla fil med et par macroer for at teste det. Derefter har jeg lavet et alm. Excel dokument hvor jeg har tilføjet mit .xla dokument under Tools -> Add-ins. Min .xla fil bliver tilføjet uden fejl, og hvis jeg går ind i VBA editoren, så er .xla filen da også åben når jeg åbner mit alm. Excel dokument. Problemet er bare at jeg ikke umiddelbart kan tilgå de macroer jeg har i min .xla fil - jeg får bare fejlen "Sub or Function not defined"

Har jeg glemt noget!?
Avatar billede bak Forsker
20. august 2004 - 08:02 #4
Hvis du vil køre en makro i et xla-fil så skriv fx


Sub test()
Application.Run "Importmodul.XLA!show_userform1"
End Sub

Her køres makroen show_userform1 fra filen Importmodul.xla
Avatar billede snowball Novice
20. august 2004 - 08:09 #5
Det virker som sådan også, men kan bare ikke overføre parametre til mine funktioner !? Det skulle jeg meget gerne kunne.
Avatar billede bak Forsker
20. august 2004 - 08:20 #6
det kan du også sagtens
Application.Run "personal.xls!SizeCellsInCm", Range("A5")
Avatar billede bak Forsker
20. august 2004 - 08:22 #7
Ps, hvis det er funktioner, så skriv lige
public foran i xla filen. En funktion burde du kunne kalde alle steder fra.

Public Function Minfunktion()
Avatar billede snowball Novice
20. august 2004 - 08:50 #8
Det bliver bedre og bedre ;)

Fejlen var at jeg angav parameteren forkert. Nu virker det fint med Subs, men kan ikke få Functions til at virke.

Application.Run ser ikke lige ud til at kunne sende en værdi retur !?
Avatar billede sjap Praktikant
20. august 2004 - 10:42 #9
I står godt nok tidligt op her :0)

Så vidt jeg lige husker, behøver du heller ikke bruge Application.Run ved funktioner. Funktionen kan f.eks. erklæres som

Public Function Minfunktion(Område AS Range) AS String

Så kan du direkte i regnearket skrive =Minfunktion(A1:B3) for at få resultatet
Avatar billede sjap Praktikant
20. august 2004 - 10:49 #10
Nåh ja, hvis du blot skal bruge funktionen i noget andet programkode, kan du blot kalde det direkte, f.eks.:

NyStreng = Minfunktion(Range("A1:B3")) & "X"
Avatar billede snowball Novice
20. august 2004 - 10:55 #11
Et eksempel:

Jeg har i min .xla fil en macro som nedenstående:

Public Function MyReturnThis(pMessage As String) As String
  MyReturnThis = "Du skrev: " & pMessage
End Function

Den funktion vil jeg så gerne kalde fra. f.eks. en knap i mit andet Excel dokument.

tmpstr = MyReturnThis("Dette er en anden test") virker ikke - får fejlen som beskrevet i 07:50:46. Hvis jeg sætter Application.Run ind, så kommer der en anden fejl.

Mine Subs og Functions skal udelukkede kaldes fra en anden macro!
Avatar billede sjap Praktikant
20. august 2004 - 11:15 #12
Prøv i den anden makro at vælge menuen Funktioner/Referencer og se efter om din xla file er krydset af på listen.
Avatar billede snowball Novice
20. august 2004 - 11:21 #13
Det var den ikke, men hvis jeg prøver på at tilføje den, så får jeg fejlen "Name conflicts with existing module, project or object library".

Men .xla filen bliver jo åbnet når jeg åbner mit normale Excel dokument, så henvisningerne burde jo være gode nok!?
Avatar billede sjap Praktikant
20. august 2004 - 11:24 #14
Du har gemt en funktion i din xla-fil, der har samme navn som en funktion i det regneark du har åbnet. Hvis det er den samme funktion, skal du slette den ene. Hvis det er forskellige funktioner, kan du jo lige prøve at omdøbe den ene.
Avatar billede bak Forsker
20. august 2004 - 11:36 #15
Prøv i project-explorer at stille dig på selve xla-projetet. Giv nu dit xla project et sigende navn og gem.

Nu går du så til dit nye projekt og sætter så referencen til dit sigende navn for xla-projektet.
Så skulle du gerne undgå konflikter som skyldes at der i reference listen er flere navne med navnet VBA-project
Avatar billede snowball Novice
20. august 2004 - 12:17 #16
Så ser det ud til at virke :)

Men det vil vel ikke give nogen problemer at der er flere som benytter sig at dette på samme tid? Altså at der f.eks. er 3 brugere som åbner mit Excel dokument som jo henviser til den samme .xla fil.

Under alle omstændigheder bedes bak lave et svar så i kan deles om pointene :)
Avatar billede bak Forsker
20. august 2004 - 12:27 #17
Du må selv teste om det giver problemer.
Der sker det når brugerne skal indsætte din add-inn at de bliver spurgt om de vil kopiere den over i deres eget xla-bibliotek. Hvis de gør det er der ingen problemer.
Avatar billede snowball Novice
20. august 2004 - 12:34 #18
Har lige testet det lidt, og det ser ikke ud til at give problemer, at der er flere brugere der har det samme dokument åben med henvisningen til .xla dokumentet.

Fandt desuden af af det ikke er nødvendigt at tilføje .xla dokumentet i det normale Excel dokument som beskrevet i 07:50:46, men det er nok bare at lave det som en reference i VBA editoren.

Mange tak for hjælpen :)
Avatar billede snowball Novice
20. august 2004 - 12:35 #19
For hvis man tilføjer .xla dokumentet som beskrevet i 07:50:46, så vil den jo prøve at åbne .xla'en hver gang Excel startes, og det er jo ikke nødvendigt ;)
Avatar billede sjap Praktikant
20. august 2004 - 15:18 #20
Jeg var bare lige væk et øjeblik (som så blev til 3 timer), men godt at problemet nu ser ud til at være løst :0)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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