No.1ベストアンサー
- 回答日時:
Win32APIのGetOpenFileName関数を使用します。
[サンプルコード]
Option Compare Database
Option Explicit
'[ファイルを開く]と[ファイルを保存]ダイアログボックスの為の構造体宣言
Private Type OPENFILENAME
lStructSize As Long '構造体のサイズ
hwndOwner As Long 'ダイアログボックスを所有するウィンドウのハンドル
hInstance As Long 'アプリケーション インスタンス
lpstrFilter As String 'フィルター
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
lpTemplateName As String
End Type
'[ファイルを開く]ダイアログボックスを呼び出すAPI
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (ByRef pOpenfilename As OPENFILENAME) As Long
Private Const OFN_READONLY As Long = &H1 '[読み取り専用]チェックボックスをオンにする
Private Const OFN_OVERWRITEPROMPT As Long = &H2 '選択したファイルが存在する場合の上書確認する
Private Const OFN_HIDEREADONLY As Long = &H4 '[読み取り専用]チェックボックスを表示しない
Private Const OFN_NOCHANGEDIR As Long = &H8 'ダイアログボックスを開いたときに現在のディレクトリを表示する
Private Const OFN_SHOWHELP As Long = &H10 'ダイアログ ボックスに [ヘルプ] ボタンを表示する
Private Const OFN_NOVALIDATE As Long = &H100 '無効な文字を含むファイル名を指定出来るようにする
Private Const OFN_ALLOWMULTISELECT As Long = &H200 'ファイル名リストボックスで複数選択を可能にする
Private Const OFN_EXTENSIONDIFFERENT As Long = &H400 'ファイル名の拡張子とlpstrDefExtで指定された拡張子が異なる
Private Const OFN_PATHMUSTEXIST As Long = &H800 '無効なパスを入力したときに警告メッセージを表示する
Private Const OFN_FILEMUSTEXIST As Long = &H1000 '既存のファイルだけ入力できるようにする
Private Const OFN_CREATEPROMPT As Long = &H2000 '現在存在しないファイルを作成するかを確認する
Private Const OFN_SHAREAWARE As Long = &H4000 '共有違反エラーを無視する
Private Const OFN_NOREADONLYRETURN As Long = &H8000 '読み取り専用属性を持たず、読み取り専用フォルダにないファイルを取得する
Private Const OFN_EXPLORER As Long = &H80000 'エクスプローラに似たダイアログボックスにする
Private Const OFN_NODEREFERENCELINKS As Long = &H100000 'ショートカットを実行しない
Private Const OFN_LONGNAMES As Long = &H200000 '長いファイル名を使用する
Public Function GetFileName(ByRef hwnd As Long, _
ByVal strPath As String) As String
Dim ofn As OPENFILENAME
Dim strFileName As String
Dim strTmp As String
Dim lngRet As Long
Dim i As Long
' ダイアログ ボックスのオプションを設定します。
With ofn
'親Windowの指定
.hwndOwner = hwnd
'アプリケーションのインスタンスを指定
.hInstance = 0
.lpstrCustomFilter = vbNullString
.nMaxCustFilter = 0
.lpfnHook = 0
.lpTemplateName = 0
.lCustData = 0
'フィルタの種類を設定
.lpstrFilter = "すべてのファイル (*.*)" & vbNullChar & "*.*" & vbNullChar
'アクティブなフィルタの番号を設定
.nFilterIndex = 1
'最大ファイル長の設定
.nMaxFile = 511
'ファイルのタイトルを受け取るポインタ
.lpstrFileTitle = String$(512, 0)
'ファイル名の最大長を設定
.nMaxFileTitle = 511
'デフォルトディレクトリの設定
.lpstrInitialDir = strPath
.lpstrDefExt = ""
'サイズの設定
.lStructSize = Len(ofn)
'ダイアログのタイトルを設定
.lpstrTitle = "ファイルを選択してください。"
'[ファイル名]ボックスの内容を設定
.lpstrFile = String$(512, 0)
'オプションの設定
.flags = OFN_HIDEREADONLY ' + OFN_PATHMUSTEXIST
End With
lngRet = GetOpenFileName(ofn)
If lngRet = 0 Then
GetFileName = ""
Exit Function
End If
lngRet = InStr(ofn.lpstrFile, vbNullChar)
If lngRet <> 0 Then
ofn.lpstrFile = Left$(ofn.lpstrFile, InStr(ofn.lpstrFile, vbNullChar) - 1)
End If
' パスとファイル名を返します。
strFileName = Trim$(ofn.lpstrFile)
GetFileName = strFileName
End Function
回答ありがとうございました。
WindowsのAPIを使わないと駄目なんですね。
理解するには時間がかかりそうですが、とにかく使うことはできました。
とても助かりました。
No.2
- 回答日時:
アクセスVBAで
(1)フォームを新規作成
(2)ツールボックスより
コマンドボタンを貼りつけ。キャプションを
ファイルを開くにする。(これは本質的ではない)
(3)ツールボックスアイコンをダブルクリック
(4)「参照設定」の一覧リストが出るので、その
なかから、MicrosoftCommonDialogContol,Version6.0
をクリック。アイコンがフォーム上に来ると+になるので
フォーム上に貼りつけ。
(5)コママンドボタンをダブルクリック。
Mojuleの画面になり
Private Sub コマンド0_Click()
End Sub
が出る。
Private Sub コマンド0_Click()
ActiveXコントロール1.showopen
End Sub
とコードを入れる。
(6)フォームのボタンをクリックすると、見覚えのある
ファイルを「開く」のウインドウが出ます。
(7)その開くウインドウで「ファイルの種類」を前もって指定する方法を勉強してください(ふぃlてr)
(8)指定したファイル名を文字列として取得する方法を
勉強してください。
(9)Private Sub コマンド0_Click()
Dim fn As String
ActiveXコントロール1.Filter = "CSV ファイル (.CSV)|*.CSV|すべてのファイル (*.*) |*.*"
ActiveXコントロール1.ShowOpen
fn = ActiveXコントロール1.FileName
MsgBox fn
End Sub
回答ありがとうございます。
やってみました。((3)の「ツールボックスアイコン」は「コントロールの選択アイコン」をシングルクリックですよね?)
が、(4)のところで「このActiveXコントロールを使用するライセンスがありません。」と言われてしまい、残念ながらできませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- その他(ソフトウェア) 特定のpremiere proのファイルが開けなくなりました。 1 2022/11/16 12:31
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- ノートパソコン EXCEL のドキュメントの回復について 2 2023/03/19 17:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
自分で作成した重要ファイルを...
-
アクセス 壊れた? 「ファイ...
-
binファイルを解凍したいの...
-
.NETアプリを作ったときの .man...
-
参照するファイルをワイルドカ...
-
ADODB.Streamで開いたファイル...
-
コマンドプロンプトで作成日時...
-
exeファイルの中身を見る方法は...
-
jarファイル
-
VB.netで DirListBoxを使いたい
-
実行ファイル(.exeファイル)...
-
ハイパーリンクされたJPGファイ...
-
g1tファイルとは
-
既に開いているエクセルを閉じ...
-
公文書のxmlファイルの開き方が...
-
Seasar2のdiconファイルの読み方
-
バッチ処理で追記コピーしたい
-
Word VBA MSGBOX 内で降順表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
iPhoneでXMLファイルを開くには...
-
公文書のxmlファイルの開き方が...
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
.NETアプリを作ったときの .man...
-
リンクの張り付けかたを教えて...
-
#include <Windows.h>というヘ...
-
jarファイル
-
Seasar2のdiconファイルの読み方
-
Word VBA MSGBOX 内で降順表示
-
監視ツールを入れさせられまし...
-
CSSを1ページに1枚作るのって変...
-
コマンドプロンプトで、指定し...
-
ファイルが開かれているかどう...
-
exeファイルをデータ転送サービ...
-
パイソンでpy ファイルと p...
-
exeファイルの中身を見る方法は...
-
Latexで図番号だけを「図1.1」...
-
参照するファイルをワイルドカ...
-
バッチ処理で追記コピーしたい
おすすめ情報