我在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
答案 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提供了一些代码,可以满足您的要求。我自己没有尝试过,所以不能保证它会起作用,但除非你想创建一个自定义表单或使用输入框(两者都可以定位),这是我最好的建议。