• ベストアンサー

GetOpenFilename メソッドについて

TAGOSAKU7の回答

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.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
vboshietekudsai
質問者

お礼

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

関連するQ&A

  • GetOpenFilenameメソッド アクセス

    エクセルには GetOpenFilenameメソッドが用意されてるから Debug.Print Application.GetOpenFilename("Microsoft Excelブック,*.xls") のようにしてファイル名を取得できますが アクセスで同じような事がしたい場合、どのメソッドを使えば良いでしょうか? アクセスにGetOpenFilenameメソッドはないようです。

  • VBAのGetOpenFilenameについて

    VBAのGetOpenFilenameについての質問です。 このメソッドを使用すると一番初めは"マイドキュメント"内のdirが表示されるのですが、このデフォルトの指定を変更することは可能でしょうか。 一度ファイルを指定してやると、次回からはそのファイルのdirが はじめに開くので、できると思うのですが、方法がどこにも載ってません。 ご存知の方、よろしくお願いします。

  • VBAのGetOpenFilenameについて

    VBAのGetOpenFilenameについての質問です。 (1)このメソッドを使用すると一番初めは"マイドキュメント"内のdirが表示されるのですが、このデフォルトの指定をサーバーのディレクトリーに変更することは可能でしょうか。 ネットワークドライブをZ等に設定すると出来た(例参照)のですが、ネットワークドライブを設定せずに直接ディレクトリ指定出来ないでしょうか。 (例) ChDrive "z:\" ChDir"z:\test" (2)下記の通りvbaを組むと「引数は省略できません」のエラーになります。過去の質問url(http://oshiete1.goo.ne.jp/qa3023085.html)では出来ましたとお礼が書かれていましたが、理由が分からないので、教えて下さい。 Dim WorkPath As String WorkPath = ActiveWorkbook.Path ChDir = WorkPath ChDrive = WorkPath

  • ActivateMicrosoftAppメソッドは

    ActivateMicrosoftAppメソッドはエクセルにしかないのでしょうか? アクセスで Application.ActivateMicrosoftApp xlMicrosoftWord をしたら、エラーになりました。 アクセスにはエクセルのActivateMicrosoftAppに変わるメソッドはないのでしょうか? バージョンは2007です。

  • Accessのコントロールのメソッドについて

    質問です。 Access-VBAで下記の記述をしました。 Me.品目コード.SetFocus Me.品目名.Value = "AAAA" これでコンパイルすると、エラーが発生します(メソッドまたはデータメンバーが見つかりません)。 コントロール名の後に「.」を入力すると、メソッドやプロパティのリスト入力ができるようになりますが、その中にSetFocusやValueがありません。 ライブラリの参照設定の問題なのでしょうが、どれを参照すれば分かりません。 動作環境は以下の通りです。  ・OS : Windows 7  ・Access : 2015 どのように対応すればよろしいでしょうか? 回答、よろしくお願いします。

  • SaveAsメソッドについて

    いつもお世話になっております。 Accessから抽出したデータをVBAを使って、Excelファイル として保存しています。 ExWorkSheet.SaveAs "ファイルパス" として保存しているのですが、上書き確認のダイアログ が表示されたときに、「いいえ」を押すと 「SaveAsメソッドは失敗しました」とエラーがでて しまいます。 エラー処理の書き方を調べているのですが、 よくわかりません。 ご存知のかた、どうかよろしくお願いいたします。

  • エラー「メソッドまたはデータメンバが見つかりません」

    「メソッドまたはデータメンバが見つかりません」というエラーが出ています。 windowsVISTAでACCESS2007を使っています。 windowsXPでACCESS2003でも同じエラーが出ます。 ソースは下記になります。 Dim OpenFileName As String  OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")  MsgBox "ファイル名は" & OpenFileName & "です" End Sub 「.GetOpenFilename」が反転して、エラーになります。 かれこれ2時間格闘してますが、全く原因がわかりません(T-T) どうかよろしくお願いいたします。

  • エクセル2003 GetOpenFilenameで呼び出される階層について

    エクセル2003VBAでGetOpenFilenameを使って ファイルを選択してその後の処理に用いてます。 質問なのですが GetOpenFilenameで呼び出されてくるフォルダの階層 がカレントフォルダだったと何処かで読んだ記憶があったので カレントフォルダをchdirを持ちいて必要なフォルダを呼び出せるよう しているのですが、呼び出したい階層のフォルダがネットワークに つながっているPC(サーバー機)の場合、どうしても欲しい階層が 呼び出せないのですが、どのようにしたらよいのでしょうか? また、GetOpenFilenameで呼び出されるダイアログの動きなどを 追跡(調べる方法)などあるのでしょうか? ご教授のほど宜しくお願いいたします。

  • Openメソッドについて

    ブックAのSheet1にあるセルのデータをブックBのSheet1のセルにコピーするために、以下のようにOpenメソッドを使ったVBAを記述してみたのですが、エラーコード1004「指定されたファイルが存在しません」のようなエラーメッセージが出てきました。Openメソッドが使われている例を見ているとどうやらブックのあるフォルダを指定しているような感じがするのですが、Openメソッドは具体的に該当のブックのある場所を指定しなくてはならないのでしょうか??(私がVBAを記述するにあたり参考にしたインターネットのVBAを紹介するページでは、ブックのある場所を指定せず、私が記述したように直にブック名を入力していました。) お忙しい中申し訳ないのですが、どなたかご教授いただけると、とても嬉しいです!よろしくお願いいたします。 Sub ブックAのデータをブックBに() With Workbooks.Open("ブックA.xlsx")  .Sheets("Sheet1").Range("E8").Value = _ ThisWorkbook.Range("C2").Value End With End Sub

  • GetOpenFileNameでファイル名でのフィルタ

    こんにちは, EXCEL2007 VBAを用いて ワークブックオープン時にファイル選択ダイアログを表示しています。  GetOpenFileName("日報ファイル(*.CSV),*.CSV",false) 上記は拡張子*.CSVでフィルタを掛けていますが、 ファイル名を絡めてフィルタを掛けることはできないのでしょうか? 日報ファイルなら*day.CSV,月報なら*month.CSVといった様に・・・  GetOpenFileName("日報ファイル(*day.CSV),*day.CSV",false) 上の様にすると*.*となりフィルタがかかりません。 ファイル選択ダイアログのファイル名のところに*day.CSVと手入力すれば フィルタがかかります。これをVBAから行えないでしょうか? よろしくお願いいたします。