粘贴值的VBA Excel ERROR 1004问题

时间:2017-09-30 12:00:06

标签: vba excel-vba excel

我对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

3 个答案:

答案 0 :(得分:0)

这对你有用吗?

表( “Blad3”)范围。( “A1:J1”)。复制

表格(“Blad1”)。范围(“A1:J1”)。PasteSpecial Paste:= xlValue

我在一个新工作簿上测试了它,它似乎工作得很好。

答案 1 :(得分:0)

首先,您的困境的真正答案是protect the worksheet使用 UserInterfaceOnly:= True 参数,这样您就不必使用VBA代码取消保护它来写入值。

运行一次。

sub protectBlad1FromUser()
    worksheets("Blad1").unprotect
    worksheets("Blad1").protect UserInterfaceOnly:=True
end sub

现在,您可以对VBA中的Blad1工作表执行任何操作,同时保护其免受用户的侵害。

至于您的原始代码,这很令人困惑。如果Blad3工作表上的.Cells(dattel, 4)为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

答案 2 :(得分:-1)

可以试试这个

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
应避免使用

SELECTACTIVATE。有关详细信息,请参阅this