繁体   English   中英

粘贴值的VBA Excel错误1004问题

[英]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

应该避免SELECTACTIVATE 请参阅了解详情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM