Access VBA ノート(サンプルコード)

Hide Tamura の Access VBA ノート

Access-VBA [ADO] レポートでのレコード抽出 Filter FilterOn

Private Sub cmd印刷_Click()
On Error GoTo Err_cmd印刷_Click

    Dim stDocName As String

    stDocName = "rpt個人確定申告管理"
    DoCmd.OpenReport stDocName, acPreview
        
    With Reports(stDocName)
    
        Select Case fr担当者.Value
    
            Case 1 '全員
                .FilterOn = False
    
            Case 2 '担当者1
                .Filter = "担当者ID = 1"
                .FilterOn = True
    
            Case 3 '担当者2
                .Filter = "担当者ID = 2"
                .FilterOn = True
    
            Case 4 '担当者3
                .Filter = "担当者ID = 3"
                .FilterOn = True
    
        End Select
    
    End With

Exit_cmd印刷_Click:
    Exit Sub

Err_cmd印刷_Click:
    MsgBox Err.Description
    Resume Exit_cmd印刷_Click
    
End Sub

 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ


 

Access-VBA [ADO] フォームでのレコード抽出 Filter FilterOn

レコード抽出
Me.Filter = 抽出条件
Me.FilterOn = True

抽出解除
Me.FilterOn = False


二つのオプショングループ(担当者 と 完了)から抽出を行う

Private Sub cmd抽出_Click()

    Dim bln完了 As Boolean

    Select Case Me.fr完了.Value

        Case 1 '未完了
            bln完了 = False

        Case 2 '完了
            bln完了 = True

    End Select
        
    Select Case fr担当者.Value
    
        Case 1 '全員
            If bln完了 = True Then
                Me.Filter = "完了 = true"
                Me.FilterOn = True
            Else
                Me.FilterOn = False
            End If
            
        Case 2 '担当者1
            Me.Filter = "担当者ID = 1 and 完了 = " & bln完了
            Me.FilterOn = True
        
        Case 3 '担当者2
            Me.Filter = "担当者ID = 2 and 完了 = " & bln完了
            Me.FilterOn = True
    
        Case 4 '担当者3
            Me.Filter = "担当者ID = 3 and 完了 = " & bln完了
            Me.FilterOn = True
    
    End Select
    
End Sub

Private Sub cmd抽出解除_Click()
    Me.fr担当者.Value = 1
    Me.fr完了.Value = 1
    Me.FilterOn = False
End Sub

Private Sub Form_Load()
    Me.fr担当者.Value = 1
    Me.fr完了.Value = 1
End Sub


 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ



Access-VBA DoCmd.GoToRecord 新規のレコードへ移動

Private Sub cmd新規_Click()
On Error GoTo Err_cmd新規_Click

    DoCmd.GoToRecord , , acNewRec

Exit_cmd新規_Click:
    Exit Sub

Err_cmd新規_Click:
    MsgBox Err.Description
    Resume Exit_cmd新規_Click
    
End Sub


expression.GoToRecord(ObjectType, ObjectName, Record, Offset)

ObjectType      省略可能

acActiveDataObject (既定値) 
acDataForm 
acDataFunction 
acDataQuery 
acDataServerView 
acDataStoredProcedure 
acDataTable 

Record      省略可能

acFirst 
acGoTo 
acLast 
acNewRec 
acNext (既定値) 
acPrevious 
この引数を指定しない場合は、定数 acNext (既定値) が使われます。

 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ



Access-VBA DoCmd.Close フォームを閉じる

Private Sub btn1_Click()
    DoCmd.Close acForm, Screen.ActiveForm.Name
End Sub

Private Sub btn1_Click()
    DoCmd.Close acForm, Me.Name
End Sub

ObjectType 省略可能
acDataAccessPage 
acDefault (既定値) 
acDiagram 
acForm 
acFunction 
acMacro 
acModule 
acQuery 
acReport 
acServerView 
acStoredProcedure 
acTable

Save 省略可能
acSaveNo 
acSavePrompt default
acSaveYes

 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ



Access-VBA DoCmd.TransferText テーブル/クエリをCSVファイルにエクスポート

Private Sub cmdエクスポート_Click()
On Error GoTo cmdエクスポート_Click_Err

    'カレントデータベースと同じフォルダに書き出し
    DoCmd.TransferText acExportDelim, "", "qryAprint個人顧客", CurrentProject.Path & "\qryAprint個人顧客.csv", False, ""
    Beep
    MsgBox "エクスポートを終了しました", vbInformation, "エクスポート"


cmdエクスポート_Click_Exit:
    Exit Sub

cmdエクスポート_Click_Err:
    MsgBox Error$
    Resume cmdエクスポート_Click_Exit

End Sub

カレントデータベースと同じフォルダに書き出ししたい場合は、CurrentProject.Path を指定しないと、
「ツール」-「オプション」-「全般」の『既定のデータベースフォルダ』に書き出される

第5引数 HasFieldNames  は、テキスト ファイルの 1 行目をフィールド名として使用する場合は、True (–1) を使います。テキスト ファイルの 1 行目をデータとして処理する場合は、False (0) を使います。この引数を指定しないと、False (既定値) が使われます。 


一つのフォームから、法人用、個人用、その他など、クエリを入れ替えてCSVで書き出す方法
DoCmd.OpenForm のOpenArgsプロパティを利用して Select Case ステートメントで分岐する

'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
'   フォームを開く
'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

Private Sub cmdAprint_Click()
On Error GoTo Err_cmdAprint_Click

    Dim stDocName As String
    Dim strRecordSource As String

    stDocName = "frmAprint"
    strRecordSource = "qryAprint個人顧客"
    
    DoCmd.OpenForm stDocName, , , , , , "個人"
    Forms(stDocName).RecordSource = strRecordSource
    Forms(stDocName).lblTitle.Caption = "個人顧客"

Exit_cmdAprint_Click:
    Exit Sub

Err_cmdAprint_Click:
    MsgBox Err.Description
    Resume Exit_cmdAprint_Click
    
End Sub


'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
'   CSVファイルにエクスポートします
'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

Private Sub cmdエクスポート_Click()
On Error GoTo cmdエクスポート_Click_Err

    Dim strCSV As String
    Dim strQuery As String
    
    strTitle = Me.lblTitle.Caption
    
    strCSV = CurrentProject.Path & "\" & strTitle & ".csv"

    Select Case Me.OpenArgs
    
        Case "個人"
            strQuery = "qryAprint個人顧客"
    
        Case "法人"
            strQuery = "qryAprint法人顧客"
        
        Case "その他"
            strQuery = "qryAprint顧客外年賀状データ"
    
    End Select

    'カレントデータベースと同じフォルダに書き出し
    DoCmd.TransferText acExportDelim, "", strQuery, strCSV, False, ""
    Beep
    MsgBox "エクスポートを終了しました", vbInformation, "エクスポート"


cmdエクスポート_Click_Exit:
    Exit Sub

cmdエクスポート_Click_Err:
    MsgBox Error$
    Resume cmdエクスポート_Click_Exit

End Sub

 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ


 

Access-VBA DoCmd.OpenForm フォームを開く

Private Sub cmdAprint_Click()
On Error GoTo Err_cmdAprint_Click

    Dim stDocName As String

    stDocName = "frmAprint個人顧客"
    DoCmd.OpenForm stDocName

Exit_cmdAprint_Click:
    Exit Sub

Err_cmdAprint_Click:
    MsgBox Err.Description
    Resume Exit_cmdAprint_Click
    
End Sub


DoCmd.OpenForm FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs

AcFormView
acNormal (既定)
acDesign
acFormDS
acPreview
acFormPivotChart
acFormPivotTable

WhereCondition 
SQL文のWHERE句からWEHERを除いた文字列

AcFormOpenDataModeクラス定数
acFormPropertySettings (既定)
acFormAdd
acFormEdit
acFormReadOnly

AcWindowMode クラスの定数
acDialog
acHidden
acIcon
acWindowNormal (既定値)
 
OpenArgs
開いたフォームに文字列を記憶させておける

例:ダイアログで開きたい時
DoCmd.OpenForm "フォーム名", , , , , acDialog


 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ



Access-VBA [イベント発生順] フォームを閉じる時のイベント発生順

フォームを閉じる時のイベント順
キャンセルできるのは、Unload のみ

Private Sub Form_Unload(Cancel As Integer)
End Sub
 
Private Sub Form_Deactivate()
End Sub
 
Private Sub Form_Close()
End Sub


 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ



Access-VBA [イベント発生順] フォームを開く時のイベント発生順

フォームを開く時のイベント順
キャンセルできるのは、Open のみ

Private Sub Form_Open(Cancel As Integer)
End Sub
 
Private Sub Form_Load()
End Sub
 
Private Sub Form_Resize()
End Sub
 
Private Sub Form_Activate()
End Sub
 
Private Sub Form_Current()
End Sub

 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ



Access-VBA オブジェクトの参照方法 アクティブな・全ての・セクションなど

開いている全てのフォーム・レポート
Application.Forms
Application.Reports

保存されている全てのフォーム・レポート
CurrentProject.AllForms
CurrentProject.AllReports

アクティブなフォーム・レポート・コントロール
Screen.ActiveForm
Screen.ActiveReport
Screen.ActiveControl 

フォーム・レポート上の全てのコントロール
Me.Controls

使用可能な全てのプリンタ
Application.Printers


フォームのセクション
myForm.Section(index)

index
0 acDetail フォームの [詳細] セクションまたはレポートの詳細セクション 
1 acHeader フォーム ヘッダーまたはレポート ヘッダー 
2 acFooter フォーム フッターまたはレポート フッター 
3 acPageHeader フォームのページ ヘッダーまたはレポートのページ ヘッダー 
4 acPageFooter フォームのページ フッターまたはレポートのページ フッター 
5 acGroupLevel1Header グループ レベル 1 のヘッダー セクション (レポートのみ) 
6 acGroupLevel1Footer グループ レベル 1 のフッター セクション (レポートのみ) 
7 acGroupLevel2Header グループ レベル 2 のヘッダー セクション (レポートのみ) 
8 acGroupLevel2Footer グループ レベル 2 のフッター セクション (レポートのみ) 


Private Sub btn1_Click()
    
    Dim c As Object

    For Each c In Application.Forms
        Debug.Print c.Name
    Next
     
    For Each c In Application.Reports
        Debug.Print c.Name
    Next

    For Each c In Application.Printers
        Debug.Print c.DeviceName
    Next

    For Each c In Me.Controls
        Debug.Print c.Name
    Next

    For Each c In CurrentProject.AllForms
        Debug.Print c.Name
    Next

    For Each c In CurrentProject.AllReports
        Debug.Print c.Name
    Next

End Sub


 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ


 

DAO Data Access Object その他の一覧メモ

カレントデータベース接続
Dim DB As DAO.Database
Set DB = CurrentDb

カレント以外のデータベース接続
Dim DB As DAO.Database
Set DB = OpenDatabase(CurrentProject.Path & "\Sample.mdb")

カレントレコード表示
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
RS![フィールド名].Value
RS![フィールド名]
RS!Fields("フィールド名")
RS!Fields.Item("フィールド名")
RS(インデックス番号)

テーブル名取得
Dim DB As DAO.Database
Set DB = CurrentDb
DB.TableDefs(インデックス番号).Name

フィールド名
Dim TD as TableDef
Set TD = DB.TableDefs!テーブル名
TD.Fields(インデックス番号).name

テーブルのフィールドの数
Dim TD as TableDef
Set TD = DB.TableDefs!テーブル名
TD.Fields.Count

レコードセットのフィールド数
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
RS.Fields.Count

テーブルのレコード数
Dim TD as TableDef
Set TD = DB.TableDefs!テーブル名
TD.RecordCount

レコードセットのレコード数
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
RS.RecordCount

カレントレコードの移動
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
RS.MoveFirst
RS.MoveNext
RS.Move(移動レコード数)
RS.MoveLast
RS.MovePrevious

BOF EOF 最初レコードの前、最後レコードの後
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
Do Until RS.EOF
RS.MoveNext
Loop
RS.MoveLast
Do Until RS.BOF
RS.MovePrevious
Loop
レコードが無い
If RS.BOF And RS.EOF Then MsgBox "レコードがない"
Find レコード検索
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenDynaset) '★ダイナセットかスナップショット
最初のレコードから検索条件で検索
RS.FindFirst "フィールド名=〇〇"
最後のレコードから検索条件で検索
RS.FindLast "フィールド名=〇〇"

If RS.NoMatch then MsgBox "条件を満たすレコード無し"

後へ次の検索
RS.FindNext
前へ次の検索
RS.FindPrevious

Seek 高速検索
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable) '★テーブルタイプ
RS.Index = "PrimaryKey"
RS.Seek "=", "1112"
If RS.NoMatch Then MsgBox "条件を満たすレコード無し"

Filter レコード抽出
Dim RS as DAO.Recordset
Dim RS2 as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenDynaset) '★ダイナセットかスナップショット
RS.Filter = "フィールド名 = '〇〇'"
Set RS2 = RS.OpenRecordset
If RS.EOF Then "条件を満たすレコード無し"

Sort レコード並替
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenDynaset) '★ダイナセットかスナップショット
RS.Sort = "フィールド1 DESC, フィールド2 ASC"
Set RS = RS.OpenRecordset

ブックマーク
Dim RS as DAO.Recordset
Dim BM as Variant
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
BM = RS.Bookmark
RS.MoveLast
RS.Bookmark = BM

カレントレコードの位置
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
Debug.Print RS.AbsolutePosition '1レコード目を0とした位置
Debug.Print RS.PercentPosition '全体を100としたパーセンテージ位置

レコード追加
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
With RS
.AddNew
!フィールド1 = ○○
!フィールド2 = □□
.Update
End With

レコード更新
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenDynaset) '★dbOpenDynaset
With RS
.Edit
!フィールド1 = ○○
!フィールド2 = □□
.Update
End With

レコード削除
Dim RS as DAO.Recordset
Set RS = DB.OpenRecordset("テーブル名", dbOpenTable)
RS.Delete

テーブル作成・フィールド作成
Dim TD as TableDef
Dim FD as DAO.Field
Set TD = DB.CreateTableDef("テーブル名")
With TD
  '----------------
.Fields.Append .CreateField("フィールド1", dbText, 4)
.Fields.Append .CreateField("フィールド2", dbLong)
  '----------------
Set FD = .CreateField
With FD
.Name = フィールド1
.Type = dbText
.Size = 4
End With
.Fields.Append FD
  '----------------
Set FD = .CreateField("フィールド1", dbText, 4)
.Fields.Append FD
End With
DB.TableDefs.Append TD

フォームのレコードからレコードセットクローンを作る '★CloneはADOではダメ
Dim RS as DAO.Recordset
Set FormName as String
FormName = "フォーム名"
DoCmd.OpenForm FormName, acNormal
Set RS =Forms(FormName).RecordsetClone

カレントレコードとフォームのレコードを連動
Dim RS as DAO.Recordset
Set FormName as String
FormName = "フォーム名"
DoCmd.OpenForm FormName, acNormal
Set RS = Forms(FormName).RecordsetClone '★CloneはADOではダメ
Forms(FormName).Bookmark = RS.Bookmark


 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ





記事検索
Access VBA 担当 Hide Tamura
■VBA Expert
VBA Expert Standard Crown
ExcelVBA Standard
Access VBA Standard
Excel2002 VBA Standard
■MICROSOFT OFFICE USER SPECIALIST
Microsoft Excel version2002 Expert
Microsoft Excel version2002


最新記事
Excelで作る経営計画
Excelで利益計画を立てましょう!会社にいくらの利益が必要で、その為の売上高は?

Excelで作る経営計画
Excel 関数 ノート
Excel関数を中心に、Excelの便利機能や、意外としらない使い方など書いていきます。

Excel 関数 ノート
Excel VBAノート
Hide Tamura の個人的なVBAノートです。

頻繁に使うVBAコードなどを記録しコピペして使う為に作りました。お役に立てるようでしたら、お使いください。

アクセスカウンター

    • ライブドアブログ