• ベストアンサー
  • 困ってます

Access VBA 添付型フィールド

Access VBAで添付型フィールドからファイル名を取りだしたいのですが、どのようにすればいいでしょうか? Private Sub Sample() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim SQL As String   Set DB = CurrentDb SQL_1 = "SELECT * FROM ボランティア情報 ORDER BY 分野 & 団体名読み;" Set RS = DB.OpenRecordset(SQL_1, dbOpenDynaset) With RS   Do While Not .EOF   MsgBox (!写真.FileName)  ←ここでエラーが出ます。 .   MoveNext   Loop End With RS.Close Set RS = Nothing Set MDB = Nothing End Sub

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数2562
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

やってみて動いたッポイので回答してみますが、裏付け等はしてください。 テーブル「T5」で、フィールド「FF1」が添付ファイルとします。 フィールド「FF1」の Value はレコードセットになっているようで、 フィールドは6つ存在しました。(2007 にて) その中で Name = "FileName" 部分の Value にファイル名があるようです。 Public Sub test1()   Dim rs As DAO.Recordset   Dim v As Variant   Set rs = CurrentDb.OpenRecordset("T5")   While (Not rs.EOF)     With rs("FF1").Value       While (Not .EOF)         For Each v In .Fields           If (v.Name = "FileName") Then             Debug.Print v.Value             Exit For           End If         Next         .MoveNext       Wend     End With     rs.MoveNext   Wend   rs.Close   Set rs = Nothing End Sub Name = "FileName" はフィールドの3つ目にあるみたいで・・・(裏付けなし) 添付ファイルの個数は1つ or 設定なしであれば、以下でも良いのかも Public Sub test2()   Dim rs As DAO.Recordset   Set rs = CurrentDb.OpenRecordset("T5")   While (Not rs.EOF)     With rs("FF1").Value       If (Not .EOF) Then Debug.Print .Fields(2)     End With     rs.MoveNext   Wend   rs.Close   Set rs = Nothing End Sub とか Public Sub test3()   Dim rs As DAO.Recordset   Set rs = CurrentDb.OpenRecordset("T5")   While (Not rs.EOF)     If (Not rs("FF1").Value.EOF) Then       Debug.Print rs("FF1").Value("FileName")     End If     rs.MoveNext   Wend   rs.Close   Set rs = Nothing End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

 す、す、すごい!!! また、素早いご回答、感服しました。 ありがとうございます。頭の中がすっきりしました。

