首页 > 解决方案 > 如何显示一个确认弹出窗口,允许使用宏编辑 Excel 文件的任何单元格中存在的特定文本?

问题描述

我要实现的是如果用户尝试修改包含文本“请勿编辑”的单元格,则显示弹出窗口。只有接受确认按钮,用户才能修改单元格值。

如何将此条件应用于可以增长的列,并且文本“不要编辑”的位置可以存在于第 4 列的任何单元格上?

我尝试使用此宏,它仅用于检测第 4 列的 D1、D2 和 D3 列单元格的值是否发生变化,然后显示一个弹出窗口。但我不知道如何显示一个弹出窗口来请求确认以允许在用户接受时编辑单元格,否则保留“不编辑”值。

这是我第一次尝试在用户更改值时显示消息:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Column = 4 Then
     If Target.Row = 1 Or Target.Row = 2 Or Target.Row = 3 Then
        Beep
        MsgBox "Do you really want to change it?", vbYesNo + vbQuestion
     End If
  End If
End Sub

这是我的工作表样本

在此处输入图像描述

标签: excelvba

解决方案


Consider the below modified version of your code which will throw the MsgBoxprompt when any cell is selected where column 4 in the selected row contains "don't edit".

它检查Column 4 (Column D)所选单元格的行中是否包含"don't edit". 如果为 true,它会触发msgbox提示您的用户。

该变量使用单击按钮的返回值Return捕获用户的响应(是或否),然后如果返回则允许选择(并因此进行编辑),或者如果返回则选择单元格。YesA1No

Private Sub Worksheet_SelectionChange(ByVal target As Range)
    Dim Result As Long
    If Selection.Count = 1 Then
        If LCase(Me.Cells(target.Row, 4)) = "don't edit" Then
            Beep
            Result = MsgBox("Do you really want to change it?", vbYesNo + vbQuestion)
            If Result = 6 Then '6 is the return value for the "Yes" button.
    
            Else
                Range("A1").Select
            End If
        End If
    Else
        'Do something if more than one cell is selected.
        MsgBox "More than one cell is selected.", vbCritical, "You can't do that"
        Range("A1").Select
    End If
End Sub

注意:是一个占位符,表示用户单击时Range("A1").Select要执行的任何操作。NoMsgbox

注意:您可以使用 MsgBox 返回常量而不是值,例如vbYesor vbNo- 请参阅下面的文档。


MsgBox 函数- 有关 MsgBox 函数的更多信息,包括按钮参数(哪些常量/值返回哪个按钮单击等),请参见此处


推荐阅读