アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

のようにしてみたいのですが。。。

回答どうぞよろしくお願いいたします。

A 回答 (2件)

"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

みたいな。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/19 16:50

> obSht.Range("abc").Value = rs!abc



で、名前 abc が存在しないと実行時エラーが発生するはずですから、それを
利用します。名前 abc が存在すれは代入されるし、存在しなければ素通りす
ると思いますが、確認はしてません。

On Error Resume Next
obSht.Range("abc").Value = rs!abc
On Error Goto 0
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/19 16:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!