VBA – 基于另一个单元格中的文本locking单元格

当我在列I中input“是”时,我正在使用当前的代码发送电子邮件:

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 

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

 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”中的任何单元格中input“是”时,列H中相应行上的单元格应被locking以进行编辑和灰色标记,即不能在列H中对该值进行调整。我把这个join到我有的代码中?

我试过在H = IF(I5 =“YES”,FALSE)的单元格中使用数据有效性,这个工作正常,但你仍然可以删除单元格中的值。

而且在H列还有另一个数据validation,以限制input2位以上的小数,所以我想用VBA作为解决scheme。

任何build议什么VBA代码使用,并把它放在哪里? 请参阅下面的电子表格图片。

目前的电子表格

这是我可以帮助你的:问题和要求:当在第一列中的任何单元格中input“是”时,H列中相应行上的单元格应被locking以进行编辑和灰色标记,即不能进行调整到H列的那个值。我怎样才能把这个结合到我有的代码中呢?

在工作表上,您要在此处input以下内容:

 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列中的内部变为灰色。 此外,它会locking单元格。 为了让它被locking进行编辑,你应该用密码保护它。