• ベストアンサー

VBAでファイル選択窓の初期パス設定??

VBAでファイル選択窓の初期パス設定?? アクセス(V2010) VBAで、SelectFileDialog を使って ファイル選択窓を表示します。 開いたとき、所定のPathのファイルを表示したいと思い、 事前に CdDrive と CdDir で、カレントパスを 移動する指定をしているのですが、うまくいきません。 うまくいかせる方法をご教示ください。 手元では、指定した Path でなく、 直前の実行で選択したファイルの Path になってしまいます。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

ダイアログの引数はどうなっていますか

momomimi
質問者

お礼

layy さん、例1. の方法で解決しました。 lpstrInitialDir に、 所定のPathを設定することで、 できました。 このメンバー未設定で ChDir による移動が 優先されると勘違いしてました。 迅速、正確・簡明なご教示をいただき 大変たすかりました。 感謝いたします。 ありがとうございました。

momomimi
質問者

補足

layy さん、ありがとうございます。 以下に補足します。 (1) 構造体変数 fOfn に、以下の内容をセットしています。 fOfn.lStructSize = Len(fOfn) fOfn.hwndOwner = GetActiveWindow() 'Win Handle fOfn.hInstance = 0 fOfn.lpstrFilter = fFilter ' txt.* fOfn.nFilterIndex = 1 fOfn.flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY fOfn.lpstrTitle = "ファイルを開く" fOfn.nMaxFile = BUFF_SIZE ' 1024 fOfn.lpstrFileTitle = String(BUFF_SIZE, vbNullChar) fOfn.nMaxFileTitle = BUFF_SIZE '1024 fOfn.lpstrFile = String(BUFF_SIZE, vbNullChar) fOfn.lpstrDefExt = vbNullChar (2) ChDrive、ChDir を実行したのち CurDir で、カレントを 確認すると、確かに 指定した Pathに変化しています。 しかし GetOpenFileName では、直前の動作で、実際に 選択した Fileの Directory が表示されています。 よろしくお願いいたします。

その他の回答 (1)

回答No.2

構造体を利用している場合は、きちんと構造体の定義も載せましょう (APIの構造体は、利用者の都合に合わせて宣言の方式が複数存在します。) 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 としているのであれば、lpstrInitialDirに設定します。 例1. fOfn.lpstrInitialDir = "C:\" & vbNullChar '通常の使い方 例2. fOfn.lpstrInitialDir = "%windir%" & vbNullChar '環境変数も使える

momomimi
質問者

お礼

1050YEN さん、 迅速、正確・簡明なご教示をいただき 大変たすかりました。 ありがとうございました。 lpstrInitialDir = Path の方法で解決しました。 構造体の定義は、ご指摘の内容と同じです。 (省略しては、質問にならないですね。 失礼いたしました。) ***< お詫び >*** 私は「締切」操作を誤ってしまい、 「ベストアンサー」を他のかたに設定して しまいました。 申し訳ありません。 今後とも、ご教示のほど よろしくお願い申します。

関連するQ&A