Avatar billede treypocca Nybegynder
09. oktober 2005 - 22:33 Der er 14 kommentarer og
1 løsning

Central registrering af talværdier fra separate Excel tabeller

Hej,

Jeg har udarbejdet et word dokument, hvor alle oplysniner på ønskede katagori står i tabeller. Så hver katagori har sin egen side.

I hver disse tabeller har jeg indsat et lille regneark, hvor der er noget økonomistyring for hver katagori. Dvs. at der ligger et separat regneark på hver side for hver katagori.

Nu til mit spørgsmål, om det vil være muligt at hente oplysninger fra hver af disse separate regneark på hver side op i et central indsat regneark på side 1 f.eks. Så jeg får mere overblik?

Ved godt alt dette nemt kan laves, hvis jeg kun brugte excel, men bryder mig ikke om opstillingen af mine tabeller deri eg. det giver manglende overblik.

På forhånd mange tak:-)
Avatar billede rvm Nybegynder
10. oktober 2005 - 08:01 #1
Det kan du desværre ikke, da de indlejrede regneark skal betragtes som billeder, når de ikke er åbne - dvs ingen kædning imellem indlejrede regneark.

Den rigtige løsning er at lave et almindeligt Excel regnark, med et ark pr. indlejret regnark (altså som de ser ud i dag) + et opsummeringsark. Indsæt derefter arkene som kæder, der hvor du tidligere har indsat de indlejrede ark. Nu er der fuld integratiom mellem regnearkene og opsummeringsarket.
Avatar billede supertekst Ekspert
14. oktober 2005 - 08:18 #2
Har eksperimenteret med problemet og jeg kan via VBA-kode i Word få fat i data fra de enkelte indsatte regneark på de respektive sider.

Så er der stadig behov for en løsning - så giv venligst signal.
Avatar billede treypocca Nybegynder
15. oktober 2005 - 19:16 #3
Ja, det er der:-) Så hvis du via VBA-kode kan få det til at virke, så er det sku sejt!
Avatar billede supertekst Ekspert
16. oktober 2005 - 20:25 #4
Sub startProgram()
Dim xl As Object, obj As Object
    Set xl = CreateObject("Excel.application")
   
    antalXls = ActiveDocument.InlineShapes.Count
   
    Set xl = ActiveDocument.InlineShapes(2).OLEFormat
    xl.Activate            'ikke nødvendig - xls åbnes så ikke - men værdier kan hentes
   
    With xl
        Set obj = .Object
    End With
   
    With obj
        x = .Sheets.Count
        y = .Sheets(1).Name
        z = .Sheets(1).Cells(1, 1).Value
    End With
   
Rem indsæt i SamleArk
    Set xl = ActiveDocument.InlineShapes(1).OLEFormat
    xl.Activate            'ikke nødvendig - xls åbnes så ikke - men værdier kan hentes
   
    With xl
        Set obj = .Object
    End With
   
    With obj
        .Sheets(1).Cells(1, 4).Value = z
    End With
End Sub
Avatar billede treypocca Nybegynder
16. oktober 2005 - 22:00 #5
Hej Supertekst,

Kan du give mig en step-by-step guide til, hvordan jeg bruger VBA koden? Jeg er ingen haj til det, så har ingen anelse om, hvor- og hvordan det appliceres til dokumentet:-)
Avatar billede treypocca Nybegynder
16. oktober 2005 - 22:33 #6
Har smidt koden ind i en macro og kørt Start program....hvorefter den går ind i et af regnearkne.

Jeg kan ikke lige se, hvordan værdien fra A1 cellen fra hver af de indsatte regneark på hver side bliver summeret sammen på side et?
Avatar billede supertekst Ekspert
17. oktober 2005 - 10:21 #7
Programmet udfører p.t. kun følgende:

Tager cellen i A1 i 2.ark og indsætter værdien i D1 på 1. ark - altså kun en demo af, at det kan lade sig gøre.

Jeg korrigerer programmet til det, du ønsker!
Avatar billede rvm Nybegynder
17. oktober 2005 - 10:26 #8
Hvis du gør som jeg foreslog skal du slet ikke programmere... :-)
Avatar billede supertekst Ekspert
17. oktober 2005 - 11:17 #9
Koden er indsat i ThisDocument i Word-dokumentet. I dette er der afsat et antal sider med indsatte regnearks-objekter, hvor værdien i celle A1 er indsat (1, 10,100,1000). På første side er der insat et tomt XLS-object. Summen på 1111 indsættes efter kørsel i A1 i objektet på side 1. Nye ark kan indsættes når/hvor som helst - og programmet kan igen afvikles uden videre.

Evt. kan der indsættes en knap i en værktøjslinje, der aktivere makroen.
VBA-kode:
=========
Sub startProgram()
Dim xl As Object, obj As Object, antalXLS, total, f As Integer
   
    Set xl = CreateObject("Excel.application")
    antalXLS = ActiveDocument.InlineShapes.Count
    total = 0
   
Rem Første ark er sammentællingsarket
    If antalXLS > 1 Then
        For f = 2 To antalXLS
            Set xl = ActiveDocument.InlineShapes(f).OLEFormat
            xl.Activate
           
            With xl
                Set obj = .Object
            End With

            With obj
Rem optæller celle A1 i total
                total = total + .Sheets(1).Cells(1, 1).Value
            End With
        Next f
   
Rem indsæt total i sammentællings-arket
        Set xl = ActiveDocument.InlineShapes(1).OLEFormat
        xl.Activate
       
        With xl
            Set obj = .Object
        End With
       
        With obj
            .Sheets(1).Cells(1, 1).Value = total
        End With
    End If
End Sub
Avatar billede treypocca Nybegynder
18. oktober 2005 - 18:48 #10
Hej SuperTekst,

Det virker det sku! Nu skal jeg have bare celle A2 og A3 med i programmet. Men er det ikke bare lidt copy&paste arbejde?
Avatar billede supertekst Ekspert
19. oktober 2005 - 08:32 #11
Modificerer programmet og sender det til dig
Avatar billede supertekst Ekspert
19. oktober 2005 - 08:53 #12
Sub startProgram()
Dim xl As Object, obj As Object, antalXLS, f As Integer
Dim totA1 As Integer, totA2 As Integer, totA3 As Integer
   
    Set xl = CreateObject("Excel.application")
    antalXLS = ActiveDocument.InlineShapes.Count
    totA1 = 0
    totA2 = 0
    totA3 = 0
   
Rem Første ark er sammentællingsarket
    If antalXLS > 1 Then
        For f = 2 To antalXLS
            Set xl = ActiveDocument.InlineShapes(f).OLEFormat
            xl.Activate
           
            With xl
                Set obj = .Object
            End With

            With obj
Rem optæller cellerne A1-A3 i totaler
                totA1 = totA1 + .Sheets(1).Cells(1, 1).Value
                totA2 = totA2 + .Sheets(1).Cells(2, 1).Value
                totA3 = totA3 + .Sheets(1).Cells(3, 1).Value
            End With
        Next f
   
Rem indsæt total i sammentællings-arket
        Set xl = ActiveDocument.InlineShapes(1).OLEFormat
        xl.Activate
       
        With xl
            Set obj = .Object
        End With
       
        With obj
            .Sheets(1).Cells(1, 1).Value = totA1
            .Sheets(1).Cells(2, 1).Value = totA2
            .Sheets(1).Cells(3, 1).Value = totA3
        End With
    End If
End Sub
Avatar billede treypocca Nybegynder
19. oktober 2005 - 09:14 #13
Hej igen,

Den er der næsten - jeg får et Run-time Error '6' "Overflow" på denne linje:

totA3 = totA3 + .Sheets(1).Cells(3, 1).Value
Avatar billede supertekst Ekspert
19. oktober 2005 - 09:50 #14
Hej - årsagen er at jeg definerede de tre totaler som Integer, som har en max på lidt over 65.000.

Hvis du retter linien (3. linie i koden):
Dim totA1 As Integer, totA2 As Integer, totA3 As Integer
til:
Dim totA1, totA2, totA3
- så skulle problemet være løst - har prøvet!
Avatar billede treypocca Nybegynder
19. oktober 2005 - 10:13 #15
Så virker det!!!
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
Tag et kursus i Word og øg effektiviteten

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