|
オブジェクトエラーについて
|
ひでお
|
|
データNo:149 |
2008年06月04日(Wed) 12:37 |
|
|
|
|
|
Dim sRange As Range Dim fRange As Range Workbooks("T-1.xls").Activate
Sheets("@").Select
Set sRange = Workbooks("S-1").Sheets("S1").Range("B2").CurrentRegion.Columns(2)
Set fRange = sRange.Find(Range("B1").Value)
If fRange = "" Then
Range("AD1").Value = fRange.Offset(, -1).Value
fRange.Offset(, 14).Value = Range("D11").Value
fRange.Offset(, 13).Value = Range("D10").Value
End If
Set sRange = Nothing
Set fRange = Nothing
End Sub 上記プログラムを実行すると、オブジェクト変数の登録 、もしくはWITHブロックの変数登録が必要とのエラーメッセージが表示されます。If fRange = "" Then でとまってしまいます。対処方法を教えていただければ 幸いです。自宅のパソコンでは動作確認できましたが、会社のパソコンで実行すると上記エラーです。
|
|
 |
Re:オブジェクトエラーについて
|
だるま
|
 |
データNo:150
|
2008年06月04日(Wed) 23:39
|
|
|
|
だるまです。
環境を教えてください。 具体的にはプログラムの動作に必要なファイル(エクセルファイル)とその中にどのようなデータがあればよいのか、それから、OSとExcelのバージョンを教えてください。
で、ちょっとソースを見ましたので、わかる範囲で回答します。
> オブジェクト変数の登録 > 、もしくはWITHブロックの変数登録が必要とのエ> ラーメッセージが表示されます。 ということですが、これは91番のエラーであると思います。
fRange = "" ですが、この記述はよくないです。 fRangeはオブジェクト型であるのに対し""はString型です。 もし、sRange.Findの結果が失敗した(見つからなかった)場合に、If文の中を実行するようにしようとしているのであれば、 If fRange Is Nothing Then としてください。
|
|
 |
Re:オブジェクトエラーについて
|
ひでお
|
|
データNo:151
|
2008年06月05日(Thu) 03:40
|
|
|
|
さっそくの回答ありがとうございます。 OSはXPでExcelは2003を使用しています。 エクセルファイルの中身は数字と文字(漢字)yy/mm/ddの日付程度の内容です。 一覧表で:ファイル名:S-1 A列 B列 C列 D列(商品番号) 1 5/1 06-6666-1111 555555 2 5/2 06-7777-9999 666666 3
申込書 ファイル名:T-1 通番(AD1) 3 電話番号(D10)06-8888-0000 商品番号(D11)777777
結果 A列 B列 C列 D列(商品番号) 1 5/1 06-6666-1111 555555 2 5/2 06-7777-9999 666666 3 5/3 06-8888-0000 777777 (B列で空白となったとき通番3を取得し電話番号、商品 番号を貼り付ける。) If fRange Is Nothing Thenに変えると今度は変化なしです。
|
|
 |
Re:オブジェクトエラーについて
|
だるま
|
 |
データNo:152
|
2008年06月05日(Thu) 22:46
|
|
|
|
プログラムがよくわからないです…。自宅でうまくいったというのは本当でしょうか?環境(特にデータ)が違っていたということは無いでしょうか? (OSやエクセルのバージョンに依存するようなことはないと思います)
> 上記プログラムを実行すると、オブジェクト変数の > 登録、もしくはWITHブロックの変数登録が必要 > とのエラーメッセージが表示されます。 > If fRange = "" Then > でとまってしまいます。 fRangeがNothingであるためだと思います。 その理由は Set fRange = sRange.Find(Range("B1").Value) のFindメソッドが失敗(条件に合うセルが見つからない)したためです。
> (B列で空白となったとき まず、ここから考えましょう。 B列で空白となったときですので、B列で空白のセルを探せばよいことになります。
sRangeにはB列全部 fRangeにはB列のうち空白のセル としたいのであれば、 Set sRange = Workbooks("S-1").Sheets("S1").Columns("B:B") Set fRange = sRange.SpecialCells(xlCellTypeBlanks) という感じでどうでしょうか? ※このとき空白セルが2箇所以上(例えばB1とB3,B4)の場合fRangeはそのセル範囲すべて("B1,B3:B4")を指し示します。先頭アドレスを取得したい場合はさらに Set fRange = fRange.Cells(1, 1) としてください。 B列に空白セルが無い場合はSpecialCellsにて1004番の実行時エラーが発生します。(On Error ステートメントを使用して実行時エラーを捕まえてください。)
この後、データをコピーするコードを書いてあげればよいと思います。
|
|
 |
Re:オブジェクトエラーについて
|
ひでお
|
|
データNo:153
|
2008年06月05日(Thu) 23:19
|
|
|
|
本当に親切にありがとうございました。 僕にとっては財産となりました。
|
|