【问题标题】:Output data from query to Excel : unable to work on the data in Excel从查询输出数据到 Excel:无法处理 Excel 中的数据
【发布时间】:2020-02-28 20:34:44
【问题描述】:

我在从 Access 处理 Excel 文件时遇到问题。 我在 Access 数据库中创建了一个查询,并成功导出到一个特定的 Excel 文件(称为“Template.xlsx”)。该文件包含 2 张纸: - 名为“v_def”的表 1 包含一个模板 - 已导出查询的工作表 2(名称与查询相同)。

我正在尝试从 Access 中的宏中将查询中的数据放入模板中。请看下面的代码。

Public Sub COTATION_FORMAT()


    'Declare variables
    Dim WKB As Excel.Workbook
    Dim WKS As Excel.Worksheet
    Dim WksQuery As Excel.Worksheet
    Dim TimeStamp As String

    'Initialize variables
    Set WKB = Workbooks.Open(CurrentProject.Path & "\#Export\Template.xlsx")
    Set WKS = WKB.Sheets("V_DEF")
    Set WksQuery = WKB.Sheets("Q_EXPORT_COTATION")

    TimeStamp = FORMAT(CStr(Now), "dd.mm.yyyy_hh.mm.ss")


    On Error GoTo ErrHandle

    'Data for template left block
    With WKS
        .Range("C5").Value = WksQuery.Range("B2").Value
        .Range("C6").Value = WksQuery.Range("C2").Value
        .Range("B7").Value = WksQuery.Range("D2").Value
        .Range("B8").Value = WksQuery.Range("E2").Value
        .Range("A11").Value = WksQuery.Range("F2").Value
    End With

    'Data for template columns
    With WKS
        .Range("A17") = WKB.Sheets(2).Range("D2").Value
        .Range("B17") = WKB.Sheets(2).Range("G2").Value & " " & WKB.Sheets(1).Range("H2").Value & " " & WKB.Sheets(1).Range("I2").Value & " " & WKB.Sheets(1).Range("J2").Value & " " & WKB.Sheets(1).Range("K2").Value
        .Range("C17") = WKB.Sheets(2).Range("L2").Value & " " & WKB.Sheets(1).Range("M2").Value & " " & WKB.Sheets(1).Range("N2").Value & " " & WKB.Sheets(1).Range("O2").Value & " " & WKB.Sheets(1).Range("P2").Value
        '.Range("D17") = Wks.Sheets(2).Range("").Value
        .Range("E17") = WKB.Sheets(2).Range("Q2").Value
        .Range("F17") = WKB.Sheets(2).Range("R2").Value
        .Range("G17") = WKB.Sheets(2).Range("S2").Value
        .Range("H17") = WKB.Sheets(2).Range("T2").Value
        .Range("I17") = WKB.Sheets(2).Range("U2").Value
        .Range("J17") = WKB.Sheets(2).Range("V2").Value
        .Range("K17") = WKB.Sheets(2).Range("AC2").Value & " x " & WKB.Sheets(1).Range("AD2").Value & " x " & WKB.Sheets(1).Range("AE2").Value
        .Range("L17") = WKB.Sheets(2).Range("X2").Value
        .Range("M17") = WKB.Sheets(2).Range("W2").Value
        .Range("N17") = WKB.Sheets(2).Range("X2").Value
        .Range("O17") = Range("N17").Value * Range("J17").Value
        .Range("P17") = WKB.Sheets(2).Range("E2").Value
    End With

    'delete export data without impacting template
    'save as another file to preserve template
    WKB.Sheets(2).Delete
    WKB.SaveAs "Cotation_" & TimeStamp, xlWorkbookDefault
    'ending message
    MsgBox "Template done ! ", vbOKOnly + vbInformation, "ACCESS"



ExitHandle:
    WKB.Close
    Set WKS = Nothing
    Set WKB = Nothing
    Exit Sub

ErrHandle:
    MsgBox Err.Number & " - " & Err.Description, vbCritical, "RUNTIME ERROR"
    Resume ExitHandle

End Sub

问题是,我在运行此代码时没有任何错误,但 Excel 文件中没有任何反应。数据不会从一张纸复制到另一张纸。我在声明我的 Workbook 变量时一定做错了,但我看不到是什么。

如果有人知道我做错了什么,请随时分享:)

如果有帮助,我正在 Windows 10 计算机上使用 Office 365。在参考工具中,我检查了以下内容:

  • Microsoft Access 16.0 库
  • Microsoft Office 16.0 对象库
  • Microsoft Excel 16.0 对象库
  • OLE 自动化
  • VB 应用程序
  • Microsoft Office 16.0 Access 数据库引擎对象库

感谢您的宝贵时间,祝您有美好的一天!

【问题讨论】:

  • 声明并实例化一个将保存 Excel 应用程序的 xlApp 变量,例如Set xlApp = New Excel Application。然后从 xlApp 打开工作簿,将可见性设置为 True 并逐步执行代码。
  • 嗨科斯塔斯!我尝试了您的 xl App 方法,起初它不起作用,没有任何改变。原来,我忘记添加XlApp.visible = true,现在一切正常!谢谢你的帮助!!

标签: excel vba ms-access


【解决方案1】:

就像@Kostas K 所说,您需要一个Excel application 对象才能在Access 中使用Excel。

看起来像这样。

Dim XLA AS New Excel.Application
Dim WKB As Excel.Workbook

'Open workbook using the excel application object
Set WKB = XLA.Workbooks.Open(CurrentProject.Path & "\#Export\Template.xlsx")

有些人还喜欢后期绑定,后期绑定意味着您可以从 Access 应用程序中删除硬引用并使用任何可用的 Excel 版本。这样的话上面的代码就变成了这样

Dim XLA AS object
Dim WKB As object
SET XLA = CreateObject("Excel.Application")

'Open workbook using the excel application object
Set WKB = XLA.Workbooks.Open(CurrentProject.Path & "\#Export\Template.xlsx")

【讨论】:

  • 嗨,Krish,非常感谢您的解释,真的很有帮助!创建 Excel 应用程序并将其变为可见确实是解决方案!
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多