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
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:
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.
Ø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.\"
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.
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
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
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?
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.
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.
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
Lige for at afslutte spørgsmålet helt, så virker det fuldstændig efter planen!
Mange tak, Bak! :)
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.