带有 UserInterFaceOnly:=True 的 VBA 工作表保护,不允许复制和粘贴

我有一个宏可以将源工作表中的单元格复制到当前工作表上。

我已使用以下内容保护了所有工作表,以允许 vba 仍然运行:

Sub ProtectAllSheets()
    Dim ws As Worksheet
    For Each ws In Worksheets
       ws.Protect,UserInterFaceonly:=True
    Next ws
End Sub

复制/粘贴的宏在任何情况下都可以正常工作,但现在我用上面的代码保护它只有在粘贴到同一个源表时才有效。

如果粘贴到不同的工作表上,我会收到一个运行时错误,指出它是只读的。

包括来源在内的所有工作表都以上述方式受到保护。

运行时错误指向宏中的这行代码:

copySheet.Range("2:" & copySheet.Cells(Rows.Count,1).End(xlUp).Row).Copy .Rows(LRow)
Dim copySheet As Worksheet
    Dim pasteSheet As Worksheet
    Dim LRow As Long,i As Long
    
    Set copySheet = Worksheets("Template")
    Set pasteSheet = activeSheet
    With pasteSheet
        If Application.WorksheetFunction.CountA(.Cells) = 0 Then
            copySheet.Rows(1).Copy .Rows(1)
            LRow = 2
        Else
            LRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
        End If
        
        copySheet.Range("2:" & copySheet.Cells(Rows.Count,1).End(xlUp).Row).Copy .Rows(LRow)
              
    End With
End Sub

这里可能发生什么,我该如何纠正?

a476188049 回答:带有 UserInterFaceOnly:=True 的 VBA 工作表保护,不允许复制和粘贴

我尝试将复制和粘贴语句拆分为 2 个单独的语句而不是 1 个,以查看它是否有效,并且确实如此。

因此,当工作表受 UserInterFaceOnly:=true 保护时,问题是在工作表之间直接复制。但是,首先复制到剪贴板然后粘贴到不同的工作表中没有问题。

代码工作如下,作为2个语句:

copySheet.Range("2:" & copySheet.Cells(Rows.Count,1).End(xlUp).Row).Copy 
.Rows(LRow).PasteSpecial Paste:=xlPasteAll
本文链接:https://www.f2er.com/86206.html

大家都在问