Bob*_*der 1 excel vba excel-vba excel-2013
下面的代码检查以确保某个单元格具有一个值,然后再将颜色更改回工作表的原始颜色.通过将颜色从黄色更改为纸张的原始颜色,用户可以进行打印.问题是,一旦输入值,当表单上的任何其他内容发生更改时,消息框将一直显示.消息框是否应放在工作表更改事件之外?我是编程的新手,所以任何帮助都表示赞赏!
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="Anthem"
If Range("G50").Value <> "" Then
MsgBox "You may now print"
Range("G50").Interior.Color = RGB(221, 235, 247)
End If
ActiveSheet.Protect Password:="Anthem", AllowFormattingRows:=True
End Sub
Run Code Online (Sandbox Code Playgroud)
谢谢,
安东尼
小智 6
首先,每次更改时停止保护/取消保护工作表.将此代码与Worksheet_Change一起放在工作表的私有代码表中并运行一次.
private sub protectOnce()
me.Unprotect Password:="Anthem"
me.Protect Password:="Anthem", AllowFormattingRows:=True, UserInterfaceOnly:=True
end sub
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用VBA对工作表执行任何操作,而无需取消保护.如果你在其他地方有保护/解除保护,现在就摆脱它; 它不是必需的.
现在,谈谈你的实际问题.只要在范围("G50")发生变化时,就可以将消息框操作限制为,而不是在不相关的内容发生变化时.
Private Sub Worksheet_Change(ByVal Target As Range)
if not intersect(Range("G50"), target) is nothing then
If Range("G50").Value <> "" Then
MsgBox "You may now print"
Range("G50").Interior.Color = RGB(221, 235, 247)
end if
End If
End Sub
Run Code Online (Sandbox Code Playgroud)