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

これをすべてのケースに適合するように調整します (宣言は 1 つだけで、残りは各ケースに入れ、毎回異なるエラー メッセージを追加することもできます)。メッセージが入ったメッセージ ボックスが表示されずにこれが引き続き発生する場合は、戻ってきて、見つけた内容について詳しく教えてください。

于 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

これは、問題を特定するのに役立ちます。mykeyとテキストボックスが実際にコードに一致していることを何らかの形で確認するか、topothesia検証/エラーチェックを行う必要があるかもしれません (スプレッドシートがどのように見えるかわからないため、検証を行うことはできません。エラーチェックを追加しました:) )。

于 2012-09-10T11:58:33.523 に答える