Obsah
Jedním z nejčastějších problémů, se kterými se setkáváme při práci s kopírování a vkládání ve VBA je chyba času běhu 1004 : Selhání metody PasteSpecial třídy Range V tomto článku vám ukážu, jaké jsou možné příčiny této chyby a jak je vyřešit, a to na vhodných příkladech a ilustracích.
Stáhnout cvičebnici
Stáhněte si tento cvičební sešit a procvičujte si při čtení tohoto článku.
Metoda PasteSpecial selhala.xlsmSelhání metody PasteSpecial třídy Range: příčiny a řešení
Bez dalšího zdržování přejděme k naší hlavní diskusi. Tedy k tomu, jaké mohou být možné příčiny této chyby a jak je vyřešit.
Důvod 1: Přístup k metodě PasteSpecial bez kopírování čehokoli
To je nejčastější příčina chyby. To znamená, že se snažíte přistupovat k souboru PasteSpecial bez kopírování čehokoli.
Abyste tomu jasně porozuměli, zkontrolujte následující údaje. VBA kód.
⧭ Kód VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub
Zde jsme použili PasteSpecial metoda VBA bez kopírování čehokoli. Excel tedy zobrazí položku chyba běhu 1004 když ji spustíte.
⧭ Řešení:
Chcete-li tento problém vyřešit, musíte nejprve zkopírovat rozsah buněk a poté přistoupit k položce PasteSpecial metoda.
Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub
Po spuštění tohoto kódu se vloží vzorce rozsahu B3:B5 aktivního listu do vybraného rozsahu.
Přečtěte si více: Metoda PasteSpecial třídy pracovního listu selhala (důvody & řešení)
Důvod 2: Přístup k metodě PasteSpecial s pravopisnou chybou
To je další častý důvod chyby. To znamená, že pro přístup k PasteSpecial metoda s pravopisnou chybou (chybami) v jakémkoli argumentu.
Podívejte se na následující VBA kódu, aby to bylo jasné. Zde jsme udělali pravopisnou chybu v argumentu xlPasteAll .
⧭ Kód VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlPaseAll End Sub
Po spuštění tohoto kódu se zobrazí následující zpráva. chyba běhu 1004 .
⧭ Řešení:
Řešení je snadné, určitě jste to už uhodli. Jen se ujistěte, že všechny argumenty byly napsány správně.
Chyba automaticky zmizí.
Přečtěte si více: Jak používat speciální příkaz Vložit v aplikaci Excel (5 vhodných způsobů)
Podobná čtení
- Excel VBA: Kopírování rozsahu do jiného sešitu
- Kopírování a vkládání hodnot do dalšího prázdného řádku pomocí aplikace Excel VBA (3 příklady)
- Použití funkce VBA PasteSpecial a zachování formátování zdroje v aplikaci Excel
- Jak zkopírovat stejnou hodnotu do více buněk v aplikaci Excel (4 metody)
- Kopírování řádků aplikace Excel VBA do jiného pracovního listu na základě kritérií
Důvod 3: Otevření nového sešitu po kopírování, které zruší režim kopírování/vkládání
To je další důležitý důvod, který stojí za chybou. Tedy provést něco, co zruší režim kopírování/vkládání před vložením.
Podívejte se na následující kód, abyste jej jasně pochopili.
⧭ Kód VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Sešity("Sešit1.xlsx").Pracovní listy("List1").Rozsah("B3:B5").Výběr Výběr.Kopírovat Dim Sešit2 As Sešit Set Sešit2 = Sešity.Add Sešit2.SaveAs Název souboru:=ThisWorkbook.Path & "\" & "Sešit2.xlsx" Sešit2.Activate Sešit2.Unprotect Sešit2.Pracovní listy("List1").Rozsah("B3:B5").Výběr Výběr.VložitSpecial Paste:=xlPasteAllEnd Sub
Zde jsme zkopírovali rozsah B3:B5 z List1 sešitu s názvem Pracovní sešit1 .
Pak jsme vytvořili nový sešit s názvem Pracovní sešit2 ve stejné složce a pokusil se zkopírovaný rozsah vložit do rozsahu B3:B5 z List1 tohoto sešitu.
Když však kód spustíme, zobrazí se zpráva. Selhání metody PasteSpecial třídy Range Chyba, protože v okamžiku, kdy vytvoříme nový sešit. režim kopírování/vkládání budou zrušeny.
⧭ Řešení:
Chcete-li tento problém vyřešit, napište nejprve řádky kódu pro vytvoření nového sešitu s názvem Pracovní sešit2 .
Pak vložte řádky pro aktivaci Pracovní sešit1 a zkopírujte z něj požadovaný rozsah.
A nakonec aktivujte Pracovní sešit2 a vložte do něj zkopírovaný rozsah.
Sub PasteSpecial_Method_of_Range_Class_Failed() Dim Workbook2 As Workbook Set Workbook2 = Workbooks.Add Workbook2.SaveAs Filename:=ThisWorkbook.Path & "\" & "Workbook2.xlsx" Workbooks("Workbook1.xlsx").Activate Worksheets("Sheet1").Range("B3:B5").Select Selection.Copy Workbook2.Activate Worksheets("Sheet1").Range("B3:B5").Select Selection.PasteSpecial Paste:=xlPasteAll End Sub
Spusťte tento kód. Zkopíruje rozsah B3:B5 z List1 z Cvičebnice1.
A vložte ji do List1 nově vytvořeného sešitu s názvem Pracovní sešit2 .
⧭ Opatrnost:
Samozřejmě nezapomeňte na to. Pracovní sešit1 otevřené během spouštění kódu.
Přečtěte si více: Jak zakázat kopírování a vkládání v aplikaci Excel bez maker (pomocí 2 kritérií)
Důvod 4: Nastavení Application.CutCopyMode na False, které zruší režim kopírování/vkládání
Nakonec může existovat ještě jeden důvod, proč k chybě dochází. Můžeme vypnout funkci Application.CutCopyMode omylem před přístupem k PasteSpecial metoda.
Ačkoli to není příliš běžná praxe, přesto ji někdy používáme, když máme pracovat s dlouhým počtem řádků.
Pro lepší pochopení viz následující kód. Zde jsme zkopírovali rozsah B3:B5 , ale zrušil CutCopyMode před vložením.
⧭ Kód VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Application.CutCopyMode = False Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub
Když kód spustíte, zobrazí se. Selhání metody PasteSpecial třídy Range chyba.
⧭ Řešení:
Předpokládám, že už všichni tušíte, jak to vyřešit. Je to vlastně docela jednoduché. Stačí z kódu odstranit řádek, který mění funkci CutCopy režim vypnuto.
Takže správný VBA kód bude:
Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub
Zkopíruje rozsah B3:B5 a vložte ji nad D3:D5 bez jakýchkoli potíží.
Přečtěte si více: Speciální funkce VBA Vložit pro kopírování hodnot a formátů v aplikaci Excel (9 příkladů)
Na co nezapomenout
Zde jsem uvedl pouze potíže, se kterými se můžete setkat při práci se systémem. PasteSpecial metoda v VBA. Pokud chcete znát PasteSpecial metodu podrobněji, navštivte tento odkaz .
Závěr
Stručně řečeno, toto jsou důvody, které mohou způsobit. chyba běhu 1004: Metoda PasteSpecial od třídy Range selhala ve vašem kódu. Doufám, že jste všechny body pochopili jasně a že vám tyto body v budoucnu hodně pomohou. Znáte nějaké další důvody? A máte nějaké problémy? Neváhejte se nás zeptat. A nezapomeňte navštívit naše stránky. ExcelWIKI pro další příspěvky a aktualizace.