シート名、名前付き範囲の有無を確認する関数を作成する
シート名、名前付き範囲の有無を確認する関数
Function chkName(chkFile As String, chkTBL As String) As Boolean Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;" & _ "Data Source=" & chkFile 'レコード件数をカウントするのでCursorLocationの設定をする myCon.CursorLocation = adUseClient 'Excelブックのスキーマ情報を取得 Set myRS = myCon.OpenSchema(adSchemaTables) 'TABLE_NAMEフィールドを元にフィルタをかける myRS.Filter = "TABLE_NAME = '" & chkTBL & "'" '対象となるレコードの件数でテーブルの有無を判定 If myRS.RecordCount > 0 Then chkName = True Else chkName = False End If myRS.Close: Set myRS = Nothing myCon.Close: Set myCon = Nothing End Function
ユーザー定義関数を利用する
Sub テーブルの存在確認() Dim myFile As String, myTable As String '確認したいファイルを指定 myFile = ThisWorkbook.Path & "\xls\DataBook.xls" '確認したいシート、名前付き範囲を指定 myTable = "商品マスタ$" '結果を表示 If chkName(myFile, myTable) = True Then MsgBox myTable & "は存在します。" Else MsgBox myTable & "は存在しません。" End If
OpenSchemaメソッドの結果から、TABLE_NAMEフィールドの値を元にフィルタをかけ、抽出されたレコードが1件以上あれば、すでにそのテーブル名が存在していると判断して結果を返す。