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

参照設定を追加せずDAOを利用する

1Dim db As Object
2Dim rst As Object
3 
4Set db = DBEngine.Workspaces(0).Databases(0)
5 
6MsgBox db.Name
7 
8Set rst = db.OpenRecordset("テーブルまたはクエリ名")
9 
10Do Until rst.EOF
11    Debug.Print rst("フィールド名")
12    DoEvents
13    rst.MoveNext
14Loop
15 
16rst.Close: Set rst = Nothing
17db.Close: Set db = Nothing

OpenRecordsetメソッドにdbOpenDynasetなどの引数を指定したい場合
定数が使用できないので、下記を参考に数値を入力してください。

dbOpenTable 1
dbOpenDynamic 2
dbOpenDynaset 3
dbOpenSnapshot 4

SQL Serverへ接続する場合について(※2016.06.14追記)

SQL ServerのID列を持つテーブルを開くときは、dbSeeChanges(512)オプションを使用するようエラーが発生します。
その場合は以下のように開きます。

1Set rst = db.OpenRecordset("テーブルまたはクエリ名", 2, 512)

CurrentDbの推奨(※2020.10.28追記)

Access2000以降ではデータベースをする際、上記のコードにある「DBEngine.Workspaces(0).Databases(0)」よりも「CurrentDb」の使用が推奨されているようです。

また、別のデータベースを参照する必要があるときは以下のようにしてください。

1Set db = DBEngine.Workspaces(0).OpenDatabase("Another.mdb")

参考URL:CurrentDb メソッド (Access) | Microsoft Docs

9,796 views

ファイルのバージョン情報を取得

FileSystemObjectを使用する場合、例のようにCreateObjectを利用するか
[ツール]-[参照設定]で[Microsoft Scripting Runtime]の参照追加が必要。

1Function get_file_version(ByVal strFilePath As String) As String
2 
3    Dim cFSO      As Object
4    Dim stVersion As String
5 
6    'FileSystemObjectのインスタンスを生成
7    Set cFSO = CreateObject("Scripting.FileSystemObject")
8 
9    'ファイルのバージョンを取得する
10    stVersion = cFSO.GetFileVersion(strFilePath)
11 
12    'オブジェクト破棄
13    Set cFSO = Nothing
14 
15    get_file_version = stVersion
16 
17End Function
11,465 views

マウスポインター形状の変更

ACCESS VBAにてマウスポインターの形状を変更するには

通常の砂時計などは、用意されたプロパティ・メソッドで変更可能

例)

1DoCmd.Hourglass True    '砂時計ポインターにする
2Screen.MousePointer = 9 '左右の矢印にする
Screen.MousePointerに設定できるその他の値
既定値 0
矢印 1
I字型 3
上下の矢印 7
左右の矢印 9
砂時計 11

上記以外の形状に変更したい場合

Win32 APIを使用

General部分にAPI関数を定義(モジュールに書く場合はPublicを使用)

1Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" _
2  (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
3Private Declare Function SetCursor Lib "user32" _
4  (ByVal hCursor As Long) As Long

ハンドカーソルの定数を定義

1Private Const IDC_HAND = 32649& 'ハンドカーソル

マウスカーソルの戻り値(形状)格納用

フォーム起動時に、ハンドカーソルを取得

1Private Sub Form_Load(Cancel As Integer)
2  'マウスポインターを手の形にするためのマウスカーソルを取得
3  mCursor = LoadCursor(0&, IDC_HAND)
4End Sub

マウスオーバー時、マウスポインターをハンドカーソルにしたいコントロールの「マウスボタン移動時」イベントに以下の処理を記述

1Private Sub Label_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
2  'ラベル上でマウスを手の形にする
3  Call SetCursor(mCursor)
4End Sub
LoadCursorの第2引数の値
APIでの値(定数) VBAでの値 マウスカーソルの形
IDC_APPSTARTING 32650& 小さい砂時計付の矢印カーソル
IDC_ARROW 32512& 標準の矢印カーソル
IDC_CROSS 32515& 十字カーソル
IDC_HAND 32649& ハンドカーソル
IDC_HELP 32651& 疑問符付の矢印カーソル
IDC_IBEAM 32513& I(縦線)カーソル
IDC_NO 32648& 禁止カーソル
IDC_SIZEALL 32646& 4方向の矢印カーソル
IDC_SIZENESW 32643& 右斜め上の両方向き矢印カーソル
IDC_SIZENS 32645& 上下の両方向き矢印カーソル
IDC_SIZENWSE 32642& 右斜め下の両方向き矢印カーソル
IDC_SIZEWE 32644& 左右の両方向きカーソル
IDC_UPARROW 32516& 上向きの垂直矢印カーソル
IDC_WAIT 32514& 砂時計カーソル
Win32 APIの定数はVBAではそのまま使用できないので、定数として宣言して使用します。
例)
Public Const IDC_APPSTARTING = 32650&
23,911 views

簡易クリップボード操作

クリップボードにコピー

1[control name].SetFocus
2[control name].SelStart = 0
3[control name].SelLength = Len([control name])
4DoCmd.RunCommand acCmdCopy

クリップボードからペースト

※貼り付けたデータをすぐに加工等する場合は、Me.Refreshなどでデータを一旦反映させることが必要である。

5,088 views

VBA Excelシートを別ファイルにコピー

1'# Excel作成
2Public Sub mkExcel_withInvoice()
3On Error GoTo Exception
4 
5 Dim xl As Object
6 Dim xl2 As Object
7 Dim TempPath As String
8 Dim Template As String
9 Dim SavePath As String
10 Dim FileName As String
11 TempPath = "C:\"
12 Template = TempPath & "雛型.xls"
13 SavePath = Environ("USERPROFILE") & "\デスクトップ\"
14 FileName = SavePath & "シートを別ファイルにコピー.xls"
15 
16 FileCopy Template, FileName
17 
18 Set xl = GetObject(FileName, "Excel.Sheet")
19 xl.Parent.Windows(1).Visible = True

続きを読む…»

7,600 views