【发布时间】: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,现在一切正常!谢谢你的帮助!!