Avatar billede pingvinvarmer Nybegynder
10. maj 2010 - 15:16 Der er 10 kommentarer

Køre VBA kode fra seperat fil

Dette spørgsmål har jeg stillet før uden held:

Hvordan kører man VBA kode fra en seperat fil?

Jeg vil gerne gemme min kode i f.eks. en .txt fil, og så kunne køre den fra en VBA macro i word eller excel.
Avatar billede supertekst Ekspert
10. maj 2010 - 18:02 #1
Hvad er årsagen/formålet til dette?
Avatar billede pingvinvarmer Nybegynder
11. maj 2010 - 09:04 #2
Så kan alle brugere installere én macro, som alle kører koden fra samme fil. Dermed skal jeg bare lave opdateringer i den ene fil, uden at alle brugere skal opdatere deres macro.

De kører altså automatisk den mest opdaterede version hele tiden.
Avatar billede supertekst Ekspert
11. maj 2010 - 09:13 #3
Ville en serverfil indeholdende makroen ikke kunne det samme?
Avatar billede pingvinvarmer Nybegynder
11. maj 2010 - 09:39 #4
Hmmm.... Måske... Så ved jeg bare ikke helt hvordan.

Vi får genereret et excelark fra et seperat program (af ældre dato, som ingen umiddelbart har lyst til at røre ved). Dette skal bruges som inddata til min macro, der behandler data, men bruger excels funktioner til at lave pæne grafer mm.

Min macro er under løbende forbedring. Eksempelvis har jeg indtil nu brugt Newron-Raphson iteration, men en dag jeg får tid, kunne jeg implementere Arc-length eller lign.

Min idé var derfor, at få alle brugere til at "installere" en knap i excel, som kører min macro. Det ville være super brugervenligt.
Avatar billede supertekst Ekspert
11. maj 2010 - 09:47 #5
Vender tilbage lidt senere .....
Avatar billede supertekst Ekspert
11. maj 2010 - 10:23 #6
Har du overvejet "Tilføjelsesprogrammer"?
Avatar billede pingvinvarmer Nybegynder
11. maj 2010 - 10:40 #7
Øh... Er det dét der hedder "Add-Ins" i den engelske version?

Det var her jeg vil placere min knap, som kører denne macro:

Set MyFSO = CreateObject("Scripting.FileSystemObject")
Set MyFile = MyFSO.OpenTextFile("X:\macroA.txt", 1)
MyMacro = MyFile.ReadAll

MyFile.Close
Set MyFSO = Nothing

Exec MyMacro


Kommandoen "Exec" er vist en del af VBS, men den virker ikke i VBA.
Avatar billede supertekst Ekspert
11. maj 2010 - 10:51 #8
Add-Ins : JA

Run Method
See AlsoApplies ToExampleSpecificsRun method as it applies to the Range object.

Runs the Microsoft Excel macro at this location. The range must be on a macro sheet.

expression.Run(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)
expression    Required. An expression that returns a Range object.

Arg1-Arg30  Optional Variant. The arguments that should be passed to the function.

Run method as it applies to the Application object.

Runs a macro or calls a function. This can be used to run a macro written in Visual Basic or the Microsoft Excel macro language, or to run a function in a DLL or XLL.

expression.Run(Macro, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)
expression    Required. An expression that returns an Application object.

Macro  Optional Variant. The macro to run. This can be either a string with the macro name, a Range object indicating where the function is, or a register ID for a registered DLL (XLL) function. If a string is used, the string will be evaluated in the context of the active sheet.

Arg1-Arg30  Optional Variant. The arguments that should be passed to the function.

Remarks
You cannot use named arguments with this method. Arguments must be passed by position.

The Run method returns whatever the called macro returns. Objects passed as arguments to the macro are converted to values (by applying the Value property to the object). This means that you cannot pass objects to macros by using the Run method.

Example
This example shows how to call the function macro My_Func_Sum, which is defined on the macro sheet Mycustom.xlm (the macro sheet must be open). The function takes two numeric arguments (1 and 5, in this example).

mySum = Application.Run("MYCUSTOM.XLM!My_Func_Sum", 1, 5)
MsgBox "Macro result: " & mySum
Avatar billede pingvinvarmer Nybegynder
11. maj 2010 - 12:41 #9
Ja, ok.

Det kunne selvfølgelig være en løsning.

Men så vidt jeg kan se, kræver det at excel-arket med min macro er åbent.

...jeg kan selvfølge tilføje til min Add-Ins-knap at den skal åbne arket... Hvilket vil være tæt på den løsning jeg forestillede mig.
Avatar billede supertekst Ekspert
11. maj 2010 - 14:11 #10
I Add-Ins kan du jo indlægge kode, der henter data fra den genererede XLS-fil - uden at åbnes som synlig denne - hvis dette ønskes.
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