繁体   English   中英

消息框弹出查询

[英]Message box popup query

我在excel电子表格中有以下代码,但是如果范围内的查找值为空白单元格,是否有一种方法可以防止消息框弹出? 另外,有没有一种方法可以使消息框在工作表上的缩窄区域中弹出。 在此先感谢您的帮助!

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

为了防止弹出空白单元格,您可以先检查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

我会将查找结果存储在字符串中,并且仅在结果为非空时才显示消息框。 您可能想检查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

放置消息框更加棘手,例如,快速的Google会在Excel先生论坛上显示该线程该线程提供了一些代码来满足您的要求。 我还没有亲自尝试过,因此无法保证它会正常工作,但是除非您要创建自定义表单或使用输入框(都可以放置两者),否则这是我最好的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM