• 締切済み

他ブックへの書き込みについて

MyR2=ThisWorkbook・・・・のところでデバックします。エラーメッセージは、オブジェクト変数または With ブロック変数が設定されていません。(Error 91) 解決方法ご教示下さい。 Sub 報告() Dim MyR1 As Long Dim MyR2 As Long MyR1 = 4 For i = 1 To 14 If Cells(MyR1, 5).Value <> "" Then MyR2 = ThisWorkbook.Sheets("共用部点検報告書").Columns("A").Find(Cells(MyR1, 5).Value, _ lookat:=xlWhole, MatchCase:=True).Row ThisWorkbook.Sheets("報告書").Cells(MyR2, 6).Value = Cells(MyR1, 4).Value End If MyR = MyR + 3 Next ThisWorkbook.Sheets("報告書").Activate End Sub

みんなの回答

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

ANo.2です。 ふとタイトルの「他ブックへの書き込みについて」を見て気になったのですが、 シート指定がないRangeやCellは標準モジュールにある場合はActiveなシート、シートのモジュール部にある場合はそのシートが対象になります。 なので、 MyR2 = ThisWorkbook.Sheets("共用部点検報告書").Columns("A").Find(Cells(MyR1, 5).Value・・・ は、標準モジュール部にある場合は「このVBAがあるBookの"共用部点検報告書"というシートのA列から、現在アクティブ(表示されている)シート(別ブックならそのブックのアクティブシート)のCells(MyR1, 5)の値を探す事になります。 また、シートのモジュール部にある場合は「このVBAがあるBookの"共用部点検報告書"というシートのA列から、このVBAがあるシートのCells(MyR1, 5)の値を探す事になります。 そこらへんは大丈夫ですか? If Cells(MyR1, 5).Value <> "" Then とか ThisWorkbook.Sheets("報告書").Cells(MyR2, 6).Value = Cells(MyR1, 4).Value とかも同様だけど。 最後のは片方だけ指定してもだめで両方指定が必要。 あまりに煩雑になる場合は変数かWithを使う方がいいと思います。

814r
質問者

お礼

ご指摘いただいた点を修正しながら試行錯誤したのですが、どうしても動きませんでしたので、For Loopでワンセルごとチェックする方法に変更しました。FINDはこれから勉強して行きたいと思っています。 お礼が遅くなって失礼しました。

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

.Findの結果がNothing(見つからなかった)場合にエラーになるのでは? MyR2 = ThisWorkbook・・・ を Dim rng As Range Set rng = ThisWorkbook.Sheets("共用部点検報告書").Columns("A").Find(Cells(MyR1, 5).Value, lookat:=xlWhole, MatchCase:=True) If rng Is Nothing Then MsgBox "見つかりません" Exit Sub End If にしてみて"見つかりません"が出るようなら対応が必要です。 また MyR = MyR + 3 は MyR1 = MyR1 + 3 の間違いでは?

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

過去ログです。参考にならないでしょうか。 複数該当の検索処理でエラーになる(オブジェクト変数または With ブロック変数が設定されていません) http://oshiete1.goo.ne.jp/qa3960441.html

関連するQ&A