0

次の VBA コードを使用して、Excel スプレッドシートのヘッダーの列番号を特定しようとしています。

Dim aCell As Range
Set aCell = Sheet1.Rows(1).Find(What:="ContractDescription", LookIn:=xlValues, _
 LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
 MatchCase:=False, SearchFormat:=False)

次に、次のコード行でエラーが発生します。

MsgBox (aCell.Column)

実行時エラー 91:「オブジェクト変数または With ブロック変数が設定されていません」が表示されます。

インターネットで読んだ投稿によると、このエラーは、ある型の値を別の型として宣言されている変数に代入しようとすると発生します。

aCellただし、は範囲オブジェクトであるため、ここでこのエラーが発生する理由を理解しようとしてaCell.ColumnRange("A1").Columnます1

では、ここで何が問題を引き起こしているのでしょうか?

4

2 に答える 2

3

失敗した場合.Findは返され、に設定さaCellれるNothingため、インスタンスメンバーにアクセスしようとする.Columnと、そのエラーが発生します。

これを防ぐために;

if not aCell Is Nothing
  MsgBox aCell.Column
else
  MsgBox "not found"
end if 
于 2013-10-07T12:31:44.037 に答える
2

このエラーが発生する理由aCellは、null である (一致するものが見つからない) ためです。Findメソッド (または同等の、範囲が である場合)からの範囲を使用する前Nothingに、次の行に条件を設定する必要があります。

If (Not aCell Is Nothing) Then
  MsgBox aCell.Column
End If
于 2013-10-07T12:31:28.917 に答える