12. april 2012 - 16:34Der er
11 kommentarer og 1 løsning
Datatabel linket til mange forskellige filer
Hej Eksperter
Jeg bruger excel 2007 engelsk version.
Jeg har 57 filer der bygger på den samme template men som indeholder oplysninger med salgstal fra forskellige sælgere. Jeg vil gerne have lavet en ny fil, som trækker data fra de 57 filer og opstiller dataene i en datatabel til senere brug i en pivottabel. Lad os sige at hver fil hedder SALG og et nummer, men ikke alle numre er anvendt, så filerne ligger altså i intervallet fra "SALG01" til "SALG69". Området jeg skal trække data fra i hver af de 57 filer er området A1:P50.
Jeg kan selvfølgelig skrive formlerne manuelt for hvert enkelt fil, altså "='[SALG01.xlsx]Sheet1'!A1" osv. og så hver gang jeg kommer til P50 starte forfra med "='[SALG02.xlsx]Sheet1'!A1" osv. osv. MEN jeg kunne godt tænke mig at vide om man kunne løse det på en eller anden anden måde. Og måske endda en løsning hvor jeg kan tage højde for at der kommer flere filer (fx. op til SALG75).
Jeg tænke på om man kan skrive formlerne ved at "linke" til en liste med alle filnavnene. Eller om der er nogen der har en VBA der ville kunne bruges til det. Jeg søger en løsning hvor man nemt vil kunne rette både antal/navnene på filerne (SALG01 til SALG69) og området i filere (A1:P50).
Ja de ligger i samme mappe. MEN de gemt på en sharepoint site, så jeg ved ikke om det betyder noget. Men på sharepoint sited kan jeg placere dem i den samme mappe hvis det hjælper på det.
Vil man kunne løse det med filnavne der ikke er fortløbende numre med VBA'en? Og evt. også at det område man skal linke til er flere ikke sammenhængende områder, fx A1:P20 og A25:P30 og A49:P50.
Hvordan vil sådan en VBA fungere når der linkes til andre filer, vil den skulle åbne de andre filer for at det virker, eller køre det bare i baggrunden uden at noget åbnes?
Filnavne: Intet problem når der anvendes udtryk, der behandler alle filer i en mappe. Herved er det heller ikke et problem når der kommer flere kildefiler
Områder: Jeg forestiller mig at kopiere de nævnte områder over i destiantionsfilen og så "stakke" dem - eller?
VBA: vil således hente data fra de enkelte filer - ved at åbne og lukke den enkelte fil som et object, der ikke nødvendigvis er synligt.
Områder: hvis du med stakke mener at område A1:P20 og A25:P30 og A49:P50 kopieres ind i "konsolideringsfilen" så det bliver til område A1:P28 så er vi enige :-)
VBA: jeg kan ikke gennemskue hvad det du skriver betyder. Jeg skal bare være sikker på at det kan lade sig gøre selvom at filerne er gemt på et sharepoint site som er styret med check out/check in funktion.
Hvis vi er enige om ovenstående, så vil jeg meget gerne tage imod tilbuddet om en VBA kode :-)
Rem Version 1 17-04-2012 Rem ==================== Dim ræk As Long Rem Destination Const destinationsArk = "CC cost,HC,Hours per product" Const omrDef = "Cost,E2,L1,C7:AB31,C37:AB37;HC,D2,I1,C61:Y64,C69:AB73,C101:AB102;HC,D2,I1,C12:Y31" Const omrSletKol = "V-W-AB,S-T-Y,S-T-Y" Dim dArk As Variant, områdeDef As Variant, områdeSlet As Variant Const destBasisRæk = 2 Dim destRæk(3)
Rem Source Rem Const mappeMedSalgsFiler = "C:\Users\peter\Desktop\LineRiber_120412\SalgsMappe" 'Supertekst Const mappeMedSalgsFiler = "G:\SCM\MF11 Controlling\Budget FY13\Budget models for Cost and HC\Supertekst1" 'Siemens <<<<<<<<<<<<<< HUSK >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Dim omrN As Variant, omr As Variant Dim arkSamling As Worksheet Dim rSam As Range Dim xlsFil As Object Dim arkSalg As Worksheet Dim rSalg As Range
Rem Overskrifter Const overskrifterArkNavn = "Overskrifter" Dim arkHeader As Worksheet Public Sub samlingAfFiler() Housekeeping indsætOverskrifter traverserFiler mappeMedSalgsFiler udførFinish 'sletkolonner og fjern formatering pr. ark
MsgBox "Samling af filer afsluttet" End Sub Private Sub Housekeeping() Set samFil = ActiveWorkbook
Rem 1. række i Destination pr. ark destRæk(0) = destBasisRæk destRæk(1) = destBasisRæk destRæk(2) = destBasisRæk End Sub Private Sub traverserFiler(mappesti) Dim fs, f, f1, fc, fNavn As String Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder(mappesti) Set fc = f.Files For Each f1 In fc fNavn = f1.Name hentDataFraFilen mappesti, fNavn Next End Sub Private Sub hentDataFraFilen(mappesti, filNavn) Dim sourceArk As String, destArk As String, ræk As Long Dim dupAdr1 As String, dupAdr22 As String, dupData1 As String, dupData2 As String On Error GoTo fejl
Application.ScreenUpdating = False
Rem Åbn salgsfilen Set xlsFil = CreateObject("Excel.Application") With xlsFil .Workbooks.Open mappesti & "\" & filNavn
Rem Ved test - kunne se sourcefil Rem .Visible = True
Rem kopier de enkelte ark fra source til destiantionsfil For a = 0 To UBound(dArk) arkNavn = dArk(a) område = områdeDef(a) hentFraArk = Split(område, ",") sourceArk = hentFraArk(0)
Rem startrække i destinationsark ræk = destRæk(a)
Set arkSamling = ActiveWorkbook.Sheets(arkNavn) arkSamling.Activate
omr = Split(område, ",") sourceArk = omr(0)
Set arkSalg = xlsFil.ActiveWorkbook.Sheets(sourceArk)
Rem dupliceringsfelter til kolonne 1 & 2 dupAdr1 = omr(1) dupAdr2 = omr(2)
Rem indsæt i samlefil Selection.PasteSpecial Paste:=xlPasteValues
Set rSalg = Nothing Set rsamling = Nothing ræk = ræk + rr
xlsFil.Application.CutCopyMode = False Next r Rem Indsæt dup-felter i kolonne A & B indsætDupFelter destRæk(a), ræk - 1, 1, dupData1 indsætDupFelter destRæk(a), ræk - 1, 2, dupData2
Rem Opdater destinationsrække for arket destRæk(a) = ræk Next a .Quit End With
Set xlsFil = Nothing Exit Sub
fejl: On Error Resume Next xlsFil.Quit Set xlsFil = Nothing
MsgBox "Fejl erkendt"
Rem Tester udgang Stop Resume Next End Sub Private Sub indsætDupFelter(fraRæk, tilRæk, kolonne, data) Dim ræk As Long For ræk = fraRæk To tilRæk ActiveSheet.Cells(ræk, kolonne).Select Selection.Value = data Next ræk End Sub Private Sub udførFinish() Dim a As Integer For a = 0 To UBound(dArk) ActiveWorkbook.Sheets(dArk(a)).Activate sletkolonner områdeSlet(a) fjernFormatering
Application.CutCopyMode = False Columns.AutoFit Next a End Sub Private Sub indsætOverskrifter() Dim a As Integer, antalKolonner As Long, kol As String, adrVar As Variant, ræk As String Set arkHeader = ActiveWorkbook.Sheets(overskrifterArkNavn) arkHeader.Activate antalKolonner = ActiveCell.SpecialCells(xlLastCell).Column Cells(1, antalKolonner).Select adrVar = Split(Selection.Address, "$") kol = adrVar(1)
For a = 0 To UBound(dArk) ræk = CStr(a + 1) arkHeader.Activate ActiveSheet.Range("A" & ræk & ":" & kol & ræk).Copy
Set arkSamling = ActiveWorkbook.Sheets(dArk(a)) arkSamling.Activate arkSamling.Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll Next Application.CutCopyMode = False End Sub Private Sub sletkolonner(sletkol) Dim kolonne As String, k As Integer, omrSlet As Variant omrSlet = Split(sletkol, "-")
For k = UBound(omrSlet) To 0 Step -1 ActiveSheet.Columns(omrSlet(k)).Delete Next k End Sub Private Sub fjernFormatering() With ActiveSheet .Cells.Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With End With End Sub
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.