[英]VBA Excel ERROR 1004 problems with Paste Value
我对VBA
有点VBA
,但有一个我无法解决的问题,无法在较早的问题中找到正确的解决方案。 实际上,它看起来很简单。 我想在工作表中复制一个名称为"Blad3"
,并将值粘贴在工作表中,命名为"Blad1"
。 这是我做的,哪里出错了?
ActiveSheet.Cells(dattel, 4).Select
ActiveCell.Range("A1:J1").Copy
Sheets("Blad1").Select
Cells(8 + aantkk, 6).Select
ActiveSheet.Unprotect
' ActiveCell.PasteSpecial xlPasteValues
Selection.PasteSpecial Paste:=xlValue
' ActiveSheet.Paste
ActiveSheet.Protect
这对您有用吗?
Sheets(“ Blad3”)。Range(“ A1:J1”)。Copy
Sheets(“ Blad1”)。Range(“ A1:J1”)。PasteSpecial Paste:= xlValue
我在新的工作簿上对其进行了测试,它似乎工作正常。
首先,真正解决难题的办法是使用UserInterfaceOnly:= True参数保护工作表 ,以便您不必取消保护它即可使用VBA代码写入值。
运行一次。
sub protectBlad1FromUser()
worksheets("Blad1").unprotect
worksheets("Blad1").protect UserInterfaceOnly:=True
end sub
现在,您可以对VBA中的Blad1工作表执行任何操作,同时保护它免受用户的攻击。
至于您的原始代码,这很令人困惑。 如果.Cells(dattel, 4)
在Blad3工作表上为D4,则ActiveCell.Range("A1:J1").Copy
不会复制A1:J1; 它复制D4:M4。 无论如何,直接价值转移是一种比复制,特殊粘贴,价值更有效的价值转移方法。
dim rng as range
set rng = worksheets("blad3").cells(dattel, 4).resize(1, 10) '<~~ figure out what this is supposed to be
with worksheets("Blad1")
.cells(8 + aantkk, 6).resize(rng.rows.count, rng.columns.count) = rng.value
end with
可以试试这个
Sub Demo()
Dim srcSht As Worksheet, destSht As Worksheet
Dim rng As Range
Set srcSht = ThisWorkbook.Sheets("Blad3") 'this is source sheet
Set destSht = ThisWorkbook.Sheets("Blad1") 'this is destination sheet
With destSht
.Unprotect 'unprotect sheet Blad1
Set rng = srcSht.Range("A1:J1") 'set range to copy
.Cells(8 + aantkk, 6).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value 'paste only values
.Protect 'protect sheet Blad1
End With
End Sub
应该避免SELECT
和ACTIVATE
。 请参阅此了解详情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.