• 締切済み

ACCESS エクスポート ダイアログ ファイル名取得

ACCESS2003で作成したデータをダイアログで指定したファイル名でエクスポートしたいのですが、上手くできません。 ダイアログが開きその指定したフォルダーにあるエクセルファイルを選択すれば、正常にエキスポートできるのですが、 開いたダイアログにファイル名を入力すると、それ以降動かなくなります。 基本的なことが間違っているのでしょうか?? 詳しい方教えてください。下記にコードした内容を書きました。 よろしくお願いします。 Private Sub cmbTransExcel_Click() On Error GoTo Err_cmbTransExcel_Click Dim fileSaveName As Variant Set dlg = Application.FileDialog(msoFileDialogOpen) With dlg .Title = "チェック" .ButtonName = "エキスポート" .InitialFileName = "C:\Program Files\DATA\" .InitialView = msoFileDialogViewList .AllowMultiSelect = False .Filters.Clear .Filters.Add "xls", "*.xls" End With With dlg If .Show = -1 Then For Each vntPath In dlg.SelectedItems strPath = vntPath Next Else Set dlg = Nothing Exit Sub End If End With Set dlg = Nothing Dim strac As String Dim varxls As Variant Dim strmsg As String strac = "Q_チェック" 'Accessファイルを指定します。 varxls = strPath 'エクセルファイルを指定します。 strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _ "出力先は" & varxls & "、 シート名は" & strac & "です。" & _ Chr(13) & "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then '最初のデータをフィールド名として使います。 DoCmd.TransferSpreadsheet acExport, _ acSpreadsheetTypeExcel9, strac, varxls, True MsgBox "EXCELの出力が正常終了しました。", vbInformation, "処理終了" End If Exit_cmbTransExcel_click: Exit Sub Err_cmbTransExcel_Click: MsgBox "EXCELの出力が異常終了しました。", vbCritical, "エラー!" Resume Exit_cmbTransExcel_click End Sub

みんなの回答

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

> Set dlg = Application.FileDialog(msoFileDialogOpen) 「ファイルを開く」 ですから 存在しないファイルは開けませんので、 無いものを指定することはできませんね。 回避策として (1) msoFileDialogSaveAs を使用する。   この場合、フィルタが指定できませんので   拡張子の制御はご自身でやることになります。 (2) FileDialog 以外の方法にする。   お勧めはこちら。 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGetFileName.html 中ほどにある wh_GetFileName 関数 を「クリップボードにコピー」を クリックしてコピー、 標準モジュールに貼り付け。 クリックイベントで wh_GetFileName 関数を呼び出すように変更。 Sub cmbTransExcelClick()   On Error GoTo Err_cmbTransExcel_Click   Const DLG_TITLE = "チェック"   Const OPEN_TITLE = "エキスポート"   Const INITIAL_DIR = "C:\Program Files\DATA"   Const FILTER_ = "xls (*.xls)|*.xls"   Const FILTER_INDEX = 0 ' 0 行目を既定で選択する。   Dim strPath As String   Dim strac As String   Dim varxls As Variant   Dim strmsg As String   ' 保存先ファイル名を取得します。   strPath = wh_GetFileName(, , _         DLG_TITLE, OPEN_TITLE, , INITIAL_DIR, FILTER_, _         FILTER_INDEX, , gfnFlagsOverWritePrompt, _         gfnFOpenSaveAs)   If strPath = "" Then     Exit Sub   End If   strac = "TableList" 'Accessファイルを指定します。   varxls = strPath 'エクセルファイルを指定します。   strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _   "出力先は" & varxls & "、 シート名は" & strac & "です。" & _   Chr(13) & "よろしければ、OKをクリックして下さい。"   If MsgBox(strmsg, vbOKCancel) = vbOK Then     '最初のデータをフィールド名として使います。     DoCmd.TransferSpreadsheet acExport, _     acSpreadsheetTypeExcel9, strac, varxls, True     MsgBox "EXCELの出力が正常終了しました。", vbInformation, "処理終了"   End If Exit_cmbTransExcel_click:   Exit Sub Err_cmbTransExcel_Click:   MsgBox "EXCELの出力が異常終了しました。", vbCritical, "エラー!"   Resume Exit_cmbTransExcel_click End Sub

daikiki
質問者

お礼

早々のご回等ありがとうございます。 ご指摘の通りコードしたら、やりたいと思っていたことができました。 でも、正直内容のほうはよくわかりません。 ご紹介して頂いたサイト等を参考に勉強していきたいと思います。 本当にありがとうございました。

関連するQ&A