Avatar billede tvc Seniormester
07. februar 2006 - 20:10 Der 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
       
    End If
Next

End Function


Med venlig hilsen

TVC
07. februar 2006 - 20:49 #1
har du begge filer åben samtidig?
Avatar billede tvc Seniormester
07. februar 2006 - 20:58 #2
Nej det har jeg ikke.
07. februar 2006 - 21:03 #3
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.
Avatar billede supertekst Ekspert
08. februar 2006 - 09:20 #4
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.

MVH
pb@supertekst-it.dk
Avatar billede tvc Seniormester
08. februar 2006 - 09:44 #5
Hej supertekst

Jeg har sendt filerne til dig. Håber du kan hjælpe med en løsning.

TVC
08. februar 2006 - 09:49 #6
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.

Mvh fvd@smartoffice.dk
08. februar 2006 - 10:51 #7
det kan måske godt lade sig gøre vha. Application.ExecuteExcel4Macro
Jeg forventer ikke at bidrage mere lige nu.
Avatar billede supertekst Ekspert
08. februar 2006 - 11:42 #8
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
Avatar billede tvc Seniormester
08. februar 2006 - 13:23 #9
Supertekst det virker!!!

Nu skal jeg bare i aften lige have sat det ind i mine rigtige filer og så skal det nok gå galt :-)

Tak for hjælpen - det kan være der lige kommer et enkelt spørgsmål eller to i aften, men indtil nu mange tak for hjælpen.

TVC
Avatar billede tvc Seniormester
08. februar 2006 - 13:43 #10
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.

TVC
Avatar billede supertekst Ekspert
08. februar 2006 - 14:05 #11
Ok og tak for points!

Flere points er ikke nødvendig :-)

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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester