- ベストアンサー
ACCESS2003のVBAで改修依頼管理ツールを作成しています
- ACCESS2003のVBAを使用して改修依頼管理ツールを作成中です。
- EXCEL出力時にエラーが発生し、オブジェクト変数またはWithブロック変数が設定されていませんと表示されます。
- 問題の原因がわからず困っています。同じ処理を続けるとエラーが出るため、EXCELアプリケーションの参照が曖昧になっているのかもしれません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
大きく4箇所の修正 ↓(1) >.Workbooks.Add を Set xlBook = .Workbooks.Add へ ↓(2) >ActiveWorkbook.Sheets("Sheet1").Name = "改修依頼一覧" 'エラー発生箇所 を Set xlSheet = xlBook.Sheets("Sheet1") xlSheet.Name = "改修依頼一覧" へ ↓(3) >rs.Open QName, cn, adOpenKeyset, adLockReadOnly >ActiveWorkbook.Sheets("改修依頼一覧").Range("A2").CopyFromRecordset rs を rs.CursorLocation = adUseClient rs.Open QName, cn xlSheet.Range("A2").CopyFromRecordset rs へ ↓(4) >Worksheets("改修依頼一覧").Cells(1, 1).Select を xlSheet.Cells(1, 1).Select へ
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
訂正です。 後半の「さらには」以下は忘れてください。 .Workbooks.Add を見ていながらすっかり見落としていました。 新規Bookを開いているのでシート名の変更は できますね。
- piroin654
- ベストアンサー率75% (692/917)
オブジェクトが設定されていない。 >ActiveWorkbook.Sheets("Sheet1").Name = "改修依頼一覧" を xlApp.ActiveWorkbook.Sheets("Sheet1").Name = "改修依頼一覧" に変更・・・だけど、 ActiveWorkbook.Sheets("Sheet1").Name = "改修依頼一覧" を With xlApp .Workbooks.Add .Visible = True End With の .Workbooks.Add の下に同じように設定すればいいのでは。 さらには、Sheet1→改修依頼一覧 の変換が行われた後、逆の 改修依頼一覧→Sheet1の変換がされていないと、二度目にこの プロシージャの中に入ったときはSheet1は存在しない、 ということで、該当するところでエラーが生じる。 つまるところ、最初からExcelのSheet1を"改修依頼一覧" にしておき、 .Workbooks.Add .ActiveWorkbook.Sheets("Sheet1").Name = "改修依頼一覧" を除くか、 または、このプロシージャを抜けるときに改修依頼一覧→Sheet1 の変換をしてプロシージャを抜けるかのどちらかである。 新規Book作成からはいっているのではないので、最初から シート名を設定しておき、除くようにしておいたほうが コードがすっきりしていいのでは、思いますが。 と、このような感じですが。いかがでしょうか。
お礼
ご回答ありがとうございます。 大変参考になりました。 やはり参照が曖昧になっていたのですね。
お礼
ご回答ありがとうございます。 上記の修正で無事動くプログラムになりました。 またなにかあればお願いします。