【问题标题】:Accessing Field Value in Recordset -- Access VBA访问记录集中的字段值——访问 VBA
【发布时间】:2012-05-25 03:55:11
【问题描述】:

这就是我想要做的事情,如果我走错了方向,我深表歉意。我正在尝试遍历存储在表 t_Directory 中的文件路径,如果文件扩展名是“xlsx”,则打开 Excel 文件并使用 Excel 工作表的 FileID 和工作表计数以及工作表名称更新另一个名为 t_SheetInfo 的表。如果有更有效的方法,有人会花一分钟时间检查我到目前为止所做的事情或引导我朝着正确的方向前进吗?我不是 100% 确定我知道自己在做什么。一如既往,提前感谢您的帮助!

Dim db As DAO.Database
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim xlWS As Excel.Worksheet

Private Sub CycleThroughWorkSheets()
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim sSQL1 As String
Dim sSQL2 As String
Dim sSQL3 As String
Dim rsFilePath As String
Dim rsWSName As String

Set db = CurrentDB

sSQL1 = "SELECT t_Directory.FileID, t_Directory.FilePath FROM t_Directory " & _
        "WHERE (((t_Directory.FileExtension)=""'xlsx'""))"
Set rs = db.OpenRecordset("sSQL1", dbOpenDynaset)
    With rs
        rs.MoveFirst
            Do While Not rs.EOF
                rsFilePath = rs.Fields("[FilePath]")
                OpenWorkBook (rsFilePath)
Set rs2 = db.OpenRecordset("t_SheetInfo", dbOpenDynaset)
    With rs2
        rs2.MoveFirst
            Do While Not rs2.EOF
                rs2.AddNew
                rs2.Fields("FileID") = rs.Fields(1)
                rs2.Fields("[SheetIndex]") = WorkSheetCount(rsFilePath)
                rs2.Fields("[SheetName]") = WorkSheetName(WorkSheetCount)
                rs2.Update
            Next
            Loop
    End With
    End With
Set rs = Nothing
Set rs2 = Nothing
End Sub

Public Function WorkSheetCount(rsFilePath As String) As Integer
Set xlWB = xlApp.Workbooks.Open(rsFilePath)
      WorkSheetCount = xlWB.Sheets.Count(rsFilePath)
      Debug.Print "WorkSheetCount : " & WorkSheetCount
End Function

Public Function WorkSheetName(WorkSheetCount As Integer) As String
Set xlWB = xlApp.Workbooks.Open(rsFilePath)
      WorkSheetName = Worksheets(WorkSheetCount).Name
      Debug.Print "WorkSheetName : " & WorkSheetName
End Function

【问题讨论】:

    标签: ms-access automation vba


    【解决方案1】:

    在这些线路上尝试一些东西。逐步进行。

    Dim xlApp As New Excel.Application
    Dim xlWB As Excel.Workbook
    Dim sh As Object ''Some sheets may be charts
    Dim rs As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim sSQL1 As String
    Dim sSQL2 As String
    Dim sSQL3 As String
    Dim rsFilePath As String
    Dim rsWSName As String
    
    Set db = CurrentDb
    xlApp.Visible = True
    
    sSQL1 = "SELECT t_Directory.FileID, t_Directory.FilePath FROM t_Directory " & _
            "WHERE t_Directory.FileExtension='.xlsx'"
    Set rs2 = db.OpenRecordset("t_SheetInfo", dbOpenDynaset)
    
    Set rs = db.OpenRecordset(sSQL1, dbOpenDynaset)
    Do While Not rs.EOF
        rsFilePath = rs.Fields("[FilePath]")
        Set xlWB = xlApp.Workbooks.Open(rsFilePath)
    
        For Each sh In xlWB.Sheets
            rs2.AddNew
            rs2.Fields("FileID") = rs.Fields("FileID")
            rs2.Fields("[SheetIndex]") = sh.Index
            rs2.Fields("[SheetName]") = sh.Name
            rs2.Update
        Next
        rs.MoveNext
        xlWB.Close False
    Loop
    Set rs = Nothing
    Set rs2 = Nothing
    xlApp.Quit
    

    【讨论】:

    • 雷姆一如既往,再次感谢您!我将不得不将您的代码与我的代码进行比较,并确保我完全理解它,但这正是我需要的。再次感谢您!
    • 谢谢@fionnuala - 这不是我遇到的问题,但它是我的问题的第一个 Google 搜索结果并回答了我的问题!
    猜你喜欢
    • 2014-05-12
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2015-02-09
    相关资源
    最近更新 更多