我在第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代码的使用方法以及放置位置的建议吗?请参阅下面的电子表格图片。
答案 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列的内部更改为灰色。此外,它会锁定细胞。 为了将其锁定以进行编辑,您应该通过密码保护它。