尝试从 Access 运行 Excel 以格式化导出的表,获取所需的对象错误
Posted
技术标签:
【中文标题】尝试从 Access 运行 Excel 以格式化导出的表,获取所需的对象错误【英文标题】:Trying to Run Excel from Access to Format Exported Table, Get Object Required Error 【发布时间】:2017-02-23 20:46:23 【问题描述】:我正在尝试自动将表格从 Access 导出到 Excel 报告中。根据我对 Stack Overflow 的研究,建议有一个用于导出的 VBA 代码,然后是另一个用于格式化 Excel 工作表的代码。我非常喜欢从 Access 运行 Excel 工作表的格式,所以我只需按下一个按钮,事情就会被导出。我绝对讨厌运行这份报告,因为当我有其他紧迫的事情要做时,每个人都想要它“现在”。这是公司总裁办公室的,所以像我这样的苦工只能跳过去。
我在这里找到了这个建议的代码:https://***.com/a/14401307/6850333,但我收到“对象变量或未设置块变量”的错误
Sub FormatACTrade(strFilePath As String) 'I'm running this from another _
sub that exports the tables to excel, I know functions are needed for _
an output but this is a private variable that I'm using within a modle_
so should be ok??
On Error GoTo ErrorHandler
Dim objFile As Object
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.DisplayAlerts = False
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(strFilePath)
If objFso.GetExtensionName(objFile.Path) = "xlsx" Then
Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)
For Each sh In objWorkbook.Worksheets
If sh.UsedRange.Address <> "$A$1" Or sh.Range("A1") <> "" Then
With sh
[Do stuff]
End With
End If
Next
objWorkbook.Close True
End If
End Sub
感谢任何建议。我是编码新手,我不得不承认有关 vba 对象、脚本和应用程序的文档很难理解。我知道我没有正确命名一个对象,但我真的不明白代码在这一行 Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)
上做了什么。
【问题讨论】:
如果这是它标记的行,那么它错过了。您永远不会将objFile
设置为任何内容。
它没有在编译器中标记,但那是我无法理解的地方。你是对的,objFile 没有定义。我刚刚添加了一行Dim objFile As Object
,但现在错误是“对象变量或未设置块变量”,我不确定应该为 objFile 放什么。文件名?
取决于您打算做什么。我怀疑objFile.Path
的两个实例都应该是strFilePath
。
.Path
扩展有什么作用吗?原始代码确实有 strFilePath
和 objFile.Path
分开。代码应该遍历文件夹中的文件,但我真的不需要。文件夹中只有一张 Excel 表,我知道它的名称。如何直接调用“xlsx”文件路径?
“直接调用“xlsx”文件路径”是什么意思?您可能想要编辑您的问题,以包含您尝试使用您找到的此代码执行的操作的描述。 strFilePath
传递了什么? Sub
应该用来做什么?
【参考方案1】:
考虑删除对objFSO
的任何需求。以前的代码需要这个对象来遍历文件。既然知道 Excel 文件路径,就直接在Workbooks.Open()
方法中传入即可:
Sub FormatACTrade(strFilePath As String)
Dim objExcel As Object, objWorkbook As Object, sh As Object
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.DisplayAlerts = False
' OPEN WORKBOOK (IN BACKGROUND)
Set objWorkbook = objExcel.Workbooks.Open(strFilePath)
For Each sh In objWorkbook.Worksheets
If sh.UsedRange.Address <> "$A$1" Or sh.Range("A1") <> "" Then
With sh
[Do stuff]
End With
End If
Next sh
' CLOSE AND SAVE WORKBOOK
objWorkbook.Close True
' QUIT APP
objExcel.Quit
' FREE RESOURCES
Set objWorkbook = Nothing
Set objExcel = Nothing
End Sub
【讨论】:
这是有效的。谢谢你。是否有在另一个中运行另一个 Microsoft Office 程序的最佳实践来源?我不知道我怎么会意识到“免费资源”或退出应用程序。 太棒了。请接受(在旁边打勾)以确认解决方案。我不知道是否有任何最佳实践的单一文档。但我通过各种工作示例学习了这些项目,包括 SO 帖子。你边做边学!以上是关于尝试从 Access 运行 Excel 以格式化导出的表,获取所需的对象错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 DAO 从外部 Access (Outlook/Excel) 连接到有效数据库会生成 3343 无法识别的数据库格式错误
在 Excel 中运行 VBA 代码以获取 Access 数据库中的 VBA