理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> Windows関連 >> Access VBA
このエントリーをはてなブックマークに追加

Access VBAのTips

  1. レコードセットのフィールド名を確認するには
  2. 添付ファイル型フィールドのファイルを開くには
  3. Excelワークブックを新規に開くには
  4. 保存されているExcelワークブックを開くには

レコードセットのフィールド名を確認するには

作成日:2012.8.13
環境:Access 2007

次のようなスクリプトで、レコードセットのフィールド名をすべて確認できる。

Dim rs As DAO.Recordset
Dim fieldCount As Integer
Dim i As Integer

Set rs = CurrentDb.OpenRecordset("SELECT * FROM myTable");
fieldCount = rs.Fields.Count
For i=0 To fieldCount - 1
  Debug.Print rs.Fields(i).Name
Next

添付ファイル型フィールドのファイルを開くには

作成日:2012.8.13
環境:Access 2007

Accessデータベースでは、テーブルに「添付ファイル」型のフィールドを作成できる。 このフィールドには、複数のファイルを添付することも可能。 内部的には、このフィールド用のテーブルが新規に準備されて、その中にファイルが納められる。このため、添付ファイルにアクセスするには、Recordsetを2段階で取得する必要がある。

テーブルから添付ファイルを書き出して、そのファイルを開くまでのVBAスクリプトを示す。

' テーブル名:files
' フィールド名:id, file
Dim selectedRs As DAO.recordset
Dim childRs As DAO.recordset
Dim fullPath As String
Dim tempDirPath As String
Dim sql As String

tempDirPath = Environ("Temp")
If Right(tempDirPath, 1) <> "\" Then
  tempDirPath = tempDirPath & "\" '《1》
End If

sql="SELECT * From files Where id=1"
Set selectedRs = CurrentDb.OpenRecordset(sql) '《2》
Set childRs = selectedRs.Fields("file").value '《3》
fullPath = tempDirPath & childRs.Fields("FileName").value'《4》

If Dir(fullPath) <> "" Then '《5》
  SetAttr fullPath, vbNormal '《6》
  Kill fullPath '《7》
End If
childRs.Fields("FileData").SaveToFile fullPath '《8》
childRs.Close
    
Shell "Explorer.exe " & Chr(34) & fullPath _
  & Chr(34), vbNormalFocus '《9》

  • 《1》テンポラリディレクトリのパスを取得し、パスの最後に区切り文字「\」が付いていなければ付ける。
  • 《2》テーブル「files」からid=1のレコードを取得し、selectedRsに入れる。
  • 《3》フィールド「file」に隠されているファイル保存用テーブルのレコードを取り出し childRsに入れる。
  • 《4》添付ファイル名を取得してfullPathに代入する。RecordSetオブジェクトのchildRsの"FileName"フィールドを参照するとよい。
  • 《5》テンポラリディレクトリにファイルがあるか確認し、あれば削除する。
  • 《6》ファイルの属性を初期化する。
  • 《7》ファイルを削除する。
  • 《8》レコード内のファイルを書き出す。childRsの"FileData"フィールドに添付ファイルのデータが入っている。
  • 《9》書き出したファイルを開く。Chr(34)はダブルクォーテーション。

上のVBAの中で、RecordSetのオブジェクトchildRsの持っているフィールドを確認すると、

Fields("FileData") → 添付ファイルそのもの
Fields("FileFlags") → ?
Fields("FileName") → ファイル名
Fields("FileTimeStamp") → ?
Fields("FileType") → 拡張子
Fields("FileURL") → ?
となっていた。

Excelワークブックを新規に開くには

作成日:2012.6.5

Dim excelApp As New Excel.Application
excelApp.Workbooks.add
excelApp.Visible = True

保存されているExcelワークブックを開くには

作成日:2012.6.5

Dim excelApp As New Excel.Application
excelApp.Workbooks.Open("ファイルのパス")
excelApp.Visible = True