试图从Access运行Excel以格式化导出的表,Get Object Required错误

试图从Access运行Excel以格式化导出的表,Get Object Required错误,excel,ms-access,vba,ms-access-2013,Excel,Ms Access,Vba,Ms Access 2013,我正在尝试将表从Access自动导出到Excel报表。根据我对堆栈溢出的研究,建议导出时使用VBA代码,然后使用另一个代码格式化Excel工作表。我更喜欢从Access运行Excel工作表的格式设置,所以我只需按下一个按钮,它就会被导出。我绝对不喜欢写这份报告,因为当我有其他紧迫的事情要做时,每个人都想“马上”写。这是给公司总裁办公室的,所以像我这样的牡丹只需要跳到办公室就行了 我在这里找到了建议的代码:,但是我得到了一个错误“objectvariable或With block variable

我正在尝试将表从Access自动导出到Excel报表。根据我对堆栈溢出的研究,建议导出时使用VBA代码,然后使用另一个代码格式化Excel工作表。我更喜欢从Access运行Excel工作表的格式设置,所以我只需按下一个按钮,它就会被导出。我绝对不喜欢写这份报告,因为当我有其他紧迫的事情要做时,每个人都想“马上”写。这是给公司总裁办公室的,所以像我这样的牡丹只需要跳到办公室就行了

我在这里找到了建议的代码:,但是我得到了一个错误“objectvariable或With block variable not set”

subformatActrade(strFilePath作为字符串)'我正在从另一个_
将表格导出到excel的sub,我知道_
一个输出,但这是一个私有变量,我在一个模型中使用_
所以应该没问题吧??
关于错误转到错误处理程序
Dim objFile作为对象
设置objExcel=CreateObject(“Excel.Application”)
objExcel.Visible=False
objExcel.DisplayAlerts=False
设置objFso=CreateObject(“Scripting.FileSystemObject”)
设置objFolder=objFso.GetFolder(strFilePath)
如果objFso.GetExtensionName(objFile.Path)=“xlsx”,则
设置objWorkbook=objExcel.Workbooks.Open(objFile.Path)
对于objWorkbook.工作表中的每个sh
如果sh.UsedRange.Address“$A$1”或sh.Range(“A1”)”,则
与sh
[做事]
以
如果结束
下一个
objWorkbook.Close True
如果结束
端接头

如有任何建议,我们将不胜感激。我对编码是新手,我必须承认,有关vba对象、脚本和应用程序的文档很难理解。我知道我没有正确地命名一个对象,但我真的不明白代码在这一行做什么
Set objWorkbook=objExcel.Workbooks.Open(objFile.Path)

考虑删除对
objFSO
的任何需要。以前的代码需要这个对象来遍历文件。由于您知道Excel文件路径,只需将其传递给以下方法:

子格式交易(strFilePath作为字符串)
Dim objExcel作为对象,OBJ工作簿作为对象,sh作为对象
设置objExcel=CreateObject(“Excel.Application”)
objExcel.Visible=False
objExcel.DisplayAlerts=False
'打开工作簿(在后台)
设置obj工作簿=objExcel.Workbooks.Open(strFilePath)
对于objWorkbook.工作表中的每个sh
如果sh.UsedRange.Address“$A$1”或sh.Range(“A1”)”,则
与sh
[做事]
以
如果结束
下一个sh
'关闭并保存工作簿
objWorkbook.Close True
'退出应用程序
退出
“免费资源
设置objWorkbook=Nothing
设置objExcel=Nothing
端接头

如果这是它标记的行,那么它就错过了。您从未将
objFile
设置为任何内容。它没有在编译器中标记,但这是我的头绪所在。不过,您是对的,objFile没有定义。我刚刚添加了一行
Dim objFile作为Object
,但现在错误是“Object variable或With block variable not set”,我不确定应该为objFile添加什么。文件名?取决于您打算做什么。我怀疑
objFile.Path
的两个实例都应该是
strFilePath
。扩展名
.Path
有什么作用吗?原始代码确实分别有
strFilePath
objFile.Path
。代码应该在文件夹中的文件上迭代,但我真的不需要。文件夹中只有一个Excel工作表,我知道它的名称。如何直接调用“xlsx”文件路径?您所说的“直接调用”xlsx文件路径是什么意思?您可能希望编辑您的问题,以包含您试图使用找到的代码执行的操作的描述。为strFilePath传递的是什么?
Sub
与此有什么关系?这很有效。非常感谢。是否有在其他系统中运行另一个Microsoft Office程序的最佳实践来源?我不知道我怎么会意识到“释放资源”或退出应用程序。太好了。请接受(在旁边打勾)以确认解决方案。我不知道是否有任何单一的最佳实践文档。但我通过各种工作示例学习了这些项目,所以包括了帖子。你在实践中学习!
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
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