【问题标题】:Manipulating Excel sheet as Access query results将 Excel 工作表作为 Access 查询结果进行操作
【发布时间】:2021-11-01 16:26:28
【问题描述】:

我正在从 Access 运行查询并将结果导出到 Excel。就像我期望的那样工作。接下来我想做的是操作 Excel 文件(自动调整列、格式字段等)。我已经无数次地从 Excel 操作 Excel 工作表。但是,这是第一次从 Access 执行此操作。下面是我正在使用的代码。查询和导出运行良好。

我的问题是我无法选择/激活/操作 Excel。目前,唯一打开的 Excel 文件是查询结果。但是,我确信我的用户会打开多个 Excel 文件,所以我也需要针对这种情况进行编程。

DoCmd.OutputTo acOutputQuery, "Query1", acFormatXLSX, , True

Set xlapp = GetObject(, "Excel.Application")

MyReport = ""
MyReport = xlapp.workbooks(w).Name
xlapp.Workbook(MyReport).Activate
xlapp.Workbook(MyReport).worksheets(1).Activate
                        
Range(xlapp.Workbook(MyReport).worksheets(1).cells(1, 1), xlapp.Workbook(MyReport).worksheets(1).cells(1, 1)).Select

任何帮助或建议将不胜感激。提前感谢您的帮助............

【问题讨论】:

  • w 的 value 和 vartype 是什么?
  • @CDP1802..........w 是一个整数,是用户打开的工作簿的数量。谢谢…………
  • xlapp.Workbook(MyReport) 应该是 Workbookss。试试xlapp.Workbooks.(w).Sheets(1).Columns("A:Z").Autofit
  • @CDP1802.............我会在今天晚些时候试一试。谢谢你的建议..

标签: excel vba ms-access export-to-excel


【解决方案1】:

你可以从这样的事情开始。玩得开心!

使用提前装订

Sub Access_ControlExcelWorkbook_EarlyBinding()
    On Error GoTo errHandler
    
    Dim appExcel As New Excel.Application
    Dim xWb As Excel.Workbook
    Dim xWs As Excel.Worksheet
    Dim xRng As Excel.Range

    Dim wbPath As String: wbPath = "YourWorkbookPath"
    
    ' Exit if workbook don't  exist
    If Len(Dir(wbPath)) = 0 Then Exit Sub
    
    ' Open workbook
    Set xWb = appExcel.Workbooks.Open(wbPath)
    
    ' Show Excel
    appExcel.Visible = True
    
    ' Sheet to control
    Set xWs = xWb.Worksheets("Sheet1")
    
    ' Range to control
    Set xRng = xWs.Range("A10")
    
    ' Write value in range
    xRng.Value = "Control from Access"

    ' Auto fit columns
    xWs.Cells.EntireColumn.AutoFit
    
    ' Save workbook
    xWb.Save

exitRoutine:
    ' Close workbook
    xWb.Close False

    ' Close Excel
    appExcel.Quit
    
    Exit Sub

errHandler:
    Debug.Print Err.Description
    Resume exitRoutine
End Sub

使用后期绑定

Public Const xlCenter = -4108
    
Sub Access_ControlExcelWorkbook_LateBinding()
        On Error GoTo errHandler
        
        Dim appExcel As Object
        Dim xWb As Object
        Dim xWs As Object
        Dim xRng As Object
    
        Dim wbPath As String: wbPath = "YourWorkbookPath"
        
        ' Exit if workbook don't  exist
        If Len(Dir(wbPath)) = 0 Then Exit Sub
        
        ' Create an instance od Excel
        Set appExcel = CreateObject("Excel.Application")
            
        ' Copy the rest of the code from early Binding
 
        ' Center column G
         xWs.Columns("G:G").HorizontalAlignment = xlCenter

    End Sub

【讨论】:

  • 这是一个早期绑定的例子。我总是使用后期绑定引用,因为我制作的工具是供其他人使用的。如果他们没有适当的引用,提示:他们没有,那么他们将得到运行时错误。您还可以选择获取现有实例或创建新实例,具体取决于您使用的是GetObject 还是CreateObject
  • 我通常和你一样使用Late Binding!我通常从早期绑定开始,因为智能感知非常有用。然后转换为晚期绑定,因为在这种模式下你没有智能感知。因为你说这是你第一次从Access到Excel,我是在早期绑定的时候做的。我将使用后期绑定更新帖子!
  • @HackSlash............谢谢你的信息。感谢您的帮助............
  • @ElioFernandes ..........非常感谢。我很欣赏这些信息,明天早上第一件事就会尝试(因为这对我来说是工作日的结束)。我会让你知道的......
  • @Shaves!如果它有效并且有用,请不要忘记检查它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
相关资源
最近更新 更多