消息框弹出查询

时间:2015-02-18 11:45:51

标签: excel-vba vba excel

我在excel电子表格中有以下代码,但是如果范围中的查找值是空白单元格,有没有办法阻止弹出消息框?此外,有没有办法让消息框弹出工作表上的psecified区域。在此先感谢您的帮助!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)   
If Not Intersect(Target, Range("facops")) Is Nothing Then     
On Error Resume Next     
MsgBox WorksheetFunction.VLookup(Target.Offset(0, 0), Worksheets("Options").Range("Options"), 3), vbOKOnly, "Option Information"     
On Error GoTo 0   
End If 
End Sub

2 个答案:

答案 0 :(得分:1)

为了防止弹出单元格,您可以在消息框中显示之前检查VLookup的结果:

If Not IsEmpty(WorksheetFunction.VLookup(.......)) Then
   MsgBox ...
End If

消息框无法在屏幕的特定区域显示。但是,您可以创建一个表单,显示带有错误消息的表单,并在屏幕上随时显示此表单。以下代码示例将在Excel的中心显示表单:

frmMessageBox.StartUpPosition = 0
frmMessageBox.Left = Application.Left + Application.Width / 2 - frmMessageBox.Width / 2
frmMessageBox.Top = Application.Top + Application.Height / 2 - frmMessageBox.Height / 2
Load frmMessageBox
frmMessageBox.Show

此示例将显示Excel右下角的表单:

frmMessageBox.Left = Application.Left + Application.Width - frmMessageBox.Width
frmMessageBox.Top = Application.Top + Application.Height - frmMessageBox.Height

答案 1 :(得分:0)

我将查找结果存储在字符串中,并且只有在结果为非空时才显示消息框。你可能想检查vlookup是否真的成功找到了结果,但方法大致相同:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim s As String
  If Not Intersect(Target, Range("facops")) Is Nothing Then
    On Error Resume Next
      s = WorksheetFunction.VLookup(Target.Offset(0, 0), Worksheets("Options").Range("Options"), 3)
      If s <> "" Then
        MsgBox s, vbOKOnly, "Option Information"
      End If
    On Error GoTo 0
  End If
End Sub

定位消息框更加棘手,快速谷歌显示例如Excel先生论坛上的this thread提供了一些代码,可以满足您的要求。我自己没有尝试过,所以不能保证它会起作用,但除非你想创建一个自定义表单或使用输入框(两者都可以定位),这是我最好的建议。