かなり激しく見ましたが、直接問題を解決する投稿が見つかりませんでした。
作成したフォームの次のコードはAccess 2003で機能し、職場で使用しています。
Dim FileName As FileDialog
Set FileName = Application.FileDialog(msoFileDialogFilePicker)
Dim Name As Variant
With FileName
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then
MsgBox "No file selected."
Exit Sub
End If
End With
For Each Name In FileName.SelectedItems
FileNameTextBox.Text = Mid$(Name, InStrRev(Name, "\") + 1)
Next Name
ただし、パーソナルコンピューターのAccess 2010のフォームで同じコードを実行しようとしても、機能しません。エラーメッセージは、最初の行を強調表示し、「ユーザー定義型が定義されていません」と表示します。私も宣言してみましたFileName as Office.FileDialog
、しかし運もありません。使用中の参照の1つとしてMicrosoft Access 14.0 Object Libraryを持っているので、何が問題なのかわかりません。
私はAccessを2週間しか使用していませんが、私の知識はすべてグーグルで取得しているので、明らかなものを見落としている可能性が非常に高いです。
FileDialog
オブジェクトはAccessライブラリではなく、Officeライブラリから提供されます。したがって、参照をMicrosoft Office [バージョン番号]オブジェクトライブラリに設定すると、コードは機能するはずです。その参照セットがないか、壊れています。
しかし、それが私なら、参照を設定せずに、次のようにコードを変更します。それがあなたのために働くかどうか見てください。
Const msoFileDialogFilePicker As Long = 3
Dim objDialog As Object
Set objDialog = Application.FileDialog(msoFileDialogFilePicker)
With objDialog
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then
MsgBox "No file selected."
Else
Me.FileNameTextBox.Value = Dir(.SelectedItems(1))
End If
End With
ツールでは、参照...、Microsoft Accessのものではなく、「Microsoft Office 14.0 Object Library」を選択する必要があります。