Avatar billede gladhund Nybegynder
18. november 2010 - 14:48 Der er 12 kommentarer og
1 løsning

Ændre samme kodelinje i mange excelfiler

Kære eksperter :)

Jeg har denne procedure i over 70 excelfiler:

Public Sub UdskrivRapport()
    Call SelectSheetsForPrint
   
    ActiveWindow.SelectedSheets.PrintOut copies:=1, preview:=False, ActivePrinter:="HP Color LaserJet 8500 PS", PrintToFile:=True, collate:=True
    Sheets("startside").Select
    Range("A1:A1").Select
End Sub

Jeg vil gerne lave den om til DEN her procedure, uden at skulle åbne og ændre samtlige filer :)! Kan det lade sig gøre?:

Public Sub UdskrivRapport()
    Call SelectSheetsForPrint
   
    Dim filnavn As String
    filnavn = Sheets("Startside").Range("C7").value
   
    ActiveWindow.SelectedSheets.PrintOut copies:=1, preview:=False, ActivePrinter:="HP Color LaserJet 8500 PS", PrintToFile:=True, PrToFileName:="C:\RAPPORTER\" & filnavn & ".ps", collate:=True
    Sheets("startside").Select
    Range("A1:A1").Select
End Sub

Thanx :)
Avatar billede natkatten Mester
18. november 2010 - 15:33 #1
Måske dette stykke shareware kan hjælpe dig (har ikke selv erfaringer med det):

http://www.office-excel.com/excel-addins/find-and-replace.html
Avatar billede gladhund Nybegynder
18. november 2010 - 15:38 #2
Det ser ud til at det virker med document properties - ikke med kode. Men tak for buddet :). Det jeg leder efter er en stump kode med en løkke der åbner filer og erstatter en tekstbid i et givent modul - hvis det kan lade sig gøre...
Avatar billede anlu Nybegynder
18. november 2010 - 19:10 #3
Måske kan du få noget ud af denne side:
http://www.cpearson.com/excel/vbe.aspx
Avatar billede gladhund Nybegynder
19. november 2010 - 11:41 #4
Hej anlu :)

Det ser spændende, svært og helt rigtigt ud, tak! Jeg prøver og vender tilbage...
Avatar billede gladhund Nybegynder
19. november 2010 - 13:25 #5
Hm.. jeg kan ikke se hvordan man ændrer i flere workbooks samtidig...?
Avatar billede anlu Nybegynder
20. november 2010 - 01:01 #6
De fleste af hans eksempler bruger ActiveWorkbook, men det kan let modificeres til at proceduren tager den workbook der skal rettes i som parameter, fx den der tilføjer en procedure kunne du ændre som foreslået nedenfor.
I en anden procedure kunne du så loope igennem de workbooks du vil have rettet og kalde AddProcedureToModule for hver af dem. Ikke fordi det lige er denne producere du nødvendigvis skal bruge, men kan du følge tankegangen?

Sub AddProcedureToModule(wb as Workbook)
        Dim VBProj As VBIDE.VBProject
        Dim VBComp As VBIDE.VBComponent
        Dim CodeMod As VBIDE.CodeModule
        Dim LineNum As Long
        Const DQUOTE = """" ' one " character

        Set VBProj = wb.VBProject
        Set VBComp = VBProj.VBComponents("Module1")
        Set CodeMod = VBComp.CodeModule
       
        With CodeMod
            LineNum = .CountOfLines + 1
            .InsertLines LineNum, "Public Sub SayHello()"
            LineNum = LineNum + 1
            .InsertLines LineNum, "    MsgBox " & DQUOTE & "Hello World" & DQUOTE
            LineNum = LineNum + 1
            .InsertLines LineNum, "End Sub"
        End With
   
    End Sub
Avatar billede gladhund Nybegynder
21. november 2010 - 11:38 #7
Jep, det kan jeg godt følge. Jeg tror, at hvis du kan hjælpe mig med loop proceduren også, så kan jeg gøre det... Jeg ved ikke hvordan jeg skal skrive en procedure, der åbner alle workbooks i en mappe fx. Jeg kan kun skrive en, der åbner en enkelt workbook... Jeg kan også lede efter en her inde, hvis det du mener det er bedst - så skal du bare smide et svar :)
Avatar billede anlu Nybegynder
21. november 2010 - 13:10 #8
Her en procedure der looper gennem xls og xlsm filer i en folder. Du skal selvfølgelig rette til så den gør lidt mere end bare skrive navnet i en celle :o)

Public Sub LoopThroughWorkbooks(folderName As String)
    Dim wb As Workbook
    Dim i As Integer
   
   
    Dim fs As FileSystemObject
    Dim dDirs As folder
    Dim fFile As File
    Dim ext As String
   
    Set fs = New Scripting.FileSystemObject
    Set dDirs = fs.GetFolder(folderName)
   
    Application.ScreenUpdating = False
   
    i = 1
    For Each fFile In dDirs.Files
       
        ext = Mid(fFile.Name, InStrRev(fFile.Name, ".") + 1)
        If ext = "xls" Or ext = "xlsm" Then
            ' open workbook
            Set wb = Workbooks.Open(fFile.Path)
            ' do something with workbook
            Sheet1.Cells(i, 1).Value = wb.Name

            ' close workbook
            wb.Close savechanges:=True
            i = i + 1
        End If
    Next
   
    Application.ScreenUpdating = True
End Sub
Avatar billede gladhund Nybegynder
21. november 2010 - 13:29 #9
Mange tak :). Ja, jeg skal jo så bruge koden til at rette i et modul, når hver enkelt workbook åbnes. Kanon hjælp - jeg kan ikke bede om mere! Jeg er klar med points, for en som sædvanlig fyldestgørende løsning...
Avatar billede anlu Nybegynder
21. november 2010 - 13:29 #10
Hov, jeg glemte lige at skrive at du skal sætte en reference til Microsoft Scripting Runtime for at den fungerer.
Avatar billede gladhund Nybegynder
21. november 2010 - 13:31 #11
Det er noteret :)
Avatar billede anlu Nybegynder
21. november 2010 - 13:34 #12
Håber det lykkes for dig. Ellers sig til hvis du har behov for mere sparring.
Avatar billede gladhund Nybegynder
21. november 2010 - 13:36 #13
Super cool - thanx - det husker jeg på :)
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