07. februar 2006 - 20:10Der er
10 kommentarer og 1 løsning
VBA sumfunktion mellem to Excelmapper
Hej
Jeg har to Excelmapper: Regnskab.xls Budget.xls
I Regnskab.xls har jeg et DataArk hvor jeg har navngivet en celle Months. I denne celle skriver jeg den måned vi er nået til i regnskabet (eksempelvis 1. kvartal et 3-tal for marts).
I Regnskab.xls findes der desuden 10 afdelingsark Afdeling 1, Afdeling 2, o.s.v.
I Budget.xls findes der ligeledes 10 afdelingsark Afdeling 1, Afdeling 2, o.s.v.
Hvert afdelingsark i Budget.xls indeholder månedsbudget (Jan - Dec) for afdelingen - Kolonne B (januar) til M (december).
Tekst Jan Feb Mar Apr Maj Jun Jul Aug Sep ... Forbrug 10 10 10 10 10 10 10 10 10 ...
I Regnskab.xls ønsker jeg at kunne indsætte min egen funktion =Budget.
Det er min tanke at man i Regnskab.xls i en celle skal kunne skrive =Budget( og så markere budgetlinjen i Budget.xls fra B til M, hvorefter funktionen vil summere tallene fra Januar til og med den måned jeg har angivet ved et tal fra 1 til 12 i DataArk celle Months.
Jeg har forsøgt mig med nedenstående funktion men den virker ikke, er der en der kan hjælpen mig?
Function Budget(BudgetLine As Range) As Double
Dim Month As String Dim BudgetSum As String
Month = Range("Months").Value
For Each c In BudgetLine If IsNumeric(c) Then BudgetSum = BudgetSum + c.Value
If c = Month Then Budget = BudgetSum End Function End
Din funktion har ikke fat i Budget.xls, men blot et tilfældigt Range (BudgetLine), og funktionen vil derfor ikke kunne regne på noget budget.
Jeg er faktisk ikke sikker på, at du kan regne på en fil, som er lukket. Hvis du i din budgetfil har lavet beregningerne, så vil du kunne hente dem, men via en funktion placeret i Regnskab.xls - det tror jeg ikke.
Spændende om andre skulle byde ind med en løsning.
Det skulle nok kunne lade sig gøre. Det er muligt via VBA at åbne en fil som objekt og at arbejde med den. Har konstrueret flere kundeløsninger med lignende problematik.
Hvis du kunne udarbejde en model - eller sende kopi af filerne - så vil jeg gerne forsøge.
supertekst - ja, selvfølgelig kan man åbne filen, men hvis du skal gøre det i en funktion, så får du åbnet budget.xls hver eneste gang indholdet i en tilfældig celle bliver ændret (=excel beregner), hvilket vil gå væsentligt ud over proformance.
Det vil kunne virke, hvis budget tallene bliver opdateret hvergang TVC f.eks. trykker på en knap, som så åbner budget.xls og opdaterer forskellige felter.
Nedenstående kode er indsat i Regnskab/DataArk: (TestFilerne sendes direkte til TVC)
Dim filSti Dim måned, bFil As Object, budget Const budgetFilNavn = "budget.xls" Private Sub hentfilSti() filSti = ActiveWorkbook.Path If Right(filSti, 1) <> "\" Then filSti = filSti + "\" 'tilføjer evt. \ End If End Sub Sub worksheet_change(ByVal target As Excel.Range) 'aflæser måned ved ændring If Not Intersect(target, Range("B1")) Is Nothing Then hentfilSti måned = Cells(1, 2)
If IsNumeric(måned) = True And måned > 0 Then åbnBudget Else MsgBox ("Valgte måned ikke korrekt!") Cells(1, 2).Activate End If End If End Sub Private Sub åbnBudget() Dim ark, arknavn, antalrækker, række, kolonne, budgetSum Set bFil = CreateObject("Excel.application") With bFil .Visible = True .Workbooks.Open (filSti + budgetFilNavn)
Rem behandling af hvert ark i budget For Each ark In .ActiveWorkbook.Sheets arknavn = ark.Name .ActiveWorkbook.Sheets(arknavn).Activate antalrækker = .ActiveCell.SpecialCells(xlLastCell).Row For række = 2 To antalrækker budgetSum = 0 For kolonne = 2 To måned + 1 budgetSum = budgetSum + .Cells(række, kolonne) Next kolonne Rem indsæt rækketotal i regnskab i kolonne 15 (årsbudget) ActiveWorkbook.Sheets(arknavn).Cells(række, 15) = budgetSum Next række Next End With bFil.Quit Set bFil = Nothing End Sub
Jeg har faktisk et problem som jeg ikke har taget højde for i mit spørgsmål og i de filer jeg har sendt til dig supertekst.
Der er forskel på hvilken række beløbene står på i Regnskabet og i Budgettet ;-(
Regnskab Budget 15 8 16 9 17 10 21 24 22 34 23 46
Ovenfor har jeg angivet hvilken række tallene står i i henholdsvis Regnskab og Budget. Er det muligt at bygge det ind i det program du har lavet eksempelvis ved at styre det i Data arket?
Du må lige sige til hvis du vil have flere points for det så skal du nok få det.
Jeg har taget din sidste bemærkning til efterretning - det skal jeg nok få lagt ind. Er der kun de få rækker?
Men det ville være en god ide, at indbygge rækkenr som værdier i DataArket - så kan du nemlig løbende justere disse, hvis der bliver behov.
Jeg vil så bede om en ny model med den korrekte struktur - så skal jeg nok tage hånd om dette.
MVH
Synes godt om
Ny brugerNybegynder
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.