2017-02-23 26 views
1

我试图自动将表格从Access导出到Excel报表中。从我对Stack Overflow的研究中,推荐有一个用于导出的VBA代码,然后是用于格式化Excel工作表的另一个代码。我非常喜欢从Access运行Excel工作表的格式,所以我只需按下一个按钮并导出。我绝对讨厌运行这份报告,因为当我有其他紧迫的事情要做时,每个人都需要“现在”。这是公司总裁办公室的工作,所以像我这样的老总就得跳到这里来。尝试运行从Excel访问格式导出表格,获取对象所需的错误

我发现这个建议在这里代码:https://stackoverflow.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)

+0

如果这是它标记的那一行,那么它就错过了。你永远不会把'objFile'设置为任何东西。 – Comintern

+0

它在编译器中没有被标记,但那是我头脑中的线。你说得对,objFile没有定义。我只是添加了一行'Dim objFile As Object',但现在错误是“Object variable或With block variable not set”,我不知道我应该为objFile放置什么。文件名? –

+0

取决于你打算做什么。我怀疑'objFile.Path'的两个实例都应该是'strFilePath'。 – Comintern

回答

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 
+0

这是行得通的。谢谢。是否有另一个在另一个Microsoft Office程序中运行最佳实践的源代码?我不知道如何实现“免费资源”或退出应用程序。 –

+0

太好了。请接受(勾选标记到旁边)以确认解决方案。我不知道是否有任何单独的文档的最佳做法。但我通过各种实例学习了这些项目,包括SO帖子。你通过做法学习! – Parfait