Gjøre endringer i en gruppe av arbeidsbøker

April 25  by Eliza

Over tid er det veldig enkelt å lage og samle et stort antall Excel-arbeidsbøker. Tenk deg at du hadde en hel haug med arbeidsbøker der du trengte å gjøre samme endring. For eksempel kan du trenger å endre verdien som er lagret i celle A10 av hver av regnearkene i hver av arbeidsbøker.

Hvis du hadde bare noen arbeidsbøker for å endre, er oppgaven ganske enkelt: Legg hver arbeidsbok og i sin tur gjøre endringen til hver av dem. Hvis du har et par hundre arbeidsbøker som endringen må gjøres, så oppgaven blir mer formidabel.

Hvis du forventer bare trenger å gjøre denne oppgaven en gang, så den enkleste løsningen er å opprette en tekstfil som inneholder banen og filnavnet til hver av arbeidsbøker, én arbeidsbok per linje. For eksempel, kan du ende opp med en fil som hadde oppføringer som dette:

c: \ myFiles \ først workbook.xls
c: \ myFiles \ andre workbook.xls
c: \ myFiles \ tredje workbook.xls

Filen kan ha så mange linjer i det som er nødvendig; det spiller egentlig ingen rolle. Det viktigste er at hver linje være en gyldig bane og filnavn, og at det ikke må være tomme linjene i filen.

Du kan mest enkelt lage en slik fil ved å vise en ledetekst vindu, navigere til katalogen som inneholder arbeidsbøker, og utføre denne kommandoen:

dir / b> myfilelist.txt

Hver fil i katalogen ender opp i myfilelist.txt fil. Du må laste inn tekstfilen inn i en teksteditor og sjekke det ut, slik at du kan slette overflødige oppføringer. (For eksempel vil myfilelist.txt ende opp i oppføringen.) Du må også legge til banenavnet til begynnelsen av hver linje i filen.

Når filen er ferdig, kan du starte Excel og bruke en makro til å lese tekstfilen, legger hver arbeidsbok oppført i tekstfilen, gå gjennom hvert regneark i arbeidsboken, gjøre de nødvendige endringer, og lagrer arbeidsboken. Følgende makro vil utføre disse oppgavene pent.

Sub ChangeFiles1 ()
Dim sFilename As String
Dim wks Som regneark

Åpne "c: \ myFiles \ myfilelist.txt" For Input Som # 1
Gjør Mens Not EOF (1)
Input # 1, sFilename 'Get arbeidsbok bane og navn
Workbooks.Open sFilename

Med Active
For hver wks I .Worksheets
'Angi endringen å gjøre
wks.Range ("A1"). value = "A1 Changed"
Neste
Avslutt med

ActiveWorkbook.Close Savechanges: = sant
Loop
Lukk # 1
End Sub

Mens denne tilnærmingen fungerer bra hvis du bare nødt til å behandle et enkelt parti av arbeidsbok filer, kan det gjøres mye mer fleksibel hvis du forventer å måtte gjøre slike endringer i fremtiden. Den største problemer, selvfølgelig, er å sette sammen den myfilelist.txt fil hver gang du ønsker å behandle en gruppe med filer. Fleksibilitet er lagt til dersom makro kan ganske enkelt bruke en katalog og deretter laste hver arbeidsbok fra den katalogen.

Sub ChangeFiles2 ()
Dim MyPath As String
Dim minFil As String
Dim dirname As String
Dim wks Som regneark

'Endre katalogbanen som ønsket
dirname = "c: \ myFiles \"

MyPath = dirname & "* .xls"
MinFil = Dir (MyPath)
Hvis myfile> "" Then minFil = dirname & minFil

Gjør Mens myfile <> ""
Hvis Len (minFil) = 0 Then Exit Do

Workbooks.Open minFil

Med Active
For hver wks I .Worksheets
'Angi endringen å gjøre
wks.Range ("A1"). value = "A1 Changed"
Neste
Avslutt med

ActiveWorkbook.Close Savechanges: = sant

MinFil = Dir
Hvis myfile> "" Then minFil = dirname & minFil
Loop
End Sub

Denne makroen bruker uansett katalogen du angir under dirname variabel. Enhver arbeidsbok fil (slutter med XLS forlengelse) er lastet og behandlet.

En annen tilnærming er å ha be makro brukeren hvilke katalog skal behandles. Du ca bruke standard Excel fil dialog boksen for å gjøre dette, på den måte som vist i følgende makro.

Public Sub ChangeFiles3 ()
Dim MyPath As String
Dim minFil As String
Dim dirname As String

Med Application.FileDialog (msoFileDialogFolderPicker)
'Valgfritt: satt mappe for å starte i
.InitialFileName = "C: \ Excel \"
.Title = "Velg mappen for å behandle"
Hvis .Show = sant Deretter
dirname = .SelectedItems (1)
End If
Avslutt med

MyPath = dirname & "\ *. Xls"
minFil = Dir (MyPath)
Hvis myfile> "" Then minFil = dirname & minFil

Gjør Mens myfile <> ""
Hvis Len (minFil) = 0 Then Exit Do

Workbooks.Open minFil

Med Active
For hver wks I .Worksheets
'Angi endringen å gjøre
wks.Range ("A1"). value = "A1 Changed"
Neste
Avslutt med

ActiveWorkbook.Close Savechanges: = sant

MinFil = Dir
Hvis myfile> "" Then minFil = dirname & minFil
Loop
End Sub

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (3176) gjelder for Microsoft Excel 97, 2000, 2002, og 2003. Du kan finne en versjon av dette tipset for Båndet av Excel (Excel 2007 og senere) her: Gjøre endringer i en gruppe av arbeidsbøker.