尝试 运行 Excel 从访问格式导出 Table,获取所需对象错误
Trying to Run Excel from Access to Format Exported Table, Get Object Required Error
我正在尝试自动将 table 从 Access 导出到 Excel 报告中。根据我对 Stack Overflow 的研究,建议有一个 VBA 代码用于导出,然后另一个代码用于格式化 Excel sheet。我非常希望 运行 来自 Access 的 Excel sheet 的格式,所以我只需按一下按钮即可导出。我非常讨厌 运行 发布这份报告,因为当我有其他紧迫的事情要做时,每个人都想要它 "right now"。是公司总裁办公室的,我这种小白就得跳槽了。
我在这里找到了这个建议的代码:,但我收到了 "Object variable or With block variable not set"
的错误
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" 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)
.
考虑取消对 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" 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
我正在尝试自动将 table 从 Access 导出到 Excel 报告中。根据我对 Stack Overflow 的研究,建议有一个 VBA 代码用于导出,然后另一个代码用于格式化 Excel sheet。我非常希望 运行 来自 Access 的 Excel sheet 的格式,所以我只需按一下按钮即可导出。我非常讨厌 运行 发布这份报告,因为当我有其他紧迫的事情要做时,每个人都想要它 "right now"。是公司总裁办公室的,我这种小白就得跳槽了。
我在这里找到了这个建议的代码:,但我收到了 "Object variable or With block variable not set"
的错误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" 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)
.
考虑取消对 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" 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