関連するQ&A

  • DAOでレコード数を取得したい(ACESSVBA)

    レコードの行数は複数あるのに --------------------------------------------------------- Sub あ() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_test", dbOpenDynaset) MsgBox rs.RecordCount Set rs = Nothing Set db = Nothing End Sub --------------------------------------------------------- これでレコード数を取得しようとすると1がかえるのですが なぜレコードの行数を取得できないのでしょうか?

  • VBAのコード

    参考書に従って次のようなコードを書きました。 Private Sub previewButton_Click() Dim db as DAO.Database Dim rs as DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("Q_ラベル印刷", dbOpenDynaset)* if me!......................以下略 *印のところで「パラメーターが少なすぎます。1を指定してください。」というメッセージが出ます。 どう直せばいいのでしょうか。 よろしくお願いします。

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • 空欄を含む項目のレコードセット

    Access 2003 DAO.Recordsetにてデータを取得しようと思うのですが テーブル項目に空欄がある場合はどのように書けばよろしいのでしょうか? Dim DB As DAO.Database Dim RS As DAO.Recordset Set DB = CurrentDb Set RS = daoDB.OpenRecordset("Aテーブル", dbOpenDynaset) RS.AddNew daoRS!ああ ああ = xx RS!Update ・・・ とするとエラーになります。 項目名"ああ ああ"はどのように書けばいいのでしょうか? よろしくおねがいします。

  • レコード件数が返らない理由がわからない

    テーブル1にはレコードが5件入ってるのですが Private Sub レコード件数() Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT * FROM テーブル1;" Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Debug.Print rs.RecordCount End Sub これをすると1が返るのですがなぜでしょうか? レコードの数が返ると思ってるのですが違うのでしょうか?

  • Access-VBAでフィールドまたはレコード指定

    お世話になります。 Accessから、フィールドまたは、レコードを指定して、 Excelの指定したセルに出力することはできますか? Sub EX1() On Error Resume Next Dim db As DAO.Database Dim rs As DAO.Recordset Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set db = CurrentDb '出力元のテーブルまたはクエリ Set rs = db.OpenRecordset("EQ") Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) ' Excel のセルに値を代入 xlSheet.Cells(1, 1).CopyFromRecordset rs ' Worksheet を名前をつけて保存 xlSheet.SaveAs "D:\一時保存\abc.xls" xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub ' Excel のセルに値を代入 xlSheet.Cells(1, 1).CopyFromRecordset rs の部分でできそうなのですが。 クエリにある1つ目のレコード、またはフィールドを、Excelの(1,1)。 2つ目を、(3,1)。 3つ目を、(5,1)としたいのです。 よろしくお願いします。

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

  • ACCESS どこがおかしいのか?

    ACCESSで。クエリからフォームを作成し、検索フォームを作成しようとしています。 AND条件とOR条件を作り検索(抽出)を行いたいのですが、何が間違っているのか、 検索をかけるとすべて「登録がありません」になってしまいます。 どこが間違っているのか、もしくは代替案を教えていただけますでしょうか。 以下は記述した、VBAコードです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim stFil As String Set db = CurrentDb() Set rs = db.OpenRecordset("Q_Autoweb", dbOpenDynaset) 'オプションボタンで条件を選択 If 検索条件 = 1 Then rs.Filter = "[タイトル]='" & タイトル検索 & "' and [本文]='" & テキスト15 & "'" Else rs.Filter = "[タイトル]='" & タイトル検索 & "' or [本文]='" & テキスト15 & "'" End If Set rs = rs.OpenRecordset Set Me.Recordset = rs If rs.EOF = True Then MsgBox "登録がありません" Else Me.ID = rs!ID Me.案件名 = rs!案件名 Me.タイトル = rs!タイトル Me.本文 = rs!本文 End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub よろしくお願いします。

  • accessからsqlserverにアップサイジングしましたが,テーブ

    accessからsqlserverにアップサイジングしましたが,テーブルにデータを入力出来なくなってしまいました。 Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb() Set rs = db.OpenRecordset("確認用", dbOpenDynaset) rs.AddNew rs!品番 = Me.品番 rs.Update 上記のようにDAOを介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • 【Access VBAからExcelを閉じたい】

    【Access VBAからExcelを閉じたい】 以下のコマンドを書いて、 クエリ結果をExcelに貼りつけました。 ですが、Excelを保存して閉じることができず、、、。 (自動起動・終了を目的としています) 具体的には、 objApp.Save を実行すると、 『この場所に"RESUME.XLW"という名前のファイルが既にあります。置き換えますか?』 とメッセージボックスが出てきます。 何もメッセージを出さずに、上書き保存→Excelを閉じるには、どのように書けばよろしいでしょうか? 以下ソース - - - - - - - - - - - - - - - - Private Sub XLS_Paste_1() On Error GoTo Err_XLS_Paste_1 Dim DB As DAO.Database Dim RS As DAO.Recordset Dim objApp As Object Dim ExeName As String Dim SheetName As String ExeName = "\\FileServer01\Share\Excel_Base.xls" SheetName = "Report" Set DB = CurrentDb Set RS = DB.OpenRecordset("qry_sel_DAILY_DATA") On Error Resume Next Set objApp = CreateObject("Excel.Application") '変数にExcelオブジェクトを格納 objApp.Visible = True 'Excelを画面に表示させる With OBJEXE objApp.Workbooks.Open (ExeName) With objApp.Sheets(SheetName) .Range("B53:G83").ClearContents '転記エリアのクリア .Cells(53, 2).CopyFromRecordset RS 'B53基準で出力 End With objApp.Visible = True objApp.Save objApp.Quit Set objApp = Nothing Set RS = Nothing Set DB = Nothing Set OBJEXE = Nothing Exit Sub End With Exit_XLS_Paste_1: Exit Sub Err_XLS_Paste_1: MsgBox Err.Description Resume Exit_XLS_Paste_1 End Sub