• 締切済み

Access VBA 出力先フォルダ名の置換

Access VBAで次のようにQueryとReportを予め用意したフォルダにExportしています。このシステムを別のユーザー「SPD110001」用を作成する時全ての「SPD110000」を「SPD11001」に置き換えていくのは大変です。何か式を作り1ヵ所だけ「SPD11001」に変更すると全ての「SPD110000」を「SPD11001」として解釈し「SPD11001」のフォルダにファイルが入るようにする方法を教えてください。 Public Sub Syuturyoku() DoCmd.OutputTo acOutputQuery, "在約122ソース", acFormatXLS, "c:\SPD\SPD110000\SpdFeedback\" & "在庫と注文残.xls" DoCmd.OutputTo acOutputQuery, "買掛221箱数と金額", acFormatXLS, "c:\SPD\SPD110000\SpdFeedback\" & "買掛金額.xls" DoCmd.OutputTo acOutputQuery, "出庫0133履歴", acFormatXLS, "c:\SPD\SPD110000\SpdFeedback\" & "出庫履歴.xls" DoCmd.OutputTo acOutputQuery, "棚卸0133履歴", acFormatXLS, "c:\SPD\SPD110000\SpdFeedback\" & "棚卸履歴.xls" DoCmd.OutputTo acOutputQuery, "注文書311履歴", acFormatXLS, "c:\SPD\SPD110000\\SpdFeedback\" & "注文書履歴.xls" DoCmd.OutputTo acOutputQuery, "入庫0133履歴", acFormatXLS, "c:\SPD\SPD110000\SpdFeedback\" & "入庫履歴.xls" DoCmd.OutputTo acOutputQuery, "物品121採用物品リスト", acFormatXLS, "c:\SPD\SPD110000\SpdFeedback\" & "物品採用中リスト.xls" DoCmd.OutputTo acOutputQuery, "物品122未採用物品リスト", acFormatXLS, "c:\SPD\SPD110000\SpdFeedback\" & "物品未採用リスト.xls" DoCmd.OutputTo acOutputReport, "ラベル スタッフ111", acFormatPDF, "c:\SPD\SPD110000\SpdFeedback\" & "ラベル スタッフ" & ".pdf" DoCmd.OutputTo acOutputReport, "ラベル 物品121採用物品リスト", acFormatPDF, "c:\SPD\SPD110000\SpdFeedback\" & "ラベル 物品採用中リスト" & ".pdf" DoCmd.OutputTo acOutputReport, "ラベル 連番", acFormatPDF, "c:\SPD\SPD110000\SpdFeedback\" & "ラベル 連番" & ".pdf" Exit Sub

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

フォームにテキストボックスを設定し、その名前を txPath とします。 ボタンのクリックイベントに以下のようにします。 ボタンの名前は実際に合わせて変更してください。 Private Sub コマンド0_Click() Dim strPath As String Dim strPart As String 'テキストボックスに入力がない場合は入力を促し、エクスポートを中止する If IsNull(Me!txPath) Then MsgBox "テキストボックスにフォルダ名が入力されていません" & Chr(13) & "入力をしてください" Exit Sub End If '入力がある場合はエクスポートの実行 strPath = "c:\SPD\" & strPart & "\SpdFeedback\" 'テキストボックスの値をstrPathに代入 strPart = Me!txPath 'エクスポート開始 DoCmd.OutputTo acOutputQuery, "在約122ソース", acFormatXLS, strPath & "在庫と注文残.xls" DoCmd.OutputTo acOutputQuery, "買掛221箱数と金額", acFormatXLS, strPath & "買掛金額.xls" DoCmd.OutputTo acOutputQuery, "出庫0133履歴", acFormatXLS, strPath & "出庫履歴.xls" DoCmd.OutputTo acOutputQuery, "棚卸0133履歴", acFormatXLS, strPath & "棚卸履歴.xls" DoCmd.OutputTo acOutputQuery, "注文書311履歴", acFormatXLS, strPath & "注文書履歴.xls" DoCmd.OutputTo acOutputQuery, "入庫0133履歴", acFormatXLS, strPath & "入庫履歴.xls" DoCmd.OutputTo acOutputQuery, "物品121採用物品リスト", acFormatXLS, strPath & "物品採用中リスト.xls" DoCmd.OutputTo acOutputQuery, "物品122未採用物品リスト", acFormatXLS, strPath & "物品未採用リスト.xls" DoCmd.OutputTo acOutputReport, "ラベル スタッフ111", acFormatPDF, strPath & "ラベル スタッフ" & ".pdf" DoCmd.OutputTo acOutputReport, "ラベル 物品121採用物品リスト", acFormatPDF, strPath & "ラベル 物品採用中リスト" & ".pdf" DoCmd.OutputTo acOutputReport, "ラベル 連番", acFormatPDF, strPath & "ラベル 連番" & ".pdf" MsgBox "エクスポートが完了しました" End Sub なお、フォルダ名やフォルダの位置が間違っている場合の 処理はとくにはしていませんが、その場合はシステムから フォルダが見つからない、というエラー表示が出るので このままにしておきます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

(1) Public Sub Syuturyoku() の中身を少し書き変えると 以下のようになります。 Public Sub Syuturyoku() Dim strPath As String Dim strPart As String strPath = "c:\SPD\" & strPart & "\SpdFeedback\" strPart = "SPD110000" DoCmd.OutputTo acOutputQuery, "在約122ソース", acFormatXLS, strPath & "在庫と注文残.xls" DoCmd.OutputTo acOutputQuery, "買掛221箱数と金額", acFormatXLS, strPath & "買掛金額.xls" DoCmd.OutputTo acOutputQuery, "出庫0133履歴", acFormatXLS, strPath & "出庫履歴.xls" DoCmd.OutputTo acOutputQuery, "棚卸0133履歴", acFormatXLS, strPath & "棚卸履歴.xls" DoCmd.OutputTo acOutputQuery, "注文書311履歴", acFormatXLS, strPath & "注文書履歴.xls" DoCmd.OutputTo acOutputQuery, "入庫0133履歴", acFormatXLS, strPath & "入庫履歴.xls" DoCmd.OutputTo acOutputQuery, "物品121採用物品リスト", acFormatXLS, strPath & "物品採用中リスト.xls" DoCmd.OutputTo acOutputQuery, "物品122未採用物品リスト", acFormatXLS, strPath & "物品未採用リスト.xls" DoCmd.OutputTo acOutputReport, "ラベル スタッフ111", acFormatPDF, strPath & "ラベル スタッフ" & ".pdf" DoCmd.OutputTo acOutputReport, "ラベル 物品121採用物品リスト", acFormatPDF, strPath & "ラベル 物品採用中リスト" & ".pdf" DoCmd.OutputTo acOutputReport, "ラベル 連番", acFormatPDF, strPath & "ラベル 連番" & ".pdf" End Sub そこで、質問の >何か式を作り1ヵ所だけ「SPD11001」に変更すると全ての「SPD110000」を >「SPD11001」として解釈し「SPD11001」のフォルダにファイルが入る >ようにする方法を教えてください。 ということなので、上記の strPart = "SPD110000" を、 strPart = "SPD11001" とすれば、 >何か式を作り1ヵ所だけ「SPD11001」に変更すると全ての「SPD110000」を >「SPD11001」として解釈し「SPD11001」のフォルダにファイルが入る ということになります。 ただし、質問のコードでは「SPD110000」の中の「SpdFeedback」というフォルダに いれることになっているので、回答では、そのまま「SPD11001」の中の 「SpdFeedback」というフォルダにいれることになりますが、これでいいのですか。 あるいは、「SPD11001」というフォルダに直接ファイルを入れることなのでしょうか。 このあたりについて、回答で希望に即していない、ということであれば補足 してください。 なお、 Public Sub Syuturyoku() の最後は、 Exit Sub ではなく、 End Sub だと思いますが、そのあたりは大丈夫でしょうか。 また、一部、 DoCmd.OutputTo acOutputQuery, "注文書311履歴", acFormatXLS, "c:\SPD\SPD110000\\SpdFeedback\" & "注文書履歴.xls" のところで、 "c:\SPD\SPD110000\\SpdFeedback\" のように、 \\ が連続して記入されています。これは多分誤記だと思いますが、確認してください。 以上、分からないことがあれば補足してください。 (2) なお、No1の方も回答されているように一つのテーブルに フィールド名を ファイル名   出力ファイル名 のようにし、 ファイル名        出力ファイル名 在約122ソース      在庫と注文残.xls 買掛221箱数と金額    買掛金額.xls 出庫0133履歴       出庫履歴.xls   ・            ・   ・            ・      以下省略 のようなテーブルを作ると、DoCmd.OutputTo の連発を 避けるコードで可能ですが、このときはDAO、Recordset、Database といったことを持ち出す必要があるので少し敷居は高いです。 必要ならば回答を出してもいいのですが、とりあえず、(1)について 確認してください。   

stone_safe
質問者

お礼

大変ありがとうございます。勉強になります。ベストアンサーだと思うのですが、時間をください。よく考えて更に聞きたいことがあると思うのでよろしくお願いします。

stone_safe
質問者

補足

私の希望通りの回答です。大変助かります。ありがとうございます。 更にお願いです。Accessのフォームのボタンを押すと出力するのですが、このフォームに「SPD110001」と入力しボタンを押すと「strParts」に代入され自動的に SPD110001フォルダのFeedBackフォルダに出力するようにするにはどうすればよいかを教えていただける大変助かります。

回答No.1

パスの一部は(再構成で)変わりうるものとして、定数定義して管理統制しておくべきものでは?? システム環境変数、ってあるでしょ、アレですね。コードの中にこんなものが散らばっていて心配にならない??? Cドライブにしかインストールできないプログラム、そんなの考えられんでしょう、、、

stone_safe
質問者

お礼

すみません。まったくの素人なもので、教えてくれていることがまったく分かりません。(1)再構成で? (2)定数定義とは Dimのこと? (3)システム環境変数・・・・心配にならない? 意味不明 (4)Cドライブに出力するのが間違い? 本当に分からないので教えてください。