Wątek przeniesiony 2021-01-28 13:23 z Inne języki programowania przez cerrato.

Excel VBA - Raz wyskakuje błąd raz nie

0

Witam,
po uruchomieniu poniższego kodu, występuje błąd Metoda pastespecial klasy range nie powiodła się (na etapie pierwszego wklejania). Gdy puszcze drugi raz makro, błąd nie występuje. O co chodzi?

ActiveSheet.Name = "dfe.xlsm"
Range("b16:b28").Select
Selection.Copy
Windows("abc.xlsm").Activate
Worksheets("1").Activate
ActiveSheet.Unprotect Password:="xxx"
Range("B16").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Windows("dfe.xlsm").Activate
Range("c32:d38").Select
Selection.Copy
Windows("abc.xlsm").Activate
Worksheets("1").Activate
Range("c32").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Rows("10:46").Select
Selection.EntireRow.Hidden = True

ActiveSheet.Protect Password:="xxx", DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("1").Visible = False

Generalnie makro ma z pliku dfe pobrać pewne komórki o wkleić do pliku abc po wcześniejszym odhasłowaniu zakładki 1 w tymże pliku, ukryć wiersze 10:46 i zahasłować zakładkę

0

Spróbuj wywołać ActiveSheet.Unprotect Password:="xxx" przed kopiowaniem danych.
Dodatkowo używanie zaznaczenia w aktywnych arkuszach jest problematyczne i niepotrzebnie komplikuje kod. Lepiej jest kopiować przez przypisane wartości w ten sposób:

Workbooks("skoroszyt1").worksheets("arkusz1").range("A1") = Workbooks("skoroszyt2").worksheets("arkusz1").range("A1") 

Dla większych zakresów z pomocą tablicy:

Dim tablica as variant

tablica = Workbooks("skoroszyt1").worksheets("arkusz1").range("A1:D20").value2
Workbooks("skoroszyt2").worksheets("arkusz1").range("A1:D20").value2 = tablica

Tylko pamiętaj, że zakres docelowy musi być takich samych rozmiarów co źródłowy

1 użytkowników online, w tym zalogowanych: 0, gości: 1