首页 文章

基于消息框的工作表更改事件

提问于
浏览
1

我现有的代码使用ActiveX复选框来修改基于单元格“I16”的工作簿中工作表的 Headers 和可见性 . 我想要做的是设置一个将要修改的更改事件,如果用户更改了单元格“I16”(这是工作表的 Headers )的内容,则允许进一步修改工作表 .

该代码旨在执行以下操作:

  • 确认用户打算更改单元格"I16"的内容

  • 如果用户不打算进行更改,请撤消更改并退出子

  • 如果用户DID打算进行更改,请将工作表的名称更改为新名称,询问用户是否要清除先前命名的工作表中的数据 . (这里的想法是,如果我们将工作表名称从Cookies更改为Cakes,即使工作表仍然相同,Cookies数据也会被清除 . )

  • 如果用户想要清除数据,代码将清除从Column(变量)到LastRow上方的行的特定单元格范围(保存LastRow中的任何公式,以防意外删除)

  • 如果用户不想清除数据,代码将单独保留指定的单元格区域,将设置新的工作表名称,然后退出该子程序 .

问题?代码确实......没有 . 我改变了目标地址,没有任何反应 . 我调整代码,调整范围等,无处可去 .

为您即将见证的业余编码提前道歉,并感谢您对此的帮助 .

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim ws As Worksheet
   Dim sheetName As String

    If Target.Address = "I16" Then
        If WorksheetExists(sheetName) Then
            Exit Sub
        Else
        MsgBox "Are you sure you want to change" & vbNewLine & "the name of this Allowance?", vbYesNo + vbQuestion, "Confirm Name Change"

           If Yes Then
           Set ws = Sheet34
           ws.Name = sheetName

            MsgBox "Would you like to clear the data from" & vbNewLine & "this Allowance?", vbYesNo + vbQuestion, "Confirm Data Clear"
                If Yes Then
                LastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
                Worksheets.Sheet34.Rows.Range("C9:LastRow, -1", D9:LastRow, -1, E9:LastRow, -1, F9:LastRow, -1, H9:LastRow, -1, J9:LastRow, -1, L9:LastRow, -1, N9:LastRow, -1, P9:LastRow, -1).Clear
            Else
                Exit Sub

            End If
        Else
            Application.EnableEvents = False
            Application.Undo
            Exit Sub
            Application.EnableEvents = True
        End If
    End If
End If

End Sub

1 回答

  • 2

    您没有捕获 MsgBox 的返回值 .

    Dim result As VbMsgBoxResult
    result = MsgBox("Are you sure?", vbOKCancel)
    If result = vbOK Then
    ...
    Else
    ...
    End if
    

相关问题