Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 运行时错误1004:工作表类的粘贴方法失败_Vba_Excel_Runtime Error - Fatal编程技术网

Vba 运行时错误1004:工作表类的粘贴方法失败

Vba 运行时错误1004:工作表类的粘贴方法失败,vba,excel,runtime-error,Vba,Excel,Runtime Error,关于这个错误以及如何修复有很多信息,但我已经尝试了很多,但都没有效果:请参见下面的问题代码块 Range("A1:K2").Select Selection.Copy Windows("EIL Depannage Register.xlsm").Activate Sheets("Raising Depannage").Select ActiveSheet.Unprotect Sheets("Import_Sheet").Select ActiveSheet.Unprotect Range("A1

关于这个错误以及如何修复有很多信息,但我已经尝试了很多,但都没有效果:请参见下面的问题代码块

Range("A1:K2").Select
Selection.Copy
Windows("EIL Depannage Register.xlsm").Activate
Sheets("Raising Depannage").Select
ActiveSheet.Unprotect
Sheets("Import_Sheet").Select
ActiveSheet.Unprotect
Range("A1").Select
Application.Wait (Now + TimeValue("00:00:10"))
ActiveSheet.Paste    <<<<<error happens at this line
范围(“A1:K2”)。选择
选择,复制
Windows(“EIL Depannage Register.xlsm”)。激活
工作表(“提升折旧”)。选择
活动表。取消保护
工作表(“导入工作表”)。选择
活动表。取消保护
范围(“A1”)。选择
Application.Wait(现在+时间值(“00:00:10”))

你能这样试试吗

Range("A1:K2").Copy
Windows("EIL Depannage Register.xlsm").Activate
Sheets("Raising Depannage").Unprotect
Sheets("Import_Sheet").Unprotect
Sheets("Import_Sheet").Range("A1").Paste
编辑: 这样怎么样:

Dim wb As Workbook
Dim ws As Worksheet

set wb = activeworkbook
set ws = activesheet

Windows("EIL Depannage Register.xlsm").Activate
Sheets("Raising Depannage").Unprotect
Sheets("Import_Sheet").Unprotect

wb.ws.Range("A1:K2").Copy
Windows("EIL Depannage Register.xlsm").Activate
Sheets("Import_Sheet").Range("A1").Paste

播放一点,它应该会起作用。

取消保护
命令正在取消您的
。CutCopyMode
因此基本上没有要粘贴的内容。在启动复制和粘贴操作之前,您必须解除工作表的保护

Dim ws As Worksheet
Set ws = ActiveSheet

Windows("EIL Depannage Register.xlsm").Activate
With ActiveWorkbook
    .Worksheets("Raising Depannage").Unprotect
    With .Worksheets("Import_Sheet")
        .Unprotect
        ws.Range("A1:K2").Copy Destination:=.Range("A1")
    End With
End With
我不喜欢使用
ActiveSheet
来限定原始工作表,但您的代码没有指定工作簿或工作表,这让我没有什么选择。

试试看

dim shSrc as worksheet
dim shTarget as worksheet
set shSrc =Workbooks("EIL Depannage Register.xlsm").Sheets("Raising Depannage")
set shTarget =Workbooks("EIL Depannage Register.xlsm").Sheets("Raising Depannage")
shSrc.unprotect
shTarget.unprotect
shSrc.Range("A1:K2").Copy
shTarget. Range("A1").Paste   
shSrc.protect
shTarget.protect
set shsrc=nothing
set shtarget=nothing`

只需修复源和目标并验证范围

代码的最后一行应该是:

Sheets("Import_Sheet").paste Range("A1")

因为粘贴是工作表的一种方法,而
range(“A1”)
是目标参数。

您可能会被绊倒,因为您大量使用
选择
在不需要时激活
。请看,并。感谢您的提示-所有这些都是新的,因此感谢最后一行的提示-“对象不支持属性或方法”您需要使用
PasteSpecial
非常感谢这项工作-很抱歉这些糟糕的做法,但我是vba新手,不断学习。。。再次感谢:)不用担心,这是新手的常见做法,因为录制的代码就是这样显示的。这里的许多答案将试图引导您远离选择和激活方法。上面推荐的读数是一个很好的起点。