Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1331 / 2272 ツリー ←次へ | 前へ→

【7658】データのエクスポート koike 06/4/6(木) 16:14 質問[未読]
【7660】Re:データのエクスポート 小僧 06/4/6(木) 16:48 回答[未読]
【7665】Re:データのエクスポート koike 06/4/7(金) 11:42 質問[未読]
【7666】Re:データのエクスポート 小僧 06/4/7(金) 13:44 回答[未読]

【7658】データのエクスポート
質問  koike  - 06/4/6(木) 16:14 -

引用なし
パスワード
   下記コードにて、データをエクスポートするように設定しているのですが、
自動的に開いているPCのマイドキュメントに保存されます。
ここまではなんとか出来たのですが、
出来れば通常使用するような「名前をつけて保存」の時に表示されるようなボックスが表示できればと思います。
方法はありますでしょうか?
ご教授頂きたく、よろしくお願いします。

また、前述したマイドキュメントに自動的に保存されるのは何故なのでしょうか?規定の保存先ということでしょうか?

Private Sub 保存ボタン_Click()
  yesno = MsgBox("データをエクスポートします。", vbYesNo + vbInformation)
  If yesno = vbYes Then
      If Dir("名簿.xls") = "名簿.xls" Then
        yesno = MsgBox("既に同じ名前のファイルが存在しています。上書きしてもよろしいですか?", vbYesNo + vbExclamation)
          If yesno = vbYes Then
          DoCmd.TransferSpreadsheet acExport, 8, "名簿クエリ", "名簿.xls", False
          End If
      Else
        DoCmd.TransferSpreadsheet acExport, 8, "名簿クエリ", "名簿.xls", False
      End If
  End If
End Sub

【7660】Re:データのエクスポート
回答  小僧  - 06/4/6(木) 16:48 -

引用なし
パスワード
   ▼koike さん:
こんにちは。

>また、前述したマイドキュメントに自動的に保存されるのは何故なのでしょうか?
>規定の保存先ということでしょうか?

コードの所々に記載されている Excel ファイル名をフルパスにしてみましょう。

>      If Dir("名簿.xls") = "名簿.xls" Then
→      If Dir("C:\名簿.xls") = "名簿.xls" Then

フルパス表記でしたらお好きな所に保存できると思います。
(Dir の返り値だけはファイル名になります)

>出来れば通常使用するような「名前をつけて保存」の時に表示されるような
>ボックスが表示できればと思います。

上記のようなボックスを「ダイアログボックス」と呼びます。
Web検索で調べると色々と出てくると思いますが、
Accessのバージョンによって使用できるもの、使用できないものがあります。


検索しても解らなく、またご質問される際には
OS と Access のバージョンを明記して下さいね。

【7665】Re:データのエクスポート
質問  koike  - 06/4/7(金) 11:42 -

引用なし
パスワード
   小僧さん、

有難うございます。
ダイアログボックスっていうんですね!!
検索したんですが、なかなかコレというものが見つかりませんでした。
お手数ですが、お教えいただけますでしょうか?
当方、以下の環境です。
Windows2000 Professional SP4
Access 2000

よろしくお願いします。

【7666】Re:データのエクスポート
回答  小僧  - 06/4/7(金) 13:44 -

引用なし
パスワード
   ▼koike さん:
こんにちは。

>当方、以下の環境です。
>Windows2000 Professional SP4
>Access 2000

Ac2002より、FileDialogオブジェクトがサポートされて
ダイアログ表示を実装しやすくなったのですが、Ac2000ですと残念ながら使用できません。

そこで下記の様な方法が考えられます。

1.WindowsAPIを使う
 こちらは Windows の機能を Access から呼び出すものです。
 Accessのバージョンに左右されにくいのですが、
 API特有の表現が出てくるので慣れるまでに時間が掛かるかもしれません。

'----------------------------------------------------------------------
Option Compare Database
Option Explicit

Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
  Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
  lStructSize    As Long  '構造体のサイズ
  hwndOwner     As Long  '親ウィンドウのハンドル
  hInstance     As Long  'モジュールのインスタンスハンドル
  lpstrFilter    As String 'VBのファイルパターン
  lpstrCustomFilter As String 'カスタムフィルタ
  nMaxCustFilter  As Long  '同バイト数
  nFilterIndex   As Long  'フィルタのインデックス
  lpstrFile     As String 'フルパス名を受取るバッファ
  nMaxFile     As Long  '同バイト数
  lpstrFileTitle  As String 'ファイル名を受取るバッファ
  nMaxFileTitle   As Long  '同バイト数
  lpstrInitialDir  As String '初期ディレクトリ名
  lpstrTitle    As String 'ダイアログボックスのキャプションタイトル
  flags       As Long  '動作を指定する定数の組合せ
  nFileOffset    As Integer 'フルパス中のファイル名までのオフセット
  nFileExtension  As Integer '同 拡張子までのオフセット
  lpstrDefExt    As String 'デフォルトの拡張子
  lCustData     As Long  'フックプロシージャに渡すデータ
  lpfnHook     As Long  'フックプロシージャOFNHookprocへのポインタ
  lpTemplateName  As String 'テンプレートリソース名
End Type

Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_EXPLORER = &H80000

'----------------------------------------------------------------------

Private Sub コマンドボタン_Click()
Dim tOpenFileName As OPENFILENAME
Dim lngRet    As Long
Dim strFileName  As String
  
  With tOpenFileName
    .lStructSize = Len(tOpenFileName)
    .hwndOwner = Me.Hwnd
    .lpstrFilter = "Excelファイル(*.xls)" & vbNullChar & "*.xls"
    .lpstrFile = strFileName & String$(256, Chr$(0))
    .nMaxFile = 256
    .lpstrFileTitle = String$(256, Chr$(0))
    .nMaxFileTitle = 256
    .lpstrInitialDir = "C:\"
    .lpstrTitle = "名前を付けて保存"
    .flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or _
         OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT
  End With
  
  lngRet = GetSaveFileName(tOpenFileName)
  
  If lngRet = 0 Then
    strFileName = ""
    Exit Sub
  Else
    strFileName = Left$(tOpenFileName.lpstrFile, _
        InStr(tOpenFileName.lpstrFile, vbNullChar) - 1)
  End If
  
  MsgBox strFileName
End Sub
'----------------------------------------------------------------------


Private Sub コマンドボタン_Click()を適宜変更された後
フォームに上記コードを記載して実行されてみて下さい。

後は こちらで得られた strFileName の値と
TransferSpreadsheet メソッドと組み合わせる事になります。


2.WizHookオブジェクトを使う

こちらは非公開オブジェクトであり動作の保証はできませんが、
Ac2000に用意されている機能です。

こちらについてはYU-TANGさんのサイトで詳しく触れられているので
目を通されてみてはいかがでしょうか。

YU-TANG's MS-Access Discoveryさん
[ファイルを開く] ダイアログを表示する方法

http://x7net.com/~access/AcTipsGetFileName.html

(GetFileName メソッドの引数 を変えることにより[ファイルを保存] も行えます。)

1331 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free