Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
クエリでデータがないと
投稿日時: 19/06/08 16:00:07
投稿者: wabisuke

 データを転送するフォームから
開始年月日と終了年月日を入力し、
データを転送のボタンをクリックして
クエリで抽出したデータをエクセルに転送しているのですが
 
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel14, _
                             "データの転送", "C:\Users\Eigyou\Desktop\成績一覧.xlsm"
 
 データがない時、
既存のワークシート[データの転送]に開始年月日や終了年月日でもない
あらぬデータが入力されていて
 
 かつ既存のワークシートのコピー[データの転送1]ができて
それが本来のデータがないというワークシートになってます。
 既存のワークシート[データの転送]にデータがないように
フィールドー名だけで上書きしてほしいのですが。
 

回答
投稿日時: 19/06/10 10:15:07
投稿者: Suzu

TransferSpreadSheet の 既存ファイルへの出力の場合、
既存ファイル上に、10レコードを持っていて
Tansfer〜 にて出力しようとする レコードが 例えば3件のとき
 
ワークシート上へは、10件のデータが残ります。
・新たに出力した 3件
・すでに存在した10件中の4件目以降
 
つまり、レコード分しか上書きされません。
 
0件のファイルをテンプレートとして準備し
1.既存ファイル削除
2.テンプレートファイルを出力先ファイル名にてコピー
3.エクスポート
の様な流れとしましょう。

投稿日時: 19/06/10 21:06:01
投稿者: wabisuke

 クエリで抽出したデータはエクセルに転送したら
上書きされてると思います。
 10個残っていた先月のデータに今月が5個だったら
5個になっていたような、、勘違いかな?
  Access 2007から今までそれで集計はあっていた
ように思います。
 
 今回抽出レコードのないケースが出来てしまい
それでやるとゼロだったクエリの転送だけ
エクセルに上書きしないでシート名1として
レコードのないワークシートが出来てしまってました。
今後はゼロのケースが頻発するので厄介です。
 
  クエリでデータがなかったら、転送しない。データがあれば
転送するという仕組みにしてもう一度試してみます。
 
 言われたように既存のデータが残るのかも試してみます。
これで教えていただいたように作り直さないといけない
ことになれば、教えていただいた流れで作り直します。。

回答
投稿日時: 19/06/11 14:14:46
投稿者: sk

引用:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel14, _
                             "データの転送", "C:\Users\Eigyou\Desktop\成績一覧.xlsm"

エクスポート先のブックに[データの転送]という名前で定義されたセル範囲
(≠ワークシート)が存在しているかどうかを確認するのが先。
 
引用:
既存のワークシート[データの転送]に開始年月日や終了年月日でもない
あらぬデータが入力されていて
かつ既存のワークシートのコピー[データの転送1]ができて
それが本来のデータがないというワークシートになってます。

そのブックに[データの転送]という名前のワークシートが存在し、
かつ[データの転送]という名前付きセル範囲が定義されていなければ
そういう結果になるはず。

投稿日時: 19/06/14 03:31:48
投稿者: wabisuke

今までは、あのコードで転送先のエクセルファイル名さえ、
書き込めば、ブックにシートを作り、データを上書してくれてました。
 
[データの転送]という名前で定義されたセル範囲 が
ないと出来ないのか是非確かめたいです。
 
早速セルに名前をつけてみます。
 
ただ、、
なんかいろいろしてるうちに
インストールできないISAMドライバがとか
のエラーがでてエクセルがつがらなくなってます。

投稿日時: 19/06/15 09:37:47
投稿者: wabisuke

 skさん、ありがとうございました。
おっしゃるとおりでした。
 
 
”そのブックに[データの転送]という名前のワークシートが存在し、
かつ[データの転送]という名前付きセル範囲が定義されていなければ
 そういう結果になるはず。”
 
 名前を定義すると可能でした。
以前の2007で作ったときには名前を定義した記憶がなかったのですが
シートを見ると名前が定義されていました。
 今年から抽出することになった新しいワークシートの
範囲に名前をつけるとできました。
 
 ありがとうございました。
後はIsam ドライバーのエラーが出てるPCの