• ベストアンサー

Excelにある特定のRange名がある場合のみAccessからエクスポートする方法

Access2003からExcel2003へデータをエクスポートする際に困っていることがあります。 ExcelテンプレートはAとBの2種類あります。ほぼ同じ内容ですが、Rangeの数がBのほうがAより1つ多くなっています。 テンプレートBに1つ追加されているこのRangeの名前をここで"abc"としておきます。 AccessVBAで obSht.Range("abc").Value = rs!abc のようにレコード上のデータをセル値に一つ一つコピーしていきたいのですが、abcというRangeのないテンプレートAにこの式は必要ありません。 そこで、abcというRangeがExcelにある場合のみこの式を追加、ということがしたいのですが、どのように記述すればよいでしょうか。 If [ExcelにabcというRangeがある] Then obSht.Range("abc").Value = rs!abc End If のようにしてみたいのですが。。。 回答どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

"abc" っていう名前で定義されている範囲は確かに Range ではありますが、そもそも "abc" ってのは Workbook.Names コレクションの中の Name オブジェクトです。 これを確認するには、マクロの記録で 1. 適当な範囲を選択 2. そこに適当な名前を定義 を記録してその VBA コードを見てみるとわかります。 ActiveWorkbook.Names.Add Name:="hoge", RefersToR1C1:="=Sheet1!R14C1:R17C2" みたいに記録されます。 ですので対象のワークブックの Names コレクションから "abc" という名前がついた Name オブジェクトを探せばいいんじゃないかな、なんて思いつきます。 Dim aName As Name For Each aName In targetBook.Names  If aName.Name = "abc" Then   MsgBox "発見"   Exit For  End If Next aName みたいな。

bulgarianrose
質問者

お礼

お礼を申し上げるのが送れ大変申し訳ございません。 非常に参考になりました。ご提示いただいたコードを 多少いじって適用してみたところ、要求どおりに 動作しました。 本当にありがとうございました。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

> obSht.Range("abc").Value = rs!abc で、名前 abc が存在しないと実行時エラーが発生するはずですから、それを 利用します。名前 abc が存在すれは代入されるし、存在しなければ素通りす ると思いますが、確認はしてません。 On Error Resume Next obSht.Range("abc").Value = rs!abc On Error Goto 0

bulgarianrose
質問者

お礼

エラーを発生させて素通りさせる方法について、大変勉強になりました。お礼が遅れ大変申し訳ございません。ありがとうございました。

関連するQ&A