@kossykh10 (直哉 芋)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

access 64bit でファイルダイアログが開けない

解決したいこと

マイクロソフトアクセスでファイルダイアログを開き、ファイル名を取得しほかの処理を行うという既存のアプリケーションを修正しています。

アクセス32bitで動かしていたものを64bitで動かせるように修正しています。
アクセス2010の32bitで開発していて、開発環境ではファイルダイアログは開かれるのですが、本番環境のアクセス2016の64bitではファイルダイアログを開く処理が動かずに無視されてしまいます。

発生している問題・エラー

本番環境のアクセス2016の64bitではファイルダイアログを開く処理が動かずに無視されてしまいます。

該当するソースコード

Private Sub cmdFileOpenCommonDialog_Click()
Dim objComDlg As clsCommonDialog97
Dim intret

tmpdir = Application.CurrentProject.Path
If Right(tmpdir, 1) <> "\" Then
    tmpdir = tmpdir & "\"
End If
If IsNull(tmpdir) Or IsEmpty(tmpdir) Then
    tmpdir = INIT_DIR
End If

Set objComDlg = New clsCommonDialog97
With objComDlg
.hWnd = Application.hWndAccessApp
    .DialogTitle = "データファイル指定"
   
    .FileName = ""
    .Filter = "テキスト ファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*"
    .FilterIndex = 1
    .InitDir = tmpdir
     
'.flags = cdlOFNHideReadOnly Or cdlOFNFileMustExist
    .FlagHideReadOnly = True
    .FlagFileMustExist = True
  
End With



objComDlg.ShowOpen
↑ここのShowOpenが64bitで動きません


If objComDlg.FileName <> "" Then
    FILE_NAME.SetFocus
    FILE_NAME.Text = objComDlg.FileName
End If
End Sub

自分で試したこと

参照した参照設定に Private Declare PtrSafe Function にしました。
変数、構造体の変更点が記されたドキュメントどおりに変更しました。
https://hatena19.com/Office2010Win32API_PtrSafe/Win32API_PtrSafe.TXT
構造体の初期化を見直しました。

アクセスに関しては無知同然なので教えていただけるとありがたいです。

1 likes

1Answer

Accessには標準でファイルダイアログボックスはないので、winAPI系、officeライブラリー系,vbsライブラリー系を用いることになります。

確認事項

  1. comdlg32.dll が存在しているか?
  2. Public Declare PtrSafe ...の定義があるか?
  3. clsCommonDialog97 はalias定義されてるか?

officeライブラリー系の対策

小技案でよいのでは?

0Like

Your answer might help someone💌