1

だから私はVBAをよく理解していると思っていましたが、今ではこのエラーが本当に私を悩ませており、問題を理解できません. これは信じられないほど短いサブルーチンです (モジュールから実行):

Sub test()
    Dim lr
    lr = Sheets(1).Range("a1", Cells(65, 1))
    MsgBox lr.Address
End Sub

何らかの理由で、これは「アプリケーション定義/オブジェクト定義エラー」をスローします

誰でも説明できますか?

編集:これも同じエラーをスローします:

MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address

Edit2:オブジェクトのことについて理解しているので、質問を少し変更しますが、「find」メソッドで何を使用するか。コードは次のとおりです。

Set lookrange = Sheets(1).Range(Cells(2, 1), Cells(200, 1))
Set result = lookrange.Find(what:=searchTerm, lookat:=xlWhole)

この場合、lookrange が問題を引き起こしていることがわかります。

4

3 に答える 3

3

Ok。いくつかの問題があります。

Option Explicit
sub test()
    Dim lr as Range
    set lr = Sheets(1).Range("a1", Cells(65, 1))
    MsgBox lr.Address
End Sub

まず、VBA を初めて使用する人として、Option Explicitほとんどの場合、モジュールの先頭で使用するため、変数のサイズを指定する必要があります。

次に、lrオブジェクト型として宣言しないでください。必ず型として宣言してRangeください。必ずしもこれを行う必要はありませんが、良い習慣です。

set第三に、値などのオブジェクトを割り当てるときに他の人が示したように使用する必要がありRangeます。そうしないと、常にそのエラーが発生します。


質問の 2 番目の部分に進みます。

MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address

これをに変更

With Sheets(1)
    MsgBox .Range(.Range("A1"), .Cells(65, 1)).Address
End With

これを別のシートから実行すると、参照がオンにならないSheet1ため、エラーが発生します。Excel は、現在のワークシートを意味すると見なします。Cells(65,1)Sheet1


第三部

Set lookrange = Sheets(1).Range(Cells(2, 1), Cells(200, 1))
Set result = lookrange.Find(what:=searchTerm, lookat:=xlWhole)

2番目の部分と同じ問題があります。resultまた、 が見つからない場合はエラーが発生する可能性が十分にあり、が失敗したFind場合は上記の 2 番目のステートメント ( の結果)でエラーが発生する可能性があることに注意してください。Find

于 2012-10-03T16:20:34.950 に答える
0

おそらく範囲定義が正しくありません...何を達成しようとしているのかわかりませんが、sheets(1).range(myrange)は範囲オブジェクトを返します。

Sub tetPop()

    Call popAddress(10, 12)
    Call popAddress(14, 21)
    Call popAddress(11, 18)

End Sub

Sub popAddress(ByVal row As Integer, ByVal col As Integer)

    Dim lr As Range

    Set lr = Sheets(1).Range("a1", Cells(row, col))
    MsgBox lr.Address

    ' or better and direct
    MsgBox Sheets(1).Range("a1", Cells(row, col)).Address

End Sub

別のアドレスをポップアップします乾杯

ダニエル

于 2012-10-03T15:26:37.737 に答える
0

ポイントはlr = Sheets(1).Range("a1", Cells(65, 1))、範囲オブジェクトを返すことです。オブジェクト
の 強調。したがって、ダニエルが行ったように、最初に使用する必要があります。 を指定せずにそのオブジェクトを割り当てると、Excel は既定のプロパティである Range.Value を使用します。そのため、割り当てはエラーをスローせず、オブジェクトとして lr を使用するだけです。set
set

于 2012-10-03T15:44:39.620 に答える