16. september 2001 - 10:36Der er
7 kommentarer og 1 løsning
referancer til makroer i excel
Hej Eksperter,
Jeg står har en masse ecxel-filer i en rimelig omfattende bibliotekstruktur. Problemet består i at selve startbiblioteket i denne struktur skal renames. Derved vil jeg mene at alle mine makroer som har referancer som har det gamle startbiblioteksnavn ikke vil fungere mere. Hvad gør man i sådan et tilfælde??
Nu kender jeg ikke din specifikke problemstilling, men behøver du at angive hele stien i dine referencer? Jeg plejer at undlade dette. Godt nok kan makroen så ikke kaldes ud over det aktive dokument, men det er også ofte tilstrækkeligt.
Ihvertfald undgår du så, at komme i ovennævnte problemstilling.
Morton> her er lidt rå kode til dig. Det kan sikkert gøres smartere men det virkede for mig. Sti er det bibliotek du har dine ark med makroer i (den tager også underbibs.) ChangeFrom er den tekst der skal erstattes og Change TO er det den skal erstattes med. Lav nu en test først og fjern så msgbox
Sub findstreng_I_VBA_Kode() Dim VBComp As Object Dim StartLine As Long Dim Msg As String Dim Sti, ChangeFrom, ChangeTO, TmpLine, NewLine As String Dim HasFoundIt, LineFound As Boolean
Set fs = Application.FileSearch \'************************************ \'BRUGERVARIABLE Sti = \"C:\\dokumenter\" ChangeFrom = \"c:\\windows\" ChangeTO = \"c:\\temp\" \'************************************ Application.Calculation = xlManual Application.ScreenUpdating = False With fs .NewSearch .LookIn = Sti .SearchSubFolders = True .FileName = \"*.xls\" End With If fs.Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To fs.FoundFiles.Count fil = fs.FoundFiles(i) Workbooks.Open fil, 0 For Each VBComp In ActiveWorkbook.VBProject.VBComponents Set VBCodeMod = ActiveWorkbook.VBProject.VBComponents(VBComp.Name).CodeModule With VBCodeMod StartLine = .CountOfDeclarationLines + 1 HasFoundIt = .Find(ChangeFrom, StartLine, 1, .countoflines, 1) If HasFoundIt Then LineFound = True Do Until LineFound = False TmpLine = .Lines(StartLine, 1) y = InStr(1, TmpLine, ChangeFrom, vbTextCompare) NewLine = Mid(TmpLine, 1, y - 1) & ChangeTO & Mid(TmpLine, y + Len(ChangeFrom)) .replaceline StartLine, NewLine ActiveWorkbook.Save MsgBox (.Lines(StartLine, 1) & \" linie :\" & StartLine) StartLine = StartLine + 1 LineFound = .Find(ChangeFrom, StartLine, 1, 0, 1) Loop End If End With Next VBComp ActiveWorkbook.Close savechanges = False Next i End If Application.Calculation = xlAutomatic Application.ScreenUpdating = True End Sub
Lidt mere forklaring: Koden finder alle *.xls filer i \"STI\" og underbiblioteker, åbner dem en efter en, søger alle moduler igennem efter strengen i ChangeFrom og erstatter kodelinien med en ny linie, hvor ChangeFrom er ændret til ChangeTO-strengen. Gemmen filen, hvis der er foretaget en udskiftning.
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.