如果单元格空白,则Excel vba会删除工具提示

时间:2019-07-04 10:46:40

标签: excel vba

我有一个vba,当我单击一个单元格(包含“ ID”)时,它将在另一个工作表中搜索该“ ID”并创建包含该工作表中的信息的工具提示。它的工作原理如下:

  • 如果ID存在,则在单击它时显示工具提示。如果我在空白单元格中单击,将隐藏工具提示;
  • 如果该ID不存在,则不显示任何内容;

我的问题仍然存在于以下步骤中:

  • 如果我有一个存在的ID,并将其从单元格中删除,则工具提示将保留在那里,但没有信息。每次我单击该单元格时,都会显示一个空的工具提示。我需要它不显示任何类似单元格为空的内容。

我的代码:

Public sTarget As String

Private Sub Worksheet_Change(ByVal Target As Range)

sTarget = Target.Address

Dim MyVal As String
Dim MyToolTipBody As String
Dim MyToolTipHead As String
Dim Rng As String

On Error Resume Next
MyVal = "*" & Range(sTarget).Value
With Worksheets("Sheet2")
On Error Resume Next
    Rng = .Cells.Find(What:=MyVal, LookIn:=xlFormulas, LookAt:=xlWhole).Address
    MyToolTipHead = 'Code for tooltip header
    MyToolTipBody = 'Code for tooltip body
End With

With Range(sTarget).Validation
    .Delete
    .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
    :=xlBetween
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = MyToolTipHead
    .ErrorTitle = ""
    .InputMessage = MyToolTipBody
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = False
End With
End Sub

任何如何实现这一建议?谢谢。

1 个答案:

答案 0 :(得分:1)

我为您提供两个选择:

  1. 使用Worksheet_change事件检测单元格为空(“”),并删除验证以删除工具提示
  2. 使用当前的Select事件,但在IF块中说“如果单元格为空,则删除验证,否则创建工具提示...”,以确保单击“确定”时删除了验证(因此您的工具提示)。空白单元格。

我认为最好的绝对是选项1。我已经包括了选项2,以便您可以了解如何仅对当前事件进行处理,以及如何在逻辑上继续使用Worksheet_change进行工具提示删除。

选项1

添加执行此操作的工作表更改事件:

Private Sub Worksheet_Change(ByVal Target As Range)

   If Target.value = "" Then
      Target.Validation.Delete
   End If

End Sub

这会在您从单元格中删除ID时触发;那么您的Target.Value将等于“”,因此所有验证也将自动删除;拿走工具提示。

意外的结果是,这删除了 all 验证;因此,如果要保留某些其他验证(如数据类型,列表),则必须将其重新添加到单元格中;您可以为此编写一个子例程(例如sub putValidationBack(x_in as Range)..)

选项2

在当前代码周围添加一个IF块:

if Range(sTarget).Value = "" then
   With Range(sTarget).Validation
      .Delete
   End with
Else
  ' Everything after and including your On Error Resume goes here

End if

与上述相同的结果将删除所有验证,因此您需要放回要保留的所有验证。