カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

DAOでレコード検索

Dim dbs As Database
Dim rst As Recordset
Dim strCriteria As String

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("住所テーブル", _
dbOpenDynaset)

With rst
    strCriteria = "住所 Like '東京*'"
    .FindFirst strCriteria
    Do Until .NoMatch
        Debug.Print !ID, !氏名, !住所, !郵便番号
        .FindNext strCriteria
    Loop
    .Close
End With
2,421 views

オートメーション

AccessからOfficeアプリケーションを制御すること

1,941 views

リンクテーブルの更新(DAO)

Private Sub リンク更新_Click()
On Error GoTo Err_リンク更新

If MsgBox("リンクテーブルを更新します。よろしいですか?", vbYesNo + vbExclamation + vbDefaultButton2, "更新") = vbYes Then

  Dim db As Database, tdfLinked As TableDef
  Dim TableName As String, ErrName As String
  Set db = CurrentDb
  ErrName = ""

  TableName = "table1" 'テーブル名を指定する
  Set tdfLinked = db.TableDefs(TableName)
  tdfLinked.Connect = ";DATABASEdb1.mdb"
  tdfLinked.RefreshLink
  Set db = Nothing

  If Len(ErrName) > 0 Then
    MsgBox ErrName & "のテーブルは更新できませんでした。"
  Else
    MsgBox "終了しました。", , "確認"
  End If
End If

Exit Sub

Err_リンク更新:
  ErrName = ErrName & " " & TableName
  Resume Next

End Sub
10,113 views

未定義関数Dir 解決法

ACCESSのMDBファイルを使用していて、何らかのプロシージャを実行したとき、
未定義関数Dirがあります等のエラーが発生することがある。

【解決法】
レジストリのSandboxModeの値を2にする

【操作】
スタートからファイル名を指定して実行を選択し、
「regedit」と入力しEnter。

レジストリエディタが起動するので、検索で「SandBoxMode」を探すか
以下のパスを辿って見つけて値を変更してください。

\\HKEY_LOCAL_MACHINE\Software\Microsoft\Jet4.0\engines\SandboxMode

※これで解決しない場合、他に考えられる原因はOfficeのアップデートを
適用していない場合があります。
その場合、アップデートすると解決することがあります。


SandBoxModeが見つからない

2019年9月2日追記

通常、レジストリを検索すれば「SandBoxMode」が見つかると思うのですが、特定のバージョンでは見つからない場合があるようです。
今回見つからなかったのはMicrosoft Office 2016の場合でした。
この場合、新たに値を作成すればうまくいきました。

Office 2016の場合は以下のようにパスを辿ってください。
\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines

そしてEnginesの中に値を作成します。
レジストリエディタの右側のボックスを右クリックし、[新規]-[DWORD(32ビット)値]と選択します。
名前は「SandBoxMode」と入力し、値に2を設定します。

他のバージョンについては以下のURLを参考にしてください。
サンドボックス-モードのオン-オフを切り替えてマクロを無効にする

4,660 views