18. november 2010 - 14:48Der 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
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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...
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
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 :)
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
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...
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.