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

问题描述 投票:1回答:1

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

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

  • 确认用户打算更改单元格“I16”的内容
  • 如果用户不打算进行更改,请撤消更改并退出子
  • 如果用户DID打算进行更改,请将工作表的名称更改为新名称,询问用户是否要清除先前命名的工作表中的数据。 (这里的想法是,如果我们将工作表名称从Cookies更改为Cakes,即使工作表仍然相同,Cookies数据也会被清除。)
  • 如果用户想要清除数据,代码将清除特定的单元格区域,从列(变量)到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
excel vba excel-vba
1个回答
2
投票

您没有捕获MsgBox的返回值。

Dim result As VbMsgBoxResult
result = MsgBox("Are you sure?", vbOKCancel)
If result = vbOK Then
...
Else
...
End if
© www.soinside.com 2019 - 2024. All rights reserved.