我希望能够在不打开工作簿的情况下定义Workbook
对象并获取有关其Worksheets
对象的信息。
我有一个工作簿的名称/路径和一个表示Worksheet
的索引,我想要获取工作表的名称。
此外,我希望这样做的原因是,我随后希望将已关闭工作簿中的工作表引用为可以使用SQL语句进行操作的excel表。
因此,最终我需要能够构造一个字符串,比如"SELECT * FROM Sheet1$“,其中"Sheet1”是已知索引引用的已关闭工作簿中的工作表的名称。
因此,一个更精确的问题是,我是否可以按索引而不是名称来引用SQL语句中的表?
但如果不能,是否可以将工作表对象设置为已关闭工作簿中的工作表?
这是可行的,但显然我会打开和关闭文件。感谢您的帮助/见解
Option Explicit
Sub get_sheetname_from_index()
Dim full_path_and_name As String
full_path_and_name = Application.ThisWorkbook.Path & _
Application.PathSeparator & "test_file.xlsx"
Dim index As Long
index = 1
Dim wb As Workbook
Set wb = Application.Workbooks.Open(full_path_and_name, ReadOnly:=True)
Dim closed_file_sheet_name As String
closed_file_sheet_name = wb.Worksheets(index).Name
Dim x As Worksheet
Set x = wb.Sheets(1)
wb.Close savechanges:=False
Debug.Print closed_file_sheet_name
' USe the file name here
Dim connection As New ADODB.connection
connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data _
Source= " & full_path_and_name & _
";Extended Properties=""Excel 12.0;HDR=YES;"""
connection.Open
Dim sql As String
sql = "SELECT * FROM [" & closed_file_sheet_name & "$]"
Dim rs As New ADODB.Recordset
rs.Open sql, connection
While Not rs.EOF
Debug.Print rs.Fields(0).Name, rs.Fields(0).Value
rs.MoveNext
Wend
rs.Close
connection.Close
End Sub
发布于 2021-02-28 21:31:30
这是一种无需打开工作簿即可获取工作表名称以及工作簿中任何命名区域的名称的方法。
不确定它如何/是否与工作表索引一起工作。
Sub GetSheetAndRangeNames()
Dim con As Object
Dim cat As Object
Dim tbl As Object
Set con = CreateObject("ADODB.Connection")
con.Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=c:\Users\Norie\Documents\Test.xlsx;Extended Properties='Excel 12.0 Xml';"
con.Open
Set cat = CreateObject("ADOX.Catalog")
Set cat.ActiveConnection = con
For Each tbl In cat.Tables
Debug.Print tbl.Name
Next tbl
End Sub
发布于 2021-02-28 23:56:16
使用Dao,您可以通过索引号获取工作表名称。索引从0开始。
Sub getDaoTableName()
Dim fn As String
Dim conn As Object, db As Object
Dim tbl As Object
fn = ThisWorkbook.Path & Application.PathSeparator & "test_file.xlsx"
Set conn = CreateObject("DAO.DBEngine.120")
Set db = conn.OpenDatabase(fn, False, True, "Excel 12.0 Xml;HDR=Yes;")
Set tbl = db.TableDefs(0) ' 0 is Sheets(1) : 1 is Sheets(2)
MsgBox tbl.Name
Set db = Nothing
Set conn = Nothing
End Sub
https://stackoverflow.com/questions/66409059
复制相似问题