お世話になっております。
表題の件について質問致します。
Excelでもともと作成していたテンプレートですが、データ管理の点からAccessに移行したほうが使いやすいと考え
Accessでデータを管理することになりました。
しかし、データの管理はAccessでいいのですがテンプレートはAccessだと扱いずらく、色々と加工もしたいのでExcelで行いたいです。
そこで色々調べた結果こちらのサイト↓
AccessからExcelのテンプレートシートを利用するプログラム例
が一番近いのかなと思いました。
ここで質問ですが、私の場合は種別フィールドの入力されているデータごとにExcelのファイルを出力したいです。
例えば
ID 氏名 種別 ・・・
1 ○○ 特別会員
2 ○△ 通常会員
3 ○✖ 通常会員
4 ○□ 特別会員
5 ✖□ ビジター
とあった場合Excelファイルは特別会員のExcelファイル、通常会員のExcelファイル、ビジターのExcelファイル3つを出力したいです。
シートを分けるのではなく、ファイルを分けるということです。
分かりずらく申し訳ありませんが、こちらの方法がわかる方教えていただければと思います。
【3/11追記】
上の質問と別件になりますが、
URL先のコードですが実行するとエラーが出てしまいました。
'テンプレートの保存先フォルダ
Const cstrTemplateDir As String = "C:\テスト\"
'テンプレートのファイル名
Const cstrTemplateBook As String = "受注伝票テンプレート.xlsx"
'データが代入されたファイルの保存先フォルダ
Const cstrSaveBookDir As String = "C:\テスト\"
ここで指定したファイルパスが間違っていると出ます。
実行時エラーは1004です。
しかし、確かにここに格納されていますし、Shift+右クリックでパスのコピーをしてそのまま貼り付けています。
そしてデバッグを押すと、
'テンプレートファイルを開く
.Workbooks.Open cstrTemplateDir & cstrTemplateBook
ここが黄色くなります。
この原因がわかる方いましたら教えて頂きたいです。
質問がざっくりなので回答もざっくりになりますが
「共通部分はひとまとめに、処理を変えたいところは変数にしてプログラム内で任意に変更できるように」します
リンク先のコードを参考にするなら
この部分が変数にする(固定では困る)部分ですかね
例えば
のように変更して
と、出力処理を3回実行してやればファイルを3つ作ることができます
回答いただきありがとうございます。
こちらですが、特別会員、通常会員、ビジターの3つのクエリを作成するということでしょうか?
また、質問で提示したURL先のコードですが実行するとエラーが出てしまいました。
ここで指定したファイルパスが間違っていると出ます。
実行時エラーは1004です。
しかし、確かにここに格納されていますし、Shift+右クリックでパスのコピーをしてそのまま貼り付けています。
そしてデバッグを押すと、
ここが黄色くなります。
原因が分からず困っています・・・
もしこの原因がわかるようでしたら教えて頂けるとありがたいです。
重ねての質問になり申し訳ありません。
元の質問にも追記しました。
考え方として、3つファイルを出力したいのなら3回出力処理をすればいいですよ。という内容ですね(質問がざっくりだったので)
「種別」が決め打ちできる程度なら決め打ちで作成してもいいですし、出力内容を自動認識させたいならそれはそれでやり方もあります。参考コードだけでやり取りするのは齟齬の元なのでまずは1ファイルでもいいので出力できるコードができてからですね
エラーが出ている部分は特別な処理をしていないよくあるEXCELファイルを開くだけなので原因はよくわかりません
のように直接記述すると動作しますか?
として、エラーが出る直前で
cstrTemplateDir & cstrTemplateBook
の内容を確認すると実際に存在するファイルパスになっていますか?回答ありがとうございます。
ファイルの件提示してい頂いた内容をもとに考えてみたいと思います。
ありがとうございました。
エラーの件ですが、
こちらに書き換えたところエラーが移り変わりました。
次はこれにエラーが出て、実行時エラー9「インデックスが有効範囲にありません」と出ます、、
やはりファイルが悪さしてるのでしょうか?
ちなみにシート名も間違いがないようコピーして貼り付けています、、
ファイル自体が悪さをしているというのはあまり経験がありません。コード自体は単純な処理なので、パス、ファイル名の作り方や単純なタイプミスをまず疑ってしまいます
コピー処理の前後を次のようにするとどうなりますか?