15. november 2013 - 14:25Der er
7 kommentarer og 1 løsning
VBA kode der retter i eksisterende modul
Hej Eksperter
Jeg har tidligere skrevet et lignende spørgsmål uden at få et brugbart svar, så nu prøver jeg igen. Jeg kører Excel 2007 engelsk version.
Kan man skrive en VBA kode der ved afspilning fra ens "Personal VBAProject" laver en rettelse i en eksisterende VBA kode gemt i filens "modul1"?
Jeg har nemlig 90 filer som jeg skal have rettet en VBA kode i (gemt i filens modul1), og jeg ville gerne undgå at skulle ind og rette det manuelt i hver fil.
Jeg har ikke prøvet, men det er vist muligt at importere og eksportere .bas-filer med et program (makro).
Hvis du lagde alle filerne i ét katalog, kunne de gennemløbes med en For-Each løkke, hvor man åbner hver fil, importerer det nye og overskriver det gamle modul, gemmer og lukker.
Her er ihver fald en sample på hvordan man med VBA kode kan ændre VBA kode
Sub ReplaceVBA() For i = 1 To Application.VBE.CodePanes.Count If Application.VBE.CodePanes(i).CodeModule.Name = "Module1" Then For o = 1 To Application.VBE.CodePanes(i).CodeModule.CountOfLines If Application.VBE.CodePanes(i).CodeModule.Lines(o, 1) = "TestString = ""Test""" Then Application.VBE.CodePanes(i).CodeModule.ReplaceLine o, "TestString = ""TestReplace""" End If Next End If Next i End Sub
Fik ikke svaret på dit spørgsmål: Nej, jeg mener ikke, det er muligt. Man kan slette, tilføje og gøre andre ting, som bl.a. beskrives her: http://www.cpearson.com/excel/vbe.aspx men det løser vist ikke din opgave. Derfor tror jeg på den med at udskifte modulet med kode.
Det kan man godt, og det tror jeg også Chip Pearson mener når han i artiklen skriver "modifies other VBA Projects".
Jeg har tidligere lavet en løsning til en kunde, hvor netop dette er tilfældet, og jeg kan se i koden, at jeg har lavet funktioner der f.eks. sletter en hel "Sub", og en anden funktion der opretter den samme "Sub" igen med ny kode.
Spørgsmålet er, hvorvidt det er indsatsen værd for _kun_ 90 filer, tænker du har redigeret dem på max 30 minutter, og så er du videre uden ret meget bøvl, og ingen filer fejler på din kode.
Tak for jeres svar. Jeg er på vej til USA og er væk de næste par uger, så her lige et hurtigt retursvar til jer.
@finb: ja, filerne ligner hinanden, de er bygget op omkring den samme "skabelon" og indholder bare forskellige værdier i hver fil.
@Sitestory: jeg prøver lige at læse det igennem du har linket til.
@IT-GuFFE: tak for foreslaget. Kan du forklarer mig hvor jeg skal skrive den nye VBA kode ind henne i din Sub Replace?
@Smartoffice: ja, det kan du såmænd have ret i. Men det er bare desværre et gentagende problem for mig at jeg skal have lavet smårettelser i modulet til de her 90 filer. Og hvis jeg gerne vil have en kollega til at gøre det, som ikke har kendskab til Visual Basic vinduet, ville det være smart hvis denne kollega bare kunne afspille en VBA kode der gjorde det der skulle gøres. Så derfor er jeg stadig interesseret i at få det her løst.
NB! For at koden vil køre skal der sættes flueben i "Hav tillid til VBA-projektobjectmodellen" som er under "Center for sikkerhed og rettighedsadministration > Indstillinger for makro"
Da det jo er en "beskidt" makro som ændrer i filerne.
Sub ReplaceVBA() 'Finder linjen TestString = "Test" 'Ændrer linjen til TestString = "TestReplace" For i = 1 To Application.VBE.CodePanes.Count If Application.VBE.CodePanes(i).CodeModule.Name = "Module1" Then For o = 1 To Application.VBE.CodePanes(i).CodeModule.CountOfLines If Application.VBE.CodePanes(i).CodeModule.Lines(o, 1) = "TestString = ""Test""" Then 'Linjen der skal findes og ændres Application.VBE.CodePanes(i).CodeModule.ReplaceLine o, "TestString = ""TestReplace""" 'Den nye kode indsættes her End If Next End If Next i End Sub
Jeg har ikke kunne få det til at virke, og har istedet placeret koderne som et add-in på hver bruges PC => så skal der kun rettes i koden hos 4 brugere istedet for i 90 filer. Jeg lukker spørgsmålet.
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.