【发布时间】:2021-05-30 04:56:49
【问题描述】:
我希望能够在不打开工作簿的情况下定义一个 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
【问题讨论】:
-
嗨@astentx 感谢您抽出宝贵的时间:是的,这就是我正在做的,但问题是我只知道工作表序数,而不知道工作表名称。我查看了您引用的链接,但我没有看到如何使用工作表序数来定义输入表范围
-
工作表“序数”到底是什么意思?
-
为什么不使用 Power-Query? support.microsoft.com/en-us/office/…
-
@JohnnieL 这是自 2016 年以来 Excel 365 中的一项功能。它允许您从已关闭的工作簿中提取工作表的内容,然后按照您认为合适的方式操作数据。甚至添加您自己的自定义字段。值得你花时间学习它