特定の対象のスキーマ情報のみを取得する
Sub 特定のスキーマ情報取得() Dim myCon As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim myRS2 As New ADODB.Recordset Dim mySrc As String, i As Integer '接続先のExcelファイル mySrc = ThisWorkbook.Path & "\xls\DataBook.xls" '接続 With myCon .Provider = "Microsoft.Jet.OLEDB.4.0;" .Properties("Extended Properties") = "Excel 8.0;" .Open mySrc End With 'フィールド情報(COLUMNS 行セット)を全て取得 Set myRS = myCon.OpenSchema(adSchemaColumns) 'フィールド情報(COLUMNS 行セット)の一部を取得 Set myRS2 = myCon.OpenSchema(adSchemaColumns, Array(Empty, Empty, "社員", Empty)) 'myRSのフィールド名を書き出し For i = 1 To myRS.Fields.Count Cells(1, i) = myRS.Fields(i - 1).Name Next '取得した情報を転記 Range("A2").CopyFromRecordset myRS 'myRS2のフィールド名を書き出し For i = 1 To myRS.Fields.Count Cells(41, i) = myRS.Fields(i - 1).Name Next '取得した情報を転記 Range("A42").CopyFromRecordset myRS2 myRS.Close: Set myRS = Nothing myRS2.Close: Set myRS2 = Nothing myCon.Close: Set myCon = Nothing End Sub
SchemaEnum列挙型の定数によっては「制約列」を使って抽出を行った結果のみを得ることが可能。
「adSchemaColumns」では「TABLE_CATALOG」「TABLE_SCHEMA」「TABLE_NAME」「COLUMN_NAME」の4つの列をフィルタして結果を得ることができる。
制約列を使用して「社員」テーブルのフィールド情報のみ取得するには、以下のように記述する。
(制約列「TABLE_NAME」の値が、『社員』のレコードのみ抽出する。)
OpenSchema(adSchemaColumns, Array Empty, Empty, "社員",Empty))
制約列に何も抽出条件を指定しない場合には、Emptyキーワードを使用する。
実行結果 myRS
実行結果 myRS2