Kombinere regneark fra mange arbeidsbøker

March 9  by Eliza

David har flere arbeidsbøker som har flere regneark i hver av dem. Han ønsker å kombinere en viss regneark (bare ett) ut av hver av disse arbeidsbøker inn i en ny arbeidsbok. Han vet hvordan han skal gjøre dette manuelt ved hjelp Flytt eller Kopier Sheet, men han ønsker en måte å gjøre det mer automatisk, spesielt siden det kan være mange arbeidsbøker som han trenger å "kombinere" på denne måten.

Det finnes en rekke ulike måter å nærme seg dette problem, og alle disse involverer bruken av makroene. (Dette bør ikke være noen overraskelse-makroer er designet for å gjøre kort prosess med kjedelige manuelle oppgaver.)

Følgende makro er enkel i design; den går gjennom alle de som er åpne arbeidsbøker og for hver arbeidsbok (bortsett fra arbeidsboken som inneholder makroen) kopiere arket heter "Ark1" fra at arbeidsbok til arbeidsboken som inneholder koden.

Sub CopySheets1 ()
Dim WKB Som arbeidsbok
Dim sWksName As String

sWksName = "Ark1"
For Hver WKB I arbeidsbøker
Hvis wkb.Name <> ThisWorkbook.Name Deretter
wkb.Worksheets (sWksName) .Copy _
Før: = ThisWorkbook.Sheets (1)
End If
Neste
Satt WKB = Nothing
End Sub

Hvis du vil at makroen til å ta et annet regneark enn Ark1, bare endre verdien av sWksName variabel å reflektere regnearket navn ønsket. Hvis du ikke vet hva navnet på regnearket vil bli, men du vet regnearket til å kopiere vil alltid være den andre regneark i hver arbeidsbok, så kan du bruke denne varianten på makro:

Sub CopySheets2 ()
Dim WKB Som arbeidsbok
Dim sWksName As String

For Hver WKB I arbeidsbøker
Hvis wkb.Name <> ThisWorkbook.Name Deretter
wkb.Worksheets (2) .Copy _
Før: = ThisWorkbook.Sheets (1)
End If
Neste
Satt WKB = Nothing
End Sub

Kanskje den største ulempen til tilnærminger så langt er at alle arbeidsbøker må være åpne. Dette kan ikke alltid være mulig. For eksempel kan du ha hundre forskjellige arbeidsbøker i en mappe, og du må kombinere et regneark ut av hver av dem. Åpning hundre arbeidsbøker, mens teknisk mulig, er sannsynligvis ikke praktisk for folk flest. I så fall må du ta en annen tilnærming.

Følgende makro, CombineSheets, er interaktiv i naturen. Den ber deg for flere opplysninger, og deretter legger regneark til arbeidsboken basert på dine svar. Det først ber om en bane til regnearkene (inkluderer ikke skråstrek) og deretter etter et mønster å bruke for arbeidsbøkene. Du kan spesifisere en arbeidsbok mønster med vanlig stjerne (*) og spørsmålstegn (?) Jokertegn. For eksempel vil et mønster av * matche alle arbeidsbøker, mens et mønster av Budget20 ?? vil returnere bare arbeidsbøker som har "Budget20" i begynnelsen og eventuelle to tegn etter det.

Sub CombineSheets ()
Dim Späth As String
Dim sFname As String
Dim WBK Som arbeidsbok
Dim wSht Som Variant

Application.EnableEvents = False
Application.ScreenUpdating = False
Späth = InputBox ("Skriv en fullstendig bane til arbeidsbøker")
CHDIR Späth
sFname = InputBox ("Skriv inn et filnavn mønster")
sFname = Dir (Späth & "\" & sFname & ".xl *", vbNormal)
wSht = InputBox ("Skriv inn et regneark navn for å kopiere")
Gjør Inntil sFname = ""
Satt WBK = Workbooks.Open (sFname)
Windows (sFname) .Activate
Ark (wSht) .Copy Før: = ThisWorkbook.Sheets (1)
wBk.Close False
sFname = Dir ()
Loop
ActiveWorkbook.Save
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Når du kjører makroen du er også bedt om navnet på et regneark til å kopiere fra hver matchende arbeidsbok. Gi et navn, og hvis et slikt regneark eksisterer i arbeidsboken den er kopiert til begynnelsen av gjeldende arbeidsbok.

Hvis du foretrekker ikke å lage din egen makro for å kombinere regneark, kan du vurdere den RDBMerge-tillegget skapt av Excel MVP Ron de Bruin. Du kan finne det gratis, her:

http://www.rondebruin.nl/win/addins/rdbmerge.htm

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (7425) gjelder for Microsoft Excel 97, 2000, 2002, og 2003.