できそうでなかなかないのですがようやくここまで行きました。
なんですって?フォームを使えと?
そんな面倒くさいものは使いません。ばかばかしい。
ただし条件が2つあります
- DAOを参照設定していること
- 現在開いているテーブルは一つだけとします。
現在開いているテーブルの名前を取得するマクロです
GetAccessCurrentTabledef
Sub GetacCurrentTableDef()
'QIIQ from QIITA
'For Access VBA
Dim Db As DAO.Database: Set Db = CurrentDb
Dim tdf As TableDef, tdTgt() As TableDef
Dim cnt As Long
cnt = 0
For Each tdf In Db.TableDefs
If tdf.Attributes = 0 Then
If SysCmd(acSysCmdGetObjectState, acTable, tdf.Name) > 0 Then
cnt = cnt + 1
ReDim Preserve tdTgt(1 To cnt)
Set tdTgt(cnt) = tdf
End If
End If
Next
If cnt >= 1 Then Set tdf = tdTgt(1): Debug.Print tdf.Name
End Sub
For Eachで回すとシステムのテーブルを拾って面倒なので、アトリビュートで0を選択します。
配列に入れ込み、最初の一つだけを取得するようにしています。
カウンタ(CNT)を回すことで複数のものを開いていても一応取得します。
カレントは一つだけなので一つです。
複数開いていても最初にFor Eachで拾ったテーブルがカレントになりますが、最初から1個だけと言ってますよね。