VBA中的奇怪错误消息,不应该出现

时间:2012-09-09 19:12:32

标签: vba

我正在尝试编写一个简单的VBA代码,以根据搜索字符串(mykey)在预定义的Range和Select Case中查找特定文本。

Dim min As Integer 
Dim R As Range
Dim month As String

Worksheets("MyWorkSheet").Activate

If mykey.Text <> "" Then   'mykey being a combobox

Select Case mykey.Text
Case Is = "0 deg"
Worksheets("MyWorkSheet").Range("B4:B39").Find(mykey.Text).Activate
Case Is = "30 deg"
Worksheets("MyWorkSheet").Range("B44:B79").Find(mykey.Text).Activate
Case Is = "45 deg"
Worksheets("MyWorkSheet").Range("B84:B119").Find(topothesia.Text).Activate
Case Is = "60 deg"
Worksheets("MyWorkSheet").Range("B124:B159").Find(mykey.Text).Activate
Case Is = "90 deg"
Worksheets("MyWorkSheet").Range("B164:B199").Find(mykey.Text).Activate
End Select

偶尔!当我运行代码时,我得到一个错误信息说: 对象变量或With Block Variable未设置。,在处理所选deg的Case语句上,但每次运行Code时都没有出现。

它是它的6/10倍。

为什么会发生这种奇怪的事情?

2 个答案:

答案 0 :(得分:0)

试试这个(不是真的回答,但是发表评论的时间太长,抱歉):

Dim rng As Range
Set rng = Worksheets("MyWorkSheet").Range("B4:B39").Find(mykey.Text)
If Not rng Is Nothing Then
    rng.Activate
Else
    MsgBox "Nothing found"
End If

使其适合所有情况(只有一个声明,在每种情况下放置其余声明,并且每次可能添加不同的错误消息)。如果在没有收到消息的消息框的情况下仍然会发生这种情况,那么您应该回来告诉我们您发现的内容。

答案 1 :(得分:0)

您的查找方法实际上并未找到正确的结果。

如果您使用Find并且找到匹配项,那么如果您尝试对结果执行某些操作(例如您的Activate),则会返回该错误 - 这可能是因为文本框中的数据与B列中的内容不匹配。

尝试这样的事情:

Dim min As Integer 
Dim R As Range
Dim month As String

Worksheets("MyWorkSheet").Activate
dim result as Range
If mykey.Text <> "" Then   'mykey being a combobox

Select Case mykey.Text
Case Is = "0 deg"
    set result = Worksheets("MyWorkSheet").Range("B4:B39").Find(mykey.Text)
Case Is = "30 deg"
    set result = Worksheets("MyWorkSheet").Range("B44:B79").Find(mykey.Text)
Case Is = "45 deg"
    set result = Worksheets("MyWorkSheet").Range("B84:B119").Find(topothesia.Text)
Case Is = "60 deg"
    set result = Worksheets("MyWorkSheet").Range("B124:B159").Find(mykey.Text)
Case Is = "90 deg"
    set result = Worksheets("MyWorkSheet").Range("B164:B199").Find(mykey.Text)
End Select

'notify on a lack of result
if (result is nothing) then
    msgbox( "No successful match found for " & Is & "!")
end if

这有助于隔离您的问题。您可能必须以某种方式验证mykeytopothesia文本框在您的代码中实际上是否匹配,或进行一些验证/错误检查(我无法为您进行验证,因为我不知道您的电子表格是什么样的,所以我添加了错误检查:))。