您的第一个问题来自您没有仔细阅读您提到的链接中的代码。子程序定义为
:AddAttachment
AddAttachment(ByRef rstCurrent As DAO.Recordset, _
ByVal strFieldName As String, _
ByVal strFilePath As String)
这意味着它有 3 个强制参数:
rstCurrent
要存储文件的表的打开记录集。该文件将被添加到记录集当前记录中。
strFiledName
将保存文件的附件字段的名称。您tblAttach
在 Access 中创建的表格必须至少有一个附件字段(可能还有其他字段以及与附件相关的信息,以便您可以找到它,例如文档名称和 ID,可能是文档的原始路径等)。
strFilePath
要附加的文件所在的绝对路径。
您的第二个问题是让用户通过文件对话框选择他们想要的文件:
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
子例程。