Eksportuj tabelę przestawną i dane źródłowe do innego skoroszytu
Muszę wyeksportować tabelę przestawną i jej surowe dane do innego skoroszytu programu Excel. Napisałem tę funkcję, aby to zrobić:
Public Function SaveASSheets (sheetsArray As Variant, destination As String)
Sheets(sheetsArray).Copy
ActiveWorkbook.SaveAs destination, 50
ActiveWorkbook.Close
End Function
SheetArray to tablica zawierająca arkusze danych źródłowych tabeli przestawnej i tabeli przestawnej
miejsce docelowe to pełna ścieżka, w której chcę nowy plik Excela (ścieżka + dobra nazwa + rozszerzenie (.xlsb))
Problem, na który napotykam podczas wykonywania tego kodu, polega na tym, że nowa tabela przestawna zapisana w nowym pliku w folderze docelowym wskazuje na stare oryginalne dane tabeli przestawnej zamiast używać oryginalnej karty danych, którą skopiowałem razem z nim.
Zakres źródła danych w menedżerze nazw, którego używam dla starej tabeli przestawnej, istnieje w obu plikach (nowym i starym), ale tabela przestawna w nowym pliku wskazuje na zakres źródła danych w starym pliku.
Próbowałem ponownie przypisać nowe źródło danych tabeli przestawnej, ale otrzymałem błąd:
„Program Excel nie może ukończyć tego zadania z dostępnymi zasobami, wybraną mniejszą ilością danych lub zamknął inne aplikacje”.
To jest mój kod:
Public Function SaveASSheets(sheetsArray As Variant, destination As String, Optional pivotTableRange As Range)
Sheets(sheetsArray).Copy
ActiveWorkbook.SaveAs destination, 50
For Each Sheet In ActiveWorkbook.Worksheets
For Each Pivot In Sheet.PivotTables
If Not pivotTableRange Is Nothing Then
Pivot.SourceData = pivotTableRange
End If
Pivot.RefreshTable
Pivot.Update
Next
Next
ActiveWorkbook.Close
End Function
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
3 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Obie procedury tworzą nowy skoroszyt przy użyciu grupy arkuszy skopiowanych z aktywnego skoroszytu.
Obiekty w skopiowanych arkuszach zachowują wszystkie swoje oryginalne właściwości, w tym , więc skopiowane nadal wskazują „źródłowy skoroszyt”.
W drugiej procedurze próbujesz ustawić na „Zakres wejściowy” otrzymany przez procedurę. Nie udaje się, ponieważ aplikacja próbuje utworzyć w „Nowym skoroszycie” wskazujący na „Source Workbook”. Jednak nawet jeśli ta operacja się powiedzie, nie osiągnie celu, ponieważ „Zakres wejściowy” nadal odnosi się do „Źródłowego skoroszytu”. Zwróć również uwagę, że procedura zamyka skoroszyt bez zapisywania go, więc jeśli cel zostanie osiągnięty, zostanie on utracony.
Zasugeruj również, aby zawsze deklarować zmienne, które mają ten ciąg we wszystkich modułach, aby pomóc Ci w tej dobrej praktyce.
Może być częścią standardowych ustawień VBA. Z menu aplikacji Excel VBA wybierz: w zakładce okna dialogowego: edytor zaznacz opcję „Wymagaj deklaracji zmiennej”
https://i.stack.imgur.com/EiiN6.pngTo rozwiązanie oferuje dwie metody osiągnięcia
:
cel, powód
: Utwórz nowy skoroszyt zawierający zestaw arkuszy z aktywnego skoroszytu. Ten zestaw zawiera arkusze z współużytkującymi wspólne , które można znaleźć na arkuszu również zawartym w zestawie.
Argumenty procedury
:
tablica zawierająca nazwy arkuszy, które mają zostać uwzględnione w nowym skoroszycie
ścieżka i nazwa pliku nowej książki
Anonimowy użytkownik
Potwierdzenie od:
To jest funkcja:
Wiem, że to niezbyt dobre rozwiązanie, ale działa.
Anonimowy użytkownik
Potwierdzenie od: