30. juni 2005 - 13:44Der er
7 kommentarer og 1 løsning
Kode der sletter alle makroer
Jeg sidder og laver en masse skabeloner. Til skabelonerne laver jeg nogle makroer, som henter oplysninger, auto indsætter tekst m.m. Når jeg videresender dokumenterne baseret på disse skabeloner, får jeg problemer med makro-sikkerheden. Jeg efterlyser derfor noget kode, der sletter alle makroer, når dokumentet lukkes. Er der nogen, der kan hjælpe med dette lille problem :O) ???
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Du vil altså lave en makro, der sletter sig selv - det hedder en virsu og derfor vil du få problemet med dit antivirusprogram...
Men hvis du f.eks. placerer maroen i normal.dot og køre den på det aktive dokument, så skulle det nok kunne lade sig gøre - vil det være en løsnig, der er OK ?
Hm.... det lyder lidt skummelt - men jah. Jeg har tidligere benyttet at placere makroerne i normal.dot, men når jeg laver nye versioner, er der også en ny normal.dot og derved overskriver jeg de andre brugers indstillinger - det bliver man ikke populær af :O) Og jeg skal kunne videresende mine dokumenter til samarbejdspartnere, der så skal kunne skrive videre på sagen. Derfor kan jeg ikke bare sende en pdf-fil. Jeg kan heller ikke forvente, at alt og alle vil installere mit certifikat - det er kun okay internt. Men jeg kan jo heller ikke ha´ at mit antivirusprogram popper op og forhindrer åbningen af dokumenterne. Andre forslag?
Det jeg mente med Normal.dot var at den´makro der sletter andre makroer i andre filer skulle ligee i normal.dot og køres aktivt fra dig, når du vil sende dine skabeloner til samarbejdspartnere.
Rem Følgende kode er i "ThisDocument i Normal" Sub autoclose() find_Slet_Macroer End Sub Sub find_Slet_Macroer() Dim antalProjekter, projektNavn, antalKomponenter, komponentNavn, vbC As Object, antalLinier
antalProjekter = Application.VBE.VBProjects.Count If antalProjekter > 0 Then For p = 1 To antalProjekter projektNavn = LCase(Application.VBE.VBProjects.Item(p).Name) If projektNavn = "project" Then antalKomponenter = Application.VBE.VBProjects.Item(p).VBComponents.Count If antalKomponenter > 0 Then For c = 1 To antalKomponenter komponentNavn = LCase(Application.VBE.VBProjects.Item(p).VBComponents(c).Name) If komponentNavn <> "thisdocument" Then Rem sletter evt. modul-objektet Set vbC = Application.VBE.VBProjects.Item(p).VBComponents.Item(komponentNavn) Application.VBE.VBProjects.Item(p).VBComponents.Remove vbC Else Rem sletter evt. kodelinier i ThisDocument - men ikke objektet antalLinier = Application.VBE.VBProjects.Item(p).VBComponents(c).CodeModule.CountOfLines If antalLinier > 0 Then Application.VBE.VBProjects.Item(p).VBComponents(c).CodeModule.DeleteLines 1, antalLinier End If End If Next c End If End If Next p End If End Sub
Det er ikke nogen løsning :-( I Word 97 benyttede jeg mig af en-NULL stil funktion og det er bedre end at "udfordre" diverse anti virus programmer - det kan vist kun give problemer - men det kan jeg ikke rigtig finde frem til i Word XP. Så der er ikke rigtig nogen løsning for nuværende.
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.