1

我正在尝试编写一个简单的 VBA 代码来查找预定义范围中的特定文本,并根据搜索字符串(mykey)选择大小写。

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

偶尔!当我运行代码时,我在处理所选 deg 的 Case 语句上收到一条错误消息,提示:对象变量或未设置块变量,但每次运行代码时都不会出现。

6/10 倍。

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

4

2 回答 2

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

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

于 2012-09-10T01:58:42.870 回答
0

您的 find 方法实际上并没有找到正确的结果。

如果您使用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文本框实际上在您的代码中是否匹配或进行一些验证/错误检查(我无法为您进行验证,因为我不知道您的电子表格是什么样的,所以我添加了错误检查:) )。

于 2012-09-10T11:58:33.523 回答