Avatar billede jdnielsen Nybegynder
27. maj 2003 - 14:12 Der er 14 kommentarer og
1 løsning

Makro, der redigerer makro i andet regneark

Jeg er ved at lave et regneark med en rettelses-makro, der kan tage fat i et andet regneark og tilføje rettelser i dette ark. Den side af sagen er til at håndtere. Men rettelses-makroen skal desuden redigere nogle linier i det andet regnarks makroer. Hvordan refererer man til og redigerer i det andet arks makroer?!!
Avatar billede Slettet bruger
27. maj 2003 - 15:55 #1
Hvad er dit formål med at redigere kodelinier i det andet arks makro ?
Avatar billede jdnielsen Nybegynder
27. maj 2003 - 16:06 #2
Jeg skulle måske have præciseret, at det er interaktion mellem to helt separate workbooks, jeg er interesseret i, ikke bare mellem ark.
Vi sender en template ud til en masse brugere, der rapporterer regnskabstal i denne. Når der forekommer rettelser (nye konti, nye selskaber, etc.), vil vi lave en makro, der opdaterer deres template (og derved bevarer historiske data) i stedet for at distribuere en ny, tom template. Sagen er bare, at den rettelse, der nu skal laves, ikke kun hidrører selve regnearksdelen af templaten, men også de bagvedliggende makroer. Så jeg skal altså have fingre i templatens makroer fra den rettelsesmakro, vi sender ud. Håber det er forståligt.
Avatar billede bak Forsker
27. maj 2003 - 17:12 #3
Hvor stor en operation taler vi om her ?
Ændring af en linie, ændring af en hel procedure eller ændringer i et helt modul (udskiftning af modul) ?

Jeg spørger fordi man kan gribe det forskelligt an ....
Avatar billede janvogt Praktikant
28. maj 2003 - 00:14 #4
Spændende. Jeg lytter lige med.
Plejer selv bare at udskifte et modul (manuelt).
Avatar billede jdnielsen Nybegynder
28. maj 2003 - 09:08 #5
I første omgang er der tale om en simpel søg og erstat på nogle linier i ét modul (nogle begreber i selve templaten ændres og derfor skal også ændres de steder i makroen, der refererer til disse begreber). Jeg kom frem til i går, at det nemmeste formentlig er at åbne editoren i den "eksterne" workbook, og derefter lave proceduren ved at sende keystrokes (dvs. sende en Alt-F11 med SendKeys og derefter køre søgerutinen med yderligere keystrokes). Risikoen for, at det går galt er imidlertid temmelig stor, når makroen sendes ud til mange brugere med forskellige Excel/Win-versioner. Jeg ville desuden gerne kunne referere direkte til det aktuelle modul og lave en lokal søg og erstat der fremfor at skulle lave en søg og erstat på hele projektet.
Avatar billede bak Forsker
28. maj 2003 - 09:47 #6
jeg viser lige mit forslag. Det går på at skifte et helt modul ud. Dette er mere sikkert end udskifte enkeltlinier. På denne måde er man også sikker på at alle ændringer slår igennem.
Koden består af 4 sub hvoraf man kun skal køre sub main.
Jeg forudsætter at denne kode ligger i et seperat modul og at regnearket endvidere indeholder det nye modul (altså med ny kode).
Modulet der skal udskiftes hedder i dette tilfælde "Misc"
Templaten, der skal have udskifter modul hedder "Test.xlt"


Sub Export()
    Dim module_name As String
    module_name = "c:\temp\Modul.bas"
    Application.VBE.ActiveVBProject.VBComponents("Misc").Export module_name
End Sub

Sub Remove_Module()
  On Error Resume Next
  Set VBP = ActiveWorkbook.VBProject
  VBP.VBComponents.Remove VBP.VBComponents("Misc")
End Sub

Sub Import()
    Dim module_name As String
    module_name = "c:\temp\Modul.bas"
    ActiveWorkbook.VBProject.VBComponents.Import module_name
End Sub


Sub main()
Export
Workbooks("test.xlt").Activate
Remove_Module
Import
End Sub
Avatar billede jdnielsen Nybegynder
28. maj 2003 - 09:48 #7
Hmmm.... ville måske være lige så let at erstatte hele modulet. Er der nogen, der har nogle linier, der kan gøre det?
Avatar billede jdnielsen Nybegynder
28. maj 2003 - 09:48 #8
Ok, fik sendt sidste kommentar, inden jeg så dit svar.
Avatar billede bak Forsker
28. maj 2003 - 09:49 #9
Først eksportes modulet "Misc" fra det nye regneark.
Derefter fjernes det tilsvarende modul fra "Test.xlt"
og det eksporterede modul importeres så til "Test.xlt"
Avatar billede bak Forsker
28. maj 2003 - 09:59 #10
Det lige en fejl i makroen. Den kan i øjeblikke kun køre fra VB-editoren
Dette ændrer jeg lidt senere. Nu må jeg lige beskæftige mig med alm  arbejde :-)
Avatar billede bak Forsker
28. maj 2003 - 17:29 #11
Ok, ny og forbedret version :-)
I const FILE indsættes navnet på filen der ønskes opdateret.
Forudsætning :
Begge filer er åbne inden sub main køres.


Const FILE As String = "test.xlt"
Const MODULE_NAME As String = "c:\temp\Modul.bas"

Sub Export()
    Application.VBE.ActiveVBProject.VBComponents("Misc").Export MODULE_NAME
End Sub

Sub Remove_Module()
  On Error Resume Next
  Set VBP = Workbooks(FILE).VBProject
  VBP.VBComponents.Remove VBP.VBComponents("Misc")
End Sub

Sub Import()
    Set VBP = Workbooks(FILE).VBProject
    VBP.VBComponents.Import MODULE_NAME
End Sub

Sub main()
Export
Remove_Module
Import
End Sub
Avatar billede bak Forsker
28. maj 2003 - 17:36 #12
Lidt nemmere at forstå (måske)
Const FILE As String = "test.xlt"    ' fil, med modul der skal udskiftes
Const MODULE_NAME As String = "Misc"  ' modulet der skal udskiftes
Const TEMPFILE As String = "c:\temp\Modul.bas"  'temporær fil

Sub Export()
    Application.VBE.ActiveVBProject.VBComponents(MODULE_NAME).Export TEMPFILE
End Sub

Sub Remove_Module()
  On Error Resume Next
  Set VBP = Workbooks(FILE).VBProject
  VBP.VBComponents.Remove VBP.VBComponents(MODULE_NAME)
End Sub

Sub Import()
    Set VBP = Workbooks(FILE).VBProject
    VBP.VBComponents.Import TEMPFILE
End Sub

Sub main()
Export
Remove_Module
Import
Kill TEMPFILE    ' fjern temporær fil
End Sub
Avatar billede jdnielsen Nybegynder
28. maj 2003 - 20:56 #13
Det ligner noget, jeg kan bruge. Kan man forvente uden videre at kunne skrive til det temporære dir? Hvad hvis det ikke findes? Jeg takker og giver points.
Avatar billede bak Forsker
28. maj 2003 - 21:03 #14
Nej, dir skla findes, men du kan jo bare ændre stien til
Const TEMPFILE As String = "c:\Modul.bas"
Drev C: har de fleste :-) og filen bliver jo også slettet til sidst.
Avatar billede jdnielsen Nybegynder
30. maj 2003 - 07:35 #15
Ja, det er nok sikrere at lægge den i roden. Tak igen.
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