1

これらの関数を使用して、Access インターフェイスを使用せずに添付テーブルを管理しようとしているため、人々は何かを削除したり壊したりできませんが、これらの関数のいずれかを呼び出そうとすると、Argument not Optional コンパイラ エラーが発生します。

http://blogs.office.com/b/microsoft-access/archive/2007/08/24/adding-removing-and-saving-files-from-the-new-attachment-field-in-access-2007. aspx

私が持っているボタンのonclickイベントで

Database.OpenRecordset tblAttach
Recordset.AddNew
Call AddAttachment
Recordset.Update

これに関して私が抱えているもう 1 つの問題は、このコードは直接パスからインポートするためだけのものであり、ファイルを選択するためのファイル ダイアログ メソッドが本当に必要であるということです。

Dim f As Object
Set f = Application.FileDialog(3)
f.AllowMultiSelect = False
'*** not sure how to get the path to f to insert it into the table
f.Show
4

2 に答える 2

8

あなたの最初の問題は、あなたが言及したリンクのコードを注意深く読まなかったという事実から来ています.
サブルーチンは次の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サブルーチンに渡します。

于 2013-08-15T11:35:40.853 に答える