Avatar billede it-dyret Nybegynder
16. januar 2002 - 11:56 Der er 15 kommentarer og
1 løsning

Opdatere pivot fra 1 workbook med dynamisk område i en anden workbook

Jeg har lavet 2 workbooks i Excel 7.0: den ene er en indtastningsdel med et defineret dynamisk område ved navn rapport. Dette er lavet vha. formlen

=FORSKYDNING(\'Indtastning\'!$A$4:$C$4;0;0;TÆLV(\'Indtastning\'!$A:$A))

Den anden er en rapportdel med pivottabeller, som er sat til dette område (lad os kalde det Data).

Jeg har erfaret, at det ikke umiddelbart virker, når jeg fra en makro beder pivottabellen, om at opdatere. Den kommer nemlig med en fejl, da den ikke kan finde området. Er løsningen, at man skriver området i pivottabellen på en anden måde end blot \"Data\", eller skal man rode sig ud i noget vba-kode, som tjekker om den anden workbook er åben, og åbner den, hvis det ikke er tilfældet?

Detaljeret forklaring (med syntaks/kode) udbedes til den rigtige løsning
Avatar billede bak Forsker
16. januar 2002 - 12:35 #1
=Indtastning!$A$4:Forskydning(Indtastning!$A$4;Tælv(Indtastning!$A$4:$A$65536)-1;2)

Prøv lige at ændre dit dynamiske område til.
Her virker det
Avatar billede it-dyret Nybegynder
16. januar 2002 - 12:47 #2
Det virker kun, når jeg har begge workbooks åbne. Hvis jeg kun har rapportdelen åben, får jeg en runtime error, hvor den siger, at referencen er ugyldig, og peger på følgende linie:

    ActiveSheet.PivotTables(\"Pivottabel1\").RefreshTable

Området i pivottabellen er sat til:
indtastning.xls!Data

Hvis jeg gør opdaterer manuelt, siger den, at den også, at referencen er ugyldig, og derefter at den ikke kan åbne kildefilen \'indtastning.xls\' til pivottabellen.

Ved du, hvad der går galt?
Avatar billede it-dyret Nybegynder
16. januar 2002 - 12:49 #3
Øhh, næstesidste afsnit blev noget ævl... Der skulle have stået:

\"Hvis jeg opdaterer manuelt, siger den også, at referencen er ugyldig, og derefter at den ikke kan åbne kildefilen \'indtastning.xls\' til pivottabellen.\"
Avatar billede bak Forsker
16. januar 2002 - 13:16 #4
Det må du nok se i øjnene, at det er umuligt.
Navnet bliver jo først beregnet når arket er åbnet.
Man kan hente data fra et lukket ark, men man kan ikke få den gennemregnet.
Avatar billede it-dyret Nybegynder
16. januar 2002 - 14:08 #5
Hmm, ja det udelukker jo den ene mulighed, men hvad med en gang kode, som checker, om det andet ark (indtastning) er åben, og hvis ikke, så åbner det?

Jeg har været ved at rode med det, men har ikke kunnet få lure, hvordan testen skal laves...
Avatar billede bak Forsker
16. januar 2002 - 17:52 #6
Jeg gad ikke rode med det så jeg har kopieret et par funktion fra developer.
makroen kører når arket åbner
I linie 2 skal du skrive et sti og navn på kildedata

Sub auto_open()
tester = OpenBook(\"c:\\funktioner.xls\")
End Sub
Function OpenBook(strFilePath As String) As Boolean
    Dim wkbCurrent  As Excel.Workbook
    Dim strBookName As String
    On Error GoTo OpenBook_Err
    strBookName = NameFromPath(strFilePath)
    If Len(strBookName) = 0 Then Exit Function
    If Workbooks.Count > 0 Then
        For Each wkbCurrent In Workbooks
            If UCase$(wkbCurrent.Name) = UCase$(strBookName) Then
                wkbCurrent.Activate
                Exit Function
            End If
        Next wkbCurrent
    End If
    Workbooks.Open strFilePath
    OpenBook = True
OpenBook_End:
    Exit Function
OpenBook_Err:
    OpenBook = False
    Resume OpenBook_End
End Function
Function NameFromPath(strPath As String) As String
    Dim lngPos          As Long
    Dim strPart        As String
    Dim blnIncludesFile As Boolean
    lngPos = InStrRev(strPath, \"\\\")
    blnIncludesFile = InStrRev(strPath, \".\") > lngPos
    strPart = \"\"
    If lngPos > 0 Then
        If blnIncludesFile Then
            strPart = Right$(strPath, Len(strPath) - lngPos)
        End If
    End If
    NameFromPath = strPart
End Function


Avatar billede bak Forsker
16. januar 2002 - 17:53 #7
ps bare kopier det hele ind i et modul.
Den checken om arket er åbnet, hvis ikke åbnes det.
Avatar billede bak Forsker
18. januar 2002 - 09:52 #8
Sorry IT-dyr, måske er svaret ikke helt klar.
lige ovenover din egen linie:
ActiveSheet.PivotTables(\"Pivottabel1\").RefreshTable

skriver du

Test=OpenBook(\"c:\\funktioner.xls\")\'ellr dit eget filnavn

derefter kopierer du de 2 funktioner ind:
(Taget fra MSoffice Developer pakken)

Function OpenBook(strFilePath As String) As Boolean
    Dim wkbCurrent  As Excel.Workbook
    Dim strBookName As String
    On Error GoTo OpenBook_Err
    strBookName = NameFromPath(strFilePath)
    If Len(strBookName) = 0 Then Exit Function
    If Workbooks.Count > 0 Then
        For Each wkbCurrent In Workbooks
            If UCase$(wkbCurrent.Name) = UCase$(strBookName) Then
                wkbCurrent.Activate
                Exit Function
            End If
        Next wkbCurrent
    End If
    Workbooks.Open strFilePath
    OpenBook = True
OpenBook_End:
    Exit Function
OpenBook_Err:
    OpenBook = False
    Resume OpenBook_End
End Function

Function NameFromPath(strPath As String) As String
    Dim lngPos          As Long
    Dim strPart        As String
    Dim blnIncludesFile As Boolean
    lngPos = InStrRev(strPath, \"\\\")
    blnIncludesFile = InStrRev(strPath, \".\") > lngPos
    strPart = \"\"
    If lngPos > 0 Then
        If blnIncludesFile Then
            strPart = Right$(strPath, Len(strPath) - lngPos)
        End If
    End If
    NameFromPath = strPart
End Function
Avatar billede it-dyret Nybegynder
18. januar 2002 - 10:15 #9
Ok, men det fremstod nu rimelig klart alligevel - jeg har bare ikke afsluttet spørgsmålet, da jeg ikke har haft tid til at gøre opgaven færdig endnu (der kom lige en hasteopgave ind omkring Lotus Notes).

Lever du af at lave Excelløsninger, eller hvor har du din viden fra?
Avatar billede it-dyret Nybegynder
18. januar 2002 - 10:38 #10
Jeg har lige været ved at teste koden, og der kommer en error ved variablen:

InStrRev

i funktionen NameFromPath. Mangler den at blive erklæret, eller er det et tilføjelsesprogram, som skal tilføjes?

Workbook\'en er stadig Excel 95/7.0
Avatar billede bak Forsker
18. januar 2002 - 10:57 #11
Den fungerer fint her, men jeg kører også xl2000. prøv evt. at tilføje analysis Toolpak (det eneste ekstra jeg bruger)
Et par spørgsmål:
hvorfor bruger du overhovedet dynamisk område.
hvorfor starter du først ved A4
Kan du evt undvære række 1, 2 og 3

grunden til at jeg spørger ar at det er muligt når man skal angive kildedata til pivottabellen bare at markere kolonnerne (A:C).
Så kan pivottabellen opdatres på normal vis uden at åbne mappen med kildedata og du kan bare blive ved at fylde i kildedata indtil række 65000.

Avatar billede it-dyret Nybegynder
18. januar 2002 - 11:28 #12
Hmmm, jeg har prøvet analysis Toolpak uden held :(

Koden, som jeg pastede ind i starten af mit spørgsmål, var blot fra et testark, jeg havde gang i. I det rigtige ark starter jeg ved rækken 1.

Grunden, til at jeg ikke blot sætter området til at være hele kolonner, er, at rapportdelen (den med pivottabeller) fylder meget mere på den måde. Det virker ulogisk, men det er min erfaring, at filer fylder betydeligt mere, hvis man sætter dem til at referere til hele kolonner end blot den del, som indeholder data.
Avatar billede it-dyret Nybegynder
18. januar 2002 - 11:29 #13
Du skulle vel ikke have en ide til, hvordan (hvis det overhovedet er muligt) det skulle kunne komme til at virke i version 95/7.0??
Avatar billede bak Forsker
18. januar 2002 - 12:10 #14
Prøv lige det her (homemade)
Test om Data er åben. Hvis ikke åbnes den.

Sub Macro1()
test = 0
datafileandpath = \"D:\\Personal\\Data.xls\"
strBookName = \"Data.xls\"
For Each wkbCurrent In Workbooks
            If UCase$(wkbCurrent.Name) = UCase$(strBookName) Then test = 1
Next wkbCurrent
If test = 0 Then Workbooks.Open Filename:=datafileandpath
Windows(\"Rapportdel.xls\").Activate
ActiveSheet.PivotTables(\"PivotTable1\").RefreshTable
End Sub
Avatar billede bak Forsker
18. januar 2002 - 12:30 #15
efter refreshtable kan du lukke datafilen igen med denne linie:

Workbooks(strBookName).Close SaveChanges:=False

Nej. jeg lever ikke af det. jeg er har lært lidt ved at prøve og fejle.
Avatar billede it-dyret Nybegynder
24. januar 2002 - 14:15 #16
Lige for at afslutte spørgsmålet helt, så virker det fuldstændig efter planen!

Mange tak, Bak! :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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