首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA Excel从关闭的文件中获取工作簿对象或通过工作表索引引用Excel SQL表

VBA Excel从关闭的文件中获取工作簿对象或通过工作表索引引用Excel SQL表
EN

Stack Overflow用户
提问于 2021-02-28 20:23:42
回答 2查看 171关注 0票数 0

我希望能够在不打开工作簿的情况下定义Workbook对象并获取有关其Worksheets对象的信息。

我有一个工作簿的名称/路径和一个表示Worksheet的索引,我想要获取工作表的名称。

此外,我希望这样做的原因是,我随后希望将已关闭工作簿中的工作表引用为可以使用SQL语句进行操作的excel表。

因此,最终我需要能够构造一个字符串,比如"SELECT * FROM Sheet1$“,其中"Sheet1”是已知索引引用的已关闭工作簿中的工作表的名称。

因此,一个更精确的问题是,我是否可以按索引而不是名称来引用SQL语句中的表?

但如果不能,是否可以将工作表对象设置为已关闭工作簿中的工作表?

这是可行的,但显然我会打开和关闭文件。感谢您的帮助/见解

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-28 21:31:30

这是一种无需打开工作簿即可获取工作表名称以及工作簿中任何命名区域的名称的方法。

不确定它如何/是否与工作表索引一起工作。

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-02-28 23:56:16

使用Dao,您可以通过索引号获取工作表名称。索引从0开始。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66409059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档