VBA Excel-如何限制用户不粘贴特定行?

时间:2013-01-17 08:05:25

标签: vba excel-vba excel

我有一个如下所示的Excel,它是一个sharedExcel。

enter image description here

现在我不应该允许将backcolour为 GRAY 的行的粘贴选项(这些在运行时没有固定,任何行都可能获得GRAY颜色)。因为它是sharedExcel而我不能使用Lock属性。任何帮助都会受到极大的赞赏。

2 个答案:

答案 0 :(得分:0)

使用颜色作为用于检查true / false的属性是不良行为。 你可以通过例如添加一个0/1或TRUE / FALSE列(如果需要隐藏)来解决这个问题,你可以通过组合框进行访问(然后你仍然可以通过点击这个cbb框将颜色调整为灰色)。

您可以通过Sheet事件on_Change检查动态组合的范围。 工作表事件的基本语法:

Private Sub Worksheet_Change(ByVal Target As Range)
'Set range dynamically instead of this hard coded example 
If Not Intersect(Target, Thisworkbook.Sheets(1).Range("A1:A10")) Is Nothing Then 
    'Do something 
End If
End Sub

答案 1 :(得分:0)

在这个问题上花了一些时间后我编写了以下代码。它工作得很好。在这里,我采用了另一个名为 PasteSheet 的电子表格进行编码,但我不会随时向用户显示。


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode Then
    SelectedRow = ActiveCell.Row
    With Sheets("PasteSheet")
        .Activate
        .Range("A1").PasteSpecial xlPasteValues
        CR = Selection.Rows.Count
    End With
    Worksheets("ActualSheet").Activate
    For k = SelectedRow To (SelectedRow + CR)
        If Worksheets("ActualSheet").Cells(k, 30).Interior.Color = RGB(215, 215, 215) Then
            Application.EnableEvents = False
            MsgBox "Pasting is not allowed here!"
            'Clearing data in PasteSheet
            Worksheets("PasteSheet").Cells.ClearContents
            Worksheets("ActualSheet").Activate
            Application.EnableEvents = True
            Exit Sub
        End If
    Next
End If

End Sub