あなたの最初の問題は、あなたが言及したリンクのコードを注意深く読まなかったという事実から来ています.
サブルーチンは次のAddAttachment
ように定義されます。
AddAttachment(ByRef rstCurrent As DAO.Recordset, _
ByVal strFieldName As String, _
ByVal strFilePath As String)
これは、3 つの必須パラメーターがあることを意味します。
rstCurrent
ファイルを保存するテーブルの開いているレコードセット。ファイルはレコードセットの現在のレコードに追加されます。
strFiledName
ファイルが保存される添付フィールドの名前。AccesstblAttach
で作成したテーブルには、少なくとも 1 つの添付ファイル フィールドが必要です (おそらく、ドキュメント名、ID、ドキュメントの元のパスなど、添付ファイルに関連する情報用の他のフィールドも必要です)。 )。
strFilePath
添付するファイルがある場所への絶対パス。
2 番目の問題は、ユーザーがファイル ダイアログから必要なファイルを選択できるようにすることです。
Public Function SelectFile() As String
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
.AllowMultiSelect = False
.Title = "Please select file to attach"
If .show = True Then
SelectFile = .SelectedItems(1)
Else
Exit Function
End If
End With
Set fd = Nothing
End Function
SelectFile()
ユーザーがファイルを選択できるようにするには、この関数を呼び出します。操作がキャンセルされた場合、またはファイルが選択されていない場合、関数はファイルへのフル パスまたは空の文字列を返します。
添付ファイルを保存するときにユーザーがファイルの名前と場所を選択できるようにするためのコードは次のようになります。
Public Function SelectSaveAs(initialName As String) As String
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogSaveAs)
With fd
.Title = "Save Attachment"
.InitialFileName = initialName
If .show = True Then
SelectSaveAs = .SelectedItems(1)
Else
Exit Function
End If
End With
End Function
SelectSaveAs("toto.xls")
たとえば、呼び出して添付ファイルの名前を提案し、ユーザーに保存場所を選択させます (名前も変更できます)。この関数は、添付ファイルを保存するファイルへのフル パスを返します。
これで、すべてをまとめることができます。
フィールドをtblAttach
含むを作成したとします。
あなたが言及したリンクのテストを次のように書き直すことができます。Files
Dim dbs As DAO.database
Dim rst As DAO.RecordSet
' Ask the user for the file
Dim filepath As String
filepath = SelectFile()
' Check that the user selected something
If Len(filepath) = 0 Then
Debug.Assert "No file selected!"
Exit Sub
End If
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblAttach")
' Add a new row and an attachment
rst.AddNew
AddAttachment rst, "Files", filepath
rst.Update
' Close the recordset
rst.Close
Set rst = Nothing
Set dbs = Nothing
ユーザーがファイルを保存できるようにするには、同様のことを行います。レコードセットを開き、保存するファイルを含むレコードに移動し、ユーザーにファイル名を尋ねてから、このすべての情報をSaveAttachment
サブルーチンに渡します。