'シート名の一覧を返す(列挙順は保証できない) Function GetSheetNames(ByVal excelFile As String) As String() Dim cn As ADODB.Connection, rs As ADODB.Recordset Set cn = New ADODB.Connection cn.CursorLocation = adUseClient cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Extended Properties") = "Excel 12.0;HDR=NO;IMEX=1" cn.Open excelFile Set rs = cn.OpenSchema(adSchemaTables) Dim re As VBScript_RegExp_55.RegExp Dim ms As VBScript_RegExp_55.MatchCollection, rm As VBScript_RegExp_55.Match Set re = New VBScript_RegExp_55.RegExp re.Pattern = "^'?(.*)\$'?(#Print_Area|_xlnm#Print_Area)?$" Dim dict As Scripting.Dictionary Set dict = New Scripting.Dictionary Dim tableName As String Do Until rs.EOF tableName = rs.Collect("TABLE_NAME") '各種接尾辞を削ぎ落す Set ms = re.Execute(tableName) If ms.Count > 0 Then Set rm = ms.Item(0) tableName = rm.SubMatches(0) Else Debug.Print tableName End If dict(tableName) = CByte(0) rs.MoveNext Loop rs.Close cn.Close '「内部型式が String なバリアント型の一次元配列」を「文字列型の一次元配列」に変換 GetSheetNames = Split(Join(dict.Keys(), vbNullChar), vbNullChar) End Function
Set rs = cn.OpenSchema(adSchemaTables) GetSheetNames = rs.GetRows(-1) '二次元配列として返却 rs.Close cn.Close