【问题标题】:Making Certain Cells Uneditable使某些单元格不可编辑
【发布时间】:2018-02-13 13:55:26
【问题描述】:

我有这段代码,如果 E 列变灰,则 D 列的一部分变灰,并使 E 列着色,反之亦然。

我不想将其设为灰色,而是将单元格设为不可编辑。

这可能吗?

Dim sourceCell1 As Range, targetRng1 As Range, sourceCell2 As Range, targetRng2 
 As Range
 With Worksheets("SHELLY")
 If .Range("D3:D19").Interior.ColorIndex = 15 Then
    Set sourceCell1 = .Range("C41")
    Set targetRng1 = .Range("F3:F19")
    Set sourceCell2 = .Range("C42")
    Set targetRng2 = .Range("D3:D19")
 Else
    Set sourceCell1 = .Range("C41")
    Set targetRng1 = .Range("D3:F19")
    Set sourceCell2 = .Range("C43")
    Set targetRng2 = .Range("F3:F19")
 End If
 End With

sourceCell1.Copy
targetRng1.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

sourceCell2.Copy
targetRng2.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

【问题讨论】:

  • 您需要保护工作表,除非您解锁,否则所有单元格都将无法编辑。
  • @DisplayName 谢谢,但我看过那篇文章。我试过了,但我仍然无法在上面看到的 IF ELSE 函数中做到这一点。
  • @SkylarWallin,发布您的代码及其实际问题

标签: vba excel


【解决方案1】:

扩展@DisplayName 的评论,在How to Lock the data in a cell in excel using vba 的应用下方。

Sub lockRange()
    Dim sourceCell1 As Range, targetRng1 As Range, sourceCell2 As Range, targetRng2 As Range

    With Worksheets("SHELLY")

        'unprotect sheet to make alterations
        .Unprotect Password:="p"
        'making range editable before protecting sheet
        .Range("A1:AA100").Locked = False

        If .Range("D3:D19").Interior.ColorIndex = 15 Then
            Set sourceCell1 = .Range("C41")
            Set targetRng1 = .Range("F3:F19")
            Set sourceCell2 = .Range("C42")
            Set targetRng2 = .Range("D3:D19")

            'defining which range to lock
            Set lockRng = .Range("D3:D19")
        Else
            Set sourceCell1 = .Range("C41")
            Set targetRng1 = .Range("D3:F19")
            Set sourceCell2 = .Range("C43")
            Set targetRng2 = .Range("F3:F19")

            'defining which range to lock
            Set lockRng = .Range("F3:F19")
        End If
    End With

    sourceCell1.Copy
    targetRng1.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

    sourceCell2.Copy
    targetRng2.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

    With Worksheets("SHELLY")
        'locking range so it is un-editable when protected
        lockRng.Locked = True
        'range E always gray/locked?
        .Range("E3:E19").Locked = True
        'protecting sheet with password
        .Protect UserInterfaceOnly:=True, Password:="p"
    End With
End Sub

【讨论】:

  • 我想轮流锁定范围,以便一次只锁定一个。此代码清除了 D、E 和 F 列中的所有格式
  • lockRng 控制锁定范围,您可以根据需要进行更改。你是什​​么意思它消除了格式?这段代码中唯一改变任何类型格式的就是你已经拥有的.PasteSpecial 操作。
  • 对不起,我是新手 - 它清除了所有格式,因为我已经移动了应该从中复制格式的单元格,所以它是从空白单元格复制的:/
猜你喜欢
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
相关资源
最近更新 更多