VBA - 根据另一个单元格中的文本锁定单元格

时间:2016-12-13 09:26:41

标签: excel vba excel-vba

我在第I列输入“是”时使用当前代码发送电子邮件:

Private Sub Worksheet_Calculate()

Dim FormulaRange As Range
Dim NotSentMsg As String
Dim MyMsg As String
Dim SentMsg As String
Dim MyLimit As Double

NotSentMsg = "Not Sent"
SentMsg = "Sent"

MyLimit = 0

Set FormulaRange = Me.Range("S3:S100")

On Error GoTo EndMacro:
For Each FormulaCell In FormulaRange.Cells
    With FormulaCell
        If IsNumeric(.Value) = False Then
            MyMsg = "Not numeric"
        Else
            If .Value > MyLimit Then
                MyMsg = SentMsg
                If .Offset(0, 1).Value = NotSentMsg Then
                    Call Mail_with_outlook
                End If
            Else
                MyMsg = NotSentMsg
            End If
        End If
        Application.EnableEvents = False
        .Offset(0, 1).Value = MyMsg
        Application.EnableEvents = True
    End With
Next FormulaCell

ExitMacro:
Exit Sub

EndMacro:
Application.EnableEvents = True

MsgBox "Some Error occurred." _
     & vbLf & Err.Number _
     & vbLf & Err.Description
End Sub

我还有以下代码来复制/粘贴某些值并在退出时锁定电子表格:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

'Step 1: Protect the sheet with a password
 Sheets("Sweden").Range("R3:R1000").Copy
 Sheets("Sweden").Range("Q3").PasteSpecial Paste:=xlPasteValues
 Sheets("Sweden").Range("A1").Select
 Sheets("Sweden").Protect Password:="password"
'Step 2: Save the workbook
 ActiveWorkbook.Save
 End Sub

问题和要求:当在第I列的任何单元格中输入“是”时,应锁定H列中相应行上的单元格以进行编辑并标记灰色,即不能对H列中的该值进行调整如何将其纳入我的代码中?

我尝试对列H = IF(I5 =“YES”,FALSE)中的单元格使用数据验证,但是您仍可以删除单元格中的值。

我还在H列中有另一个数据验证来限制输入超过2位小数,所以我想使用VBA作为解决方案。

有关VBA代码的使用方法以及放置位置的建议吗?请参阅下面的电子表格图片。

Current spreadsheet

1 个答案:

答案 0 :(得分:1)

这是我可以帮助你的: 问题和要求:当在第I列的任何单元格中输入“是”时,应锁定H列中相应行上的单元格进行编辑并进行灰色标记,即不能对列H中的该值进行调整。我把它加入到我的代码中?

在工作表上,您要执行此操作,输入以下内容:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column = 9 And UCase(Target) = "YES" Then   'I is number 9
        Cells(Target.Row, 8).Interior.Color = 12566463
        Cells(Target.Row, 8).Locked = True
        ActiveSheet.Protect "mypasswordissecurebecauseitisextremelylong"
    End If

End Sub

它将检查第9列中的任何是(是,是,是,是的),它会将第8列的内部更改为灰色。此外,它会锁定细胞。 为了将其锁定以进行编辑,您应该通过密码保护它。