Excel VBAでオブジェクト指向プログラミング(Access VBA編)

2024-01-05

■Access VBAのオブジェクトについて

MicrosoftからAccessの機能を利用するためのオブジェクト群が提供されていますが、下位オブジェクト(サブクラス)の種類が非常に多いため、最上位のApplicationオブジェクトに絞って、メソッドとプロパティの一覧を掲載します。
⇒詳細はMicrosoftのサイト(Office VBA リファレンス(Access))を参照して下さい。

Applicationオブジェクトのメソッド

Applicationオブジェクトで提供されているメソッドおよび定義内容は、下表の通りです。

AccessErrorメソッド
Function AccessError(ErrorNumber)
AddToFavoritesメソッド
Sub AddToFavorites()
BuildCriteriaメソッド
Function BuildCriteria(Field As String, FieldType As Integer, Expression As String) As String
CloseCurrentDatabaseメソッド
Sub CloseCurrentDatabase()
CodeDbメソッド
Function CodeDb() As Database
ColumnHistoryメソッド
Function ColumnHistory(TableName As String, ColumnName As String, queryString As String) As String
CompactRepairメソッド
Function CompactRepair(SourceFile As String, DestinationFile As String, [LogFile As Boolean = False]) As Boolean
ConvertAccessProjectメソッド
Sub ConvertAccessProject(SourceFilename As String, DestinationFilename As String, DestinationFileFormat As AcFileFormat)
CreateAccessProjectメソッド
Sub CreateAccessProject(filepath As String, [Connect])
CreateAdditionalDataメソッド
Function CreateAdditionalData() As AdditionalData
CreateControlメソッド
Function CreateControl(FormName As String, ControlType As AcControlType, [Section As AcSection = acDetail], [Parent], [ColumnName], [Left], [Top], [Width], [Height]) As Control
CreateFormメソッド
Function CreateForm([Database], [FormTemplate]) As Form
CreateGroupLevelメソッド
Function CreateGroupLevel(ReportName As String, Expression As String, Header As Integer, Footer As Integer) As Long
CreateReportメソッド
Function CreateReport([Database], [ReportTemplate]) As Report
CreateReportControlメソッド
Function CreateReportControl(ReportName As String, ControlType As AcControlType, [Section As AcSection = acDetail], [Parent], [ColumnName], [Left], [Top], [Width], [Height]) As Control
CurrentDbメソッド
Function CurrentDb() As Database
CurrentUserメソッド
Function CurrentUser() As String
DAvgメソッド
Function DAvg(Expr As String, Domain As String, [Criteria])
DCountメソッド
Function DCount(Expr As String, Domain As String, [Criteria])
DDEExecuteメソッド
Sub DDEExecute(ChanNum, Command As String)
DDEInitiateメソッド
Function DDEInitiate(Application As String, Topic As String)
DDEPokeメソッド
Sub DDEPoke(ChanNum, Item As String, Data As String)
DDERequestメソッド
Function DDERequest(ChanNum, Item As String) As String
DDETerminateメソッド
Sub DDETerminate(ChanNum)
DDETerminateAllメソッド
Sub DDETerminateAll()
DefaultWorkspaceCloneメソッド
Function DefaultWorkspaceClone() As Workspace
DeleteControlメソッド
Sub DeleteControl(FormName As String, ControlName As String)
DeleteReportControlメソッド
Sub DeleteReportControl(ReportName As String, ControlName As String)
DFirstメソッド
Function DFirst(Expr As String, Domain As String, [Criteria])
DLastメソッド
Function DLast(Expr As String, Domain As String, [Criteria])
DLookupメソッド
Function DLookup(Expr As String, Domain As String, [Criteria])
DMaxメソッド
Function DMax(Expr As String, Domain As String, [Criteria])
DMinメソッド
Function DMin(Expr As String, Domain As String, [Criteria])
DStDevメソッド
Function DStDev(Expr As String, Domain As String, [Criteria])
DStDevPメソッド
Function DStDevP(Expr As String, Domain As String, [Criteria])
DSumメソッド
Function DSum(Expr As String, Domain As String, [Criteria])
DVarメソッド
Function DVar(Expr As String, Domain As String, [Criteria])
DVarPメソッド
Function DVarP(Expr As String, Domain As String, [Criteria])
Echoメソッド
Sub Echo(EchoOn As Integer, [bstrStatusBarText As String])
EuroConvertメソッド
Function EuroConvert(Number As Double, SourceCurrency As String, TargetCurrency As String, [FullPrecision], [TriangulationPrecision]) As Double
Evalメソッド
Function Eval(StringExpr As String)
ExportNavigationPaneメソッド
Sub ExportNavigationPane(Path As String)
ExportXMLメソッド
Sub ExportXML(ObjectType As AcExportXMLObjectType, DataSource As String, [DataTarget As String], [SchemaTarget As String], [PresentationTarget As String], [ImageTarget As String], [Encoding As AcExportXMLEncoding = acUTF8], [OtherFlags As AcExportXMLOtherFlags], [WhereCondition As String], [AdditionalData])
FollowHyperlinkメソッド
Sub FollowHyperlink(Address As String, [SubAddress As String], [NewWindow As Boolean = False], [AddHistory As Boolean = True], [ExtraInfo], [Method As MsoExtraInfoMethod], [HeaderInfo As String])
GetHiddenAttributeメソッド
Function GetHiddenAttribute(ObjectType As AcObjectType, ObjectName As String) As Boolean
GetOptionメソッド
Function GetOption(OptionName As String)
GUIDFromStringメソッド
Function GUIDFromString(String)
HtmlEncodeメソッド
Function HtmlEncode(PlainText, [Length]) As String
hWndAccessAppメソッド
Function hWndAccessApp() As Long
HyperlinkPartメソッド
Function HyperlinkPart(Hyperlink, [Part As AcHyperlinkPart = acDisplayedValue]) As String
ImportNavigationPaneメソッド
Sub ImportNavigationPane(Path As String, [fAppendOnly As Boolean = False])
ImportXMLメソッド
Sub ImportXML(DataSource As String, [ImportOptions As AcImportXMLOption = acStructureAndData])
LoadCustomUIメソッド
Sub LoadCustomUI(CustomUIName As String, CustomUIXML As String)
LoadPictureメソッド
Function LoadPicture(FileName As String) As Object
NewAccessProjectメソッド
Sub NewAccessProject(filepath As String, [Connect])
NewCurrentDatabaseメソッド
Sub NewCurrentDatabase(filepath As String, [FileFormat As AcNewDatabaseFormat = acNewDatabaseFormatUserDefault], [Template], [SiteAddress As String], [ListID As String])
Nzメソッド
Function Nz(Value, [ValueIfNull])
OpenAccessProjectメソッド
Sub OpenAccessProject(filepath As String, [Exclusive As Boolean = False])
OpenCurrentDatabaseメソッド
Sub OpenCurrentDatabase(filepath As String, [Exclusive As Boolean = False], [bstrPassword As String])
PlainTextメソッド
Function PlainText(RichText, [Length]) As String
Quitメソッド
Sub Quit([Option As AcQuitOption = acQuitSaveAll])
RefreshDatabaseWindowメソッド
Sub RefreshDatabaseWindow()
RefreshTitleBarメソッド
Sub RefreshTitleBar()
Runメソッド
Function Run(Procedure As String, [Arg1], [Arg2], [Arg3], [Arg4], [Arg5], [Arg6], [Arg7], [Arg8], [Arg9], [Arg10], [Arg11], [Arg12], [Arg13], [Arg14], [Arg15], [Arg16], [Arg17], [Arg18], [Arg19], [Arg20], [Arg21], [Arg22], [Arg23], [Arg24], [Arg25], [Arg26], [Arg27], [Arg28], [Arg29], [Arg30])
RunCommandメソッド
Sub RunCommand(Command As AcCommand)
SetDefaultWorkgroupFileメソッド
Sub SetDefaultWorkgroupFile(Path As String)
SetHiddenAttributeメソッド
Sub SetHiddenAttribute(ObjectType As AcObjectType, ObjectName As String, fHidden As Boolean)
SetOptionメソッド
Sub SetOption(OptionName As String, Setting)
StringFromGUIDメソッド
Function StringFromGUID(Guid)
SysCmdメソッド
Function SysCmd(Action As AcSysCmdAction, [Argument2], [Argument3])
TransformXMLメソッド
Sub TransformXML(DataSource As String, TransformSource As String, OutputTarget As String, [WellFormedXMLOutput As Boolean = False], [ScriptOption As AcTransformXMLScriptOption = acPromptScript])

Applicationオブジェクトのプロパティ

Applicationオブジェクトで提供されているプロパティおよび定義内容は、下表の通りです。

AnswerWizardプロパティ(読み取り専用)
Property AnswerWizard As AnswerWizard
Applicationプロパティ(読み取り専用)
Property Application As Application
Assistanceプロパティ(読み取り専用)
Property Assistance As IAssistance
Assistantプロパティ(読み取り専用)
Property Assistant As Assistant
AutoCorrectプロパティ(読み取り専用)
Property AutoCorrect As AutoCorrect
AutomationSecurityプロパティ
Property AutomationSecurity As MsoAutomationSecurity
BrokenReferenceプロパティ(読み取り専用)
Property BrokenReference As Boolean
Buildプロパティ(読み取り専用)
Property Build As Long
CodeContextObjectプロパティ(読み取り専用)
Property CodeContextObject As Object
CodeDataプロパティ(読み取り専用)
Property CodeData As CodeData
CodeProjectプロパティ(読み取り専用)
Property CodeProject As CodeProject
COMAddInsプロパティ(読み取り専用)
Property COMAddIns As COMAddIns
CommandBarsプロパティ(読み取り専用)
Property CommandBars As CommandBars
CurrentDataプロパティ(読み取り専用)
Property CurrentData As CurrentData
CurrentObjectNameプロパティ(読み取り専用)
Property CurrentObjectName As String
CurrentObjectTypeプロパティ(読み取り専用)
Property CurrentObjectType As AcObjectType
CurrentProjectプロパティ(読み取り専用)
Property CurrentProject As CurrentProject
DBEngineプロパティ(読み取り専用)
Property DBEngine As DBEngine
DoCmdプロパティ(読み取り専用)
Property DoCmd As DoCmd
FeatureInstallプロパティ
Property FeatureInstall As MsoFeatureInstall
FileDialogメソッド(読み取り専用)
Property FileDialog(dialogType As MsoFileDialogType) As FileDialog
Formsプロパティ(読み取り専用)
Property Forms As Forms
IsCompiledプロパティ(読み取り専用)
Property IsCompiled As Boolean
LanguageSettingsプロパティ(読み取り専用)
Property LanguageSettings As LanguageSettings
MacroErrorプロパティ(読み取り専用)
Property MacroError As MacroError
MenuBarプロパティ
Property MenuBar As String
Modulesプロパティ(読み取り専用)
Property Modules As Modules
Nameプロパティ(読み取り専用)
Property Name As String
NewFileTaskPaneプロパティ(読み取り専用)
Property NewFileTaskPane As NewFile
Parentプロパティ(読み取り専用)
Property Parent As Object
Printerプロパティ
Property Printer As Printer
Printersプロパティ(読み取り専用)
Property Printers As Printers
ProductCodeプロパティ(読み取り専用)
Property ProductCode As String
Referencesプロパティ(読み取り専用)
Property References As References
Reportsプロパティ(読み取り専用)
Property Reports As Reports
Screenプロパティ(読み取り専用)
Property Screen As Screen
ShortcutMenuBarプロパティ
Property ShortcutMenuBar As String
TempVarsプロパティ(読み取り専用)
Property TempVars As TempVars
UserControlプロパティ
Property UserControl As Boolean
VBEプロパティ(読み取り専用)
Property VBE As VBE
Versionプロパティ(読み取り専用)
Property Version As String
Visibleプロパティ
Property Visible As Boolean

■Accessのオブジェクトを使用するための事前準備

Accessのオブジェクトを使用するための事前準備は、以下の3ステップです。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。

①ライブラリの参照設定
Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでMicrosoft Access x.x Object Libraryのチェックボックスにチェックを入れ、[OK]ボタンを押下。

②オブジェクト変数の定義
プログラムの宣言部でオブジェクト変数を定義。

  1. Dim ac As Object

③インスタンスの生成
プログラムの処理部でインスタンスを生成。

  1. Set ac = New Access.Application
  2. 'ここにAccessを使用した処理を記述
  3. Set ac = Nothing

(参考)「Set ac = New Access.Application」の部分を「Set ac = CreateObject(“Access.Application")」と記述すれば、ステップ①(ライブラリの参照設定)は不要です。

■Accessデータベースからデータを取得する処理

ApplicationオブジェクトのDBEngineプロパティにより、DAOのDBEngineオブジェクトを取得できますので、それ以降はDAOの機能を利用して処理を行うことができます。
ここではAccessのオブジェクトからDAOでデータベースをオープンし、レコードを読み出す処理について、詳細な手順を説明します。
⇒DAOの詳細については、Excel VBAでオブジェクト指向プログラミング(DAO編)を参照して下さい。

データベースのオープン

DBEngineオブジェクトのOpenDatabaseメソッドを実行し、Databaseオブジェクトを作成します。

  1. dbe.OpenDatabase(Name, [Options], [ReadOnly], [Connect])

引数として指定できる項目は下表の通りですが、指定必須の引数はNameだけです。

引数 説明
Name データベースのパス
Options True:排他モード/False:共有モード(既定値)
ReadOnly True:読み取り専用)/False:読み取り/書き込み(既定値)
Connect パスワードなどさまざまな接続情報を指定

レコードの読み出し

DatabaseオブジェクトのOpenRecordsetメソッドを実行し、Recordsetオブジェクトを作成します。

  1. db.OpenRecordset(Name, [Type], [Options], [LockEdit])

引数として指定できる項目は下表の通りですが、指定必須の引数はNameだけです。

引数 説明
Name Recordsetの取得元(テーブル名、クエリ名、SQL)を指定
Type Recordsetオブジェクトの種類を指定
Options Recordsetオブジェクトの特性を指定
LockEdit レコードロックの種類を指定

Accessデータベースから検索条件と一致したレコードを読み出し

ExcelシートのA列に格納された氏名を基に、Accessの住所録を検索し、ExcelシートのB列に郵便番号、C列に住所をセットするツールです。

行番号7でAccess.ApplicationオブジェクトのDBEngineプロパティから、DAOのDBEngineオブジェクトを取得しています。
行番号10でDatabaseオブジェクトのOpenRecordsetメソッドにSQLを指定し、SELECT文のWHERE句で条件式を指定しています。
引用符が入れ子になっていてわかり難いですが、WHERE句の部分は『WHERE 氏名=’○□ △☆’』といった形式です。

  1. Dim sht, ac, dbe, db, rs As Object
  2. Dim i As Integer
  3. Private Sub Sample1()
  4.     Set sht = ActiveSheet
  5.     Set ac = New Access.Application
  6.     Set dbe = ac.DBEngine
  7.     Set db = dbe.OpenDatabase(“C:\work\住所録.mdb")
  8.     For i = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
  9.         Set rs = db.OpenRecordset(“SELECT 氏名,郵便番号,住所 from 住所録 WHERE 氏名='" & sht.Cells(1, 1) & “'")
  10.         If rs.EOF = False Then
  11.             sht.Cells(1, 2) = rs.Fields(“郵便番号")
  12.             sht.Cells(1, 3) = rs.Fields(“住所")
  13.         End If
  14.     Next i
  15.     Set rs = Nothing
  16.     db.Close
  17.     Set db = Nothing
  18.     Set dbe = Nothing
  19.     Set ac = Nothing
  20. End Sub

Accessデータベースから全レコードを読み出し

単純にAccessの住所録を全件読み出し、Excelシートに出力するツールです。

行番号7でAccess.ApplicationオブジェクトのDBEngineプロパティから、DAOのDBEngineオブジェクトを取得しています。
行番号9でDatabaseオブジェクトのOpenRecordsetメソッドにSQLを指定し、全レコードを読み出しています。
行番号10はExcelの機能で、RangeオブジェクトのCopyFromRecordsetメソッドを使用しています。

  1. Dim sht, ac, dbe, db, rs As Object
  2. Dim i As Integer
  3. Private Sub Sample2()
  4.     Set sht = ActiveSheet
  5.     Set ac = New Access.Application
  6.     Set dbe = ac.DBEngine
  7.     Set db = dbe.OpenDatabase(“C:\work\住所録.mdb")
  8.     Set rs = db.OpenRecordset(“SELECT 氏名,郵便番号,住所1,住所2,住所3 from 住所録")
  9.     sht.Cells(1, 1).CopyFromRecordset rs
  10.     Set rs = Nothing
  11.     db.Close
  12.     Set db = Nothing
  13.     Set dbe = Nothing
  14.     Set ac = Nothing
  15. End Sub

Accessデータベースのテーブル名およびフィールド名を読み出し

Accessデータベースのテーブル名とフィールド名を一覧にしてExcelシートに出力するツールです。

行番号7でAccess.ApplicationオブジェクトのDBEngineプロパティから、DAOのDBEngineオブジェクトを取得しています。
行番号10でDatabaseオブジェクトのTableDefsプロパティでTableDefsコレクションを取得し、行番号11でTableDefオブジェクトのNameプロパティでテーブル名を取得しています。
また、行番号12でTableDefオブジェクトのFieldsプロパティでFieldsコレクションを取得し、行番号13でFieldオブジェクトのNameプロパティでフィールド名を取得しています。

  1. Dim sht, ac, dbe, db, t, f As Object
  2. Dim i As Integer
  3. Private Sub Sample3()
  4.     Set sht = ActiveSheet
  5.     Set ac = New Access.Application
  6.     Set dbe = ac.DBEngine
  7.     Set db = dbe.OpenDatabase(“C:\work\住所録.mdb")
  8.     i = 1
  9.     For Each t In db.TableDefs
  10.         sht.Cells(i, 1) = t.Name
  11.         For Each f In t.Fields
  12.             sht.Cells(i, 2) = f.Name
  13.             i = i + 1
  14.         Next f
  15.     Next t
  16.     db.Close
  17.     Set db = Nothing
  18.     Set dbe = Nothing
  19.     Set ac = Nothing
  20. End Sub

■Accessの定義情報を取得する処理

ApplicationオブジェクトのCurrentDataプロパティにより、CurrentDataオブジェクトを取得すると、下表のような定義情報のコレクションを取得することができます。
ここでは定義情報の一覧を表示する処理について、詳細な手順を説明します。

定義情報のコレクション

CurrentDataオブジェクトのプロパティにより、下表のコレクションを取得することができます。

コレクション 説明
AllDatabaseDiagramsコレクション 全てのデータベースダイアグラム
AllFunctionsコレクション 全ての関数
AllQueriesコレクション 全てのクエリ
AllStoredProceduresコレクション 全てのストアドプロシジャ
AllTablesコレクション 全てのテーブル
AllViewsコレクション 全てのビュー

AllTablesコレクションからテーブル名の一覧を取得

AllTablesコレクションからテーブル名を一覧にしてExcelシートに出力するツールです。

行番号8でAccess.ApplicationオブジェクトのCurrentDataプロパティから、CurrentDataオブジェクトを取得しています。
行番号10でCurrentDataオブジェクトのAllTablesプロパティでAllTablesコレクションを取得し、行番号11でTableオブジェクトのNameプロパティでテーブル名を取得しています(※)。

  1. Dim sht, ac, db, t As Object
  2. Dim i As Integer
  3. Private Sub Sample4()
  4.     Set sht = ActiveSheet
  5.     Set ac = New Access.Application
  6.     ac.OpenCurrentDatabase (“C:\work\住所録.mdb")
  7.     Set db = ac.CurrentData
  8.     i = 1
  9.     For Each t In db.AllTables
  10.         sht.Cells(i, 1) = t.Name
  11.         i = i + 1
  12.     Next t
  13.     ac.CloseCurrentDatabase
  14.     Set db = Nothing
  15.     Set ac = Nothing
  16. End Sub

(※)All~コレクションから取得する各要素(オブジェクト)については、AccessObjectという名称で下表のプロパティが定義されています。

CurrentViewプロパティ(読み取り専用)
Property CurrentView As AcCurrentView
DateCreatedプロパティ(読み取り専用)
Property DateCreated As Date
DateModifiedプロパティ(読み取り専用)
Property DateModified As Date
FullNameプロパティ
Property FullName As String
IsLoadedプロパティ(読み取り専用)
Property IsLoaded As Boolean
Nameプロパティ(読み取り専用)
Property Name As String
Parentプロパティ(読み取り専用)
Property Parent As Object
Propertiesプロパティ(読み取り専用)
Property Properties As AccessObjectProperties
Typeプロパティ(読み取り専用)
Property Type As AcObjectType

 

国本温子(著),緑川吉行(著),できるシリーズ編集部(著)
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ

大村あつし(著),古川順平(著)
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ

高橋宣成(著)
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