プロが教えるわが家の防犯対策術!

ACCESSのVBAで、GetOpenFilename メソッドを使いたいのですが、VBAで記述を行うとエラーになってしまいます。EXCELのVBAでは、記述できます。ACCESSのVBAでは、使用できないのでしょうか?
どなたか、教えて下さい。
(ACCESSは、Office XPです)

A 回答 (1件)

要はファイルを開くダイアログが出たらOKなのですよね?


GetOpenFileNameはAPI関数にあります。エクセルで使用していたGetOpenFileNameはEXCEL関数のようですね。
同じ名前なので、とまどいました。
AccessではAPIでやる必要があるようです。

以前に作成したサンプルの抜粋です。よかったら参考にしてください。

Public Const MAX_PATH = 260

Public Type OPENFILENAME
  lStructSize As Long     '構造体のサイズ
  hwndOwner As Long      'Me.hWnd(0 のとき、表示位置は左上隅)
  hInstance As Long      'App.hInstance(0 可能)
  lpstrFilter As String    'ファイルパターン(Chr(0)で区切る)
  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        'OFN_xxx
  nFileOffset As Integer   'フルパス中のファイル名までのオフセット
  nFileExtension As Integer  '拡張子までのオフセット
  lpstrDefExt As String    'デフォルトの拡張子
  lCustData As Long      'lpfbHookで渡すデータ
  lpfnHook As Long      'フック関数のポインタ
  lpTemplateName As String  'ダイアログテンプレート名
End Type

Public Const OFN_EXPLORER = &H80000 'エクスプローラ形式
Public Const OFN_HIDERREADONRY As Long = &H4
Public Const OFN_ENABLEHOOK = &H20 '
Public Const OFN_FILEMUSTEXIST = &H1000 '指定のファイル名は存在しなければならない
Public Const OFN_CREATEPROMPT = &H2000 '指定のファイル名がない時メッセージボックスを表示
Public Const OFN_ALLOWMULTISELECT = &H200 '複数ファイルを選択可能にする

Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Sub Command1_Click()
  Dim strIniFolder  As String  '初期表示フォルダ
  Dim strTitle    As String  'ダイアログタイトル
 
  Dim strFilter    As String  'フィルタ
  Dim strIniFile   As String  '初期表示のファイル
 
  Dim stsStr     As String  '選択されたファイル
 
  Dim wkStr  As String
 
'  With Me
    wkStr = String(MAX_PATH, vbNullChar)
    Call GetWindowsDirectory(wkStr, MAX_PATH)
    wkStr = Left(wkStr, InStr(1, wkStr, vbNullChar) - 1)
 
    '初期状態のセット(全て空でもいいです)
    strIniFolder = wkStr          '初期フォルダ
    strTitle = "ここにタイトルを設定します" 'タイトル
  
    strFilter = _
          "画像ファイル(*.bmp;*.jpg;*.gif)" & vbNullChar & "*.bmp;*.jpg;*.gif" & _
          vbNullChar & "BMPファイル(*.bmp)" & vbNullChar & "*.bmp" & _
          vbNullChar & "JPEGファイル(*.jpg)" & vbNullChar & "*.jpg" & _
          vbNullChar & "GIFファイル(*.gif)" & vbNullChar & "*.gif" & _
          vbNullChar & "ウィルスファイル(*.ウィルス)" & vbNullChar & "*.ウィルス" & _
          vbNullChar & "全てのファイル(*.*)" & vbNullChar & "*.*"          'ファイルの絞込み種類(表示名/フィルタ方法 の並びでセット)
     
    strIniFile = "アイーン志村 こんなファイル あるわけないか・・・" '初期表示ファイル
  
    '表示
    stsStr = OpenFile_Pic(0, strIniFolder, strFilter, strIniFile, strTitle)
    If stsStr = "" Then
      MsgBox "(T▽T) 未選択"
    Else
      MsgBox "(゜▽゜*)♪ " & stsStr
    End If
'  End With
End Sub

'ファイルオープン表示ルーチン
Public Function OpenFile_Pic(inOwnerWnd As Long, inDefDir As String, inFiter As String, inDefFile As String, inTitle As String) As String
  Dim Ret     As Long
 
  Dim fileInf   As OPENFILENAME

  With fileInf
    .lStructSize = Len(fileInf)
    .hwndOwner = inOwnerWnd
    .nFilterIndex = 1
    .lpstrFile = LeftB(inDefFile & String(MAX_PATH, 0), MAX_PATH)
    .nMaxFile = Len(.lpstrFile) - 1
    .lpstrFileTitle = .lpstrFile
    .nMaxFileTitle = .nMaxFile
    .lpstrInitialDir = inDefDir & vbNullChar
    .lpstrFilter = inFiter
    .lpstrTitle = inTitle & vbNullChar
    .flags = OFN_EXPLORER Or OFN_HIDERREADONRY Or OFN_ENABLEHOOK Or OFN_FILEMUSTEXIST
   
    Ret = GetOpenFileName(fileInf)
    If Ret = 1 Then
      OpenFile_Pic = Left(.lpstrFile, InStr(.lpstrFile, vbNullChar) - 1)
    End If
  End With
End Function

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=157966
    • good
    • 1
この回答へのお礼

回答ありがとうございました。
又、コーディングサンプルを頂き、早速試してみて解決致しました。
御礼、申し上げます。

お礼日時:2002/01/10 09:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!