当用户将鼠标悬停在单元格上时显示数据验证标准

时间:2016-06-13 09:12:02

标签: excel excel-vba vba

我有以下Excel表格:

singleton

用户应在B列中按每个产品定价。价格根据C栏中的值进行限制。在数据验证菜单中,我使用了“十进制”标准,并将> = C2应用于每个值列B.此限制正常。但是,稍后用户将看不到C列,因此我还想要包含一个小窗口,当用户将鼠标悬停在B列中的单元格上时,该窗口显示C列中的值作为建议。

您是否知道Excel中的数据验证菜单是否可能,或者是否有可以执行此操作的宏?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

据我所知,数据验证菜单中没有选项。

但是,当价格列中的值发生更改时,您可以使用AddComment的{​​{1}}方法来完成此操作。您可以使用Range事件来处理更改,然后应用注释:

Worksheet_Change

效果如下:

enter image description here

答案 1 :(得分:2)

据我所知,你有两个选项可以在一个小窗口中显示一个值:

(1)您使用@Robin建议的Worksheet_ChangeWorksheet_SelectionChange事件。然而,有几个不同的"子选项"可用此解决方案:

  1. 您可以使用其他答案或
  2. 中提出的comments
  3. 您可以创建一个小型自定义UserForm来显示您希望显示的任何信息。这种变化的好处在于,您可以根据自己的喜好自定义表单,并显示您想要的任何内容。以下显示了可以通过这种方式实现的一小部分样本。请注意,表单会自动显示,消失,并使用光标调整其位置。
  4. enter image description here

    (2)您可以使用帖子中最初要求的Data Validation。数据验证不仅允许您限制您希望允许的值。但您也可以指定输入消息并自定义错误消息(如果输入的值不正确)。下图为您提供了该解决方案的直观概念。

    enter image description here

    以下代码段可以帮助您自动设置所有产品的所有价格验证公式。

    Option Explicit
    
    Sub AutomaticallySetDataValidations()
    
    Dim lngRow As Long
    Dim strProduct As String
    Dim dblMinimumPrice As Double
    
    With ThisWorkbook.Worksheets(1)
        For lngRow = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
            strProduct = .Cells(lngRow, 1).Value2
            dblMinimumPrice = IIf(IsNumeric(.Cells(lngRow, 3).Value2), CDbl(.Cells(lngRow, 3).Value2), 0)
            If dblMinimumPrice > 0 Then
                With .Cells(lngRow, "B").Validation
                    .Delete
                    .Add Type:=xlValidateDecimal, AlertStyle:=xlValidAlertStop, Operator _
                        :=xlGreaterEqual, Formula1:=dblMinimumPrice
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = "Price - " & strProduct
                    .ErrorTitle = "Invalid price!"
                    .InputMessage = "Please enter a new price for " & strProduct & _
                        ". The minimum admissable price for this product is " & Format(dblMinimumPrice, "$#,##0") & "."
                    .ErrorMessage = "The price you entered is not acceptable. Please enter a new value."
                    .ShowInput = True
                    .ShowError = True
                End With
            Else
                Debug.Print "No data validation set for row " & lngRow & " since there is no valid minimum price."
            End If
        Next lngRow
    End With
    
    End Sub