【问题标题】:VBA Sheet protection with UserInterFaceOnly:=True not allowing copy and paste使用 UserInterFaceOnly:=True 的 VBA 表保护不允许复制和粘贴
【发布时间】:2021-09-25 02:25:06
【问题描述】:

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

为了让 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

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

【问题讨论】:

  • 您遇到了哪个错误?您是否在 workbook_open 事件中运行 ProtectAllSheets?因为UserInterFaceOnly:=True 在关闭工作簿时迷路了。并且需要在打开工作簿时再次重新申请。
  • 在 workbook_open 中是。我收到运行时错误 1004:您尝试更改的单元格或图表受到保护,因此是只读的...
  • 那么你能说出.Rows(LRow) 指的是什么吗?你能告诉minimal reproducible example这个问题吗?
  • 已在上面编辑以包含完整代码。
  • 你Set pasteSheet = ActiveSheet在哪个工作簿中的ActiveSheet与Worksheets("Template")相同?如果它在工作簿中,则代码编写在我建议指定ThisWorkbook.ActiveSheet 和ThisWorkbook.Worksheets("Template")。只是为了确保它是可靠的。您能否确认所有内容都在同一个工作簿中?

标签: excel vba activex


【解决方案1】:

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

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

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

copySheet.Range("2:" & copySheet.Cells(Rows.Count, 1).End(xlUp).Row).Copy 
.Rows(LRow).PasteSpecial Paste:=xlPasteAll

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多