Udostępnij za pośrednictwem

Excel VBA Run-time error''-2147417848 (80010108)'' Automation error Sheets().Copy Before:=Sheets

Anonimowe
2019-11-07T07:33:52+00:00

Witam.

Czy może ktoś wie która aktualizacja do Excel popsuła metodę VBA do kopiowania arkuszy?

W jednym z plików którego używam od kilku lat używam polecenia

Sheets("Prowizje miesieczne").Copy Before:=Sheets("Prowizje miesieczne")

ogólnie to działało ale dziś jaku uruchomiłem ten sam skrypt to na wykonaniu tego polecenia zatrzymuje się z błędem

Run-time error''-2147417848 (80010108)'' Automation error (Obiekt odłączył się od swoich klientów)

Co dziwne po wyjściu z wykonywania makra arkusz, który ma zostać skopiowany "Prowizje miesieczne" został przez skrypt skopiowany.

Co jeszcze dziwniejsze raz na 20 prób ten sam skrypt przechodzi bez błędów.

Kopiowany arkusz nie jest ukryty. Makro wywoływane skrótem klawiszowym.

Na necie dokopałem się do podobnych problemów, ale one dotyczyły O2010 i były spowodowane wadliwa poprawką.

Ja pracuje na Office 365 i mam wszystkie aktualne aktualizacje zainstalowane.

Microsoft 365 i Office | Excel | Do użytku domowego | Windows

Pytanie zablokowane. To pytanie zostało zmigrowane ze społeczności pomocy technicznej firmy Microsoft. Możesz zagłosować, czy pytanie jest pomocne, ale nie możesz dodawać komentarzy ani odpowiedzi, ani też śledzić pytania. Aby chronić prywatność, profile użytkowników w przypadku migrowanych pytań są anonimizowane.

Komentarze: 0 Brak komentarzy
Liczba głosów: {count}

Odpowiedzi: 12

Sortuj według: Najbardziej pomocne
  1. Oskar Shon 49,301 Punkty reputacji Moderator wolontariuszy
    2019-11-07T08:33:56+00:00

    Tak jest taki błąd. Sam na niego natrafiłem kilka lat temu. Przypadek ten nie zachodzi za każdym razem ale ma miejsce.

    Nie wykluczone że jest to wynik złego zarządzania pamięcią.

    Można to obejść przez tworzenie nowego arkusza i kopie obiektów do tego arkusza właśnie, a nie kopie arkusza z obiektami.

    Komentarze: 0 Brak komentarzy
  2. Anonimowe
    2019-11-07T08:45:56+00:00

    Tylko o do tej pory działało.

    Przestało od czasu kiedy ostatnio używałem (czyli od połowy października).

    W międzyczasie odświeżałem sobie W10 metodą "uaktualnienia z 10 do 10".

    W ogóle mam wrażenie, że jest jakiś grubszy problem z VBA w tej wersji Office, bo w Access na metodach wywoływania zbudowanych kwerend insertujących wyniki do tabel (które też używam od ok 4 lat) też nagle zaczęły sypać błędami.

    Na razie użyłem "naprawy online" pakietu.

    Jak to nie pomoże to będę musiał, zgodnie z sugestią, przerobić kod (w sumie i tak kopiuje arkusz tylko po to by go zapisać później do nowego skoroszytu i wyczyścić formuły a zachować tylko wartości i formatowanie).

    Metoda z kopiowaniem arkusza wydawała się najszybsza i najprostsza

    Aktualizacja: Naprawa pakietu nic nie dała... Błąd nadal występuje

    Komentarze: 0 Brak komentarzy
  3. Anonimowe
    2019-11-07T10:11:59+00:00

    Poprawiłem kod

    Dim ark As Worksheet

    Set ark = Sheets.Add(After:=Sheets("Prowizje miesieczne"))

    ark.Name = NowaNazwa

    Sheets("Prowizje miesieczne").Select

    Cells.Select

        Selection.Copy

        Sheets(NowaNazwa).Select

    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks _

            :=False, Transpose:=False

    i teraz mam ten sam błąd na komendzie

    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks _

            :=False, Transpose:=False

    Komentarze: 0 Brak komentarzy
  4. Oskar Shon 49,301 Punkty reputacji Moderator wolontariuszy
    2019-11-07T10:38:12+00:00

    ok tylko dlaczego wszystkie komórki a nie .UsedRangei dlaczego nie korzystasz ze zmiennej jaką zadeklarowałeś ark podczas kopiowania tylko polegasz na komendach select/selection, które są pochodną z nagrywarki zamiast zmienna dla Range. No i dlaczego paste special, a nie Copy - chcesz coś ubić?

    Po kolei:

    zamienna obiektowa dla Sheets("Prowizje miesieczne")

    Nowa zmienna dla nowego arkusza (potem operujesz tylko zmiennymi jak wykonałeś to dla NowaNazwa

    potem zmienna obiektowa typu range do której przypiszesz Usedrange

    kopia danych z tego zakresu do zakresu nowego arkusza - jeśli musisz paste special to możesz wykonać to np przez value, a potem format

    Komentarze: 0 Brak komentarzy
  5. Anonimowe
    2019-11-07T10:50:23+00:00

    W międzyczasie przerobiłem

        Cells.Select

        Selection.Copy

        Sheets(Handlowiec).Select

        ActiveSheet.Paste

        Cells.Select

        Selection.Copy

        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

            :=False, Transpose:=False

    i na komendzie ActiveSheet.Paste tez się wykłada

    (za każdym razem jak błąd wyskakuje to po włączeniu Pause w VBA widzę, że kopia została utworzona, wartości wklejone.. i crash...

    jak odpalam ten sam kod na "lżejszym" pliku to kod przechodzi bezbłędnie.

    Po próbie zatrzymania wykonywania dalszych kroków cały Excel się wywala

    )

    Czy mógłbyś mi z tym pomóc? Bo nie do końca chyba rozumiem  jak wykorzystywac metode Range przy kopiowaniu (a czas mnie z tym nagli).

    Ogólnie to co chce osiągnąć to:

    Mam arkusz "Prowizje miesieczne" (który zawiera formuły i formatowanie)

    Chce utworzyć kopię całego arkusza, która będzie zawierać formatowanie i wartości.

    (i to powtórzyć jeszcze dla 3 innych arkuszy)

    W dalszym kroku arkusz ten będzie kopiowany do nowego skoroszytu (ten + kilka innych kopii arkuszów) i ten skoroszyt  jest wysyłany emailem do docelowego odbiorcy (dla tego chcę się pozbyć formuł aby u innego nie sięgał do wartości tabel przestawnych zawartych u mnie w źródle)

    AKTUALIZACJA:

    Aby nie było, że czekam tylko na gotowe rozwiązanie rozumiem, że chodzi o coś a'al:

    Worksheets("Prowizje miesieczne").Range("A1:T2000").Copy Destination:=Sheets(ArkDocelowy).Range("A1")

    (zaraz to przetestuje na docelowym arkuszu i dam znać)

    AKTUALIZACJA2:

    Niestety na poleceniu poniższym tez mam ten sam błąd o odłączonym obiekcie...

    Worksheets("Prowizje miesieczne").Range("A1:W2500").Copy Destination:=ark_Prow.Range("A1")

    Komentarze: 0 Brak komentarzy