首页 > 解决方案 > VBA 运行时错误“1004”:应用程序定义的或对象定义的错误。我究竟做错了什么?

问题描述

我有一个 Powershell 脚本,它将生成一个 CSV 文件,其中包含 18 台以上服务器的所有可用存储空间。我现在正在尝试自动格式化 CSV 文件,这样看起来会更好看。我的问题是我的代码成功运行一次,但在第二次运行时抛出 1004 错误。

在使用 StackOverflow 之前,我的代码看起来更不稳定,更不完善。我现在已经删除了一些其他错误,例如不必要地使用 Activesheet、使用 .Select 等,但我现在仍然找不到问题。

请在下面查看我的代码(请注意我已注释掉的 AutoFit 部分是我尚未开始工作的部分)。

Sub A_AllToTable()
    Dim tbl As ListObject
    With Sheets(1)
        Set tbl = .ListObjects.Add(xlSrcRange, .UsedRange, , xlYes)
        tbl.TableStyle = "TableStyleDark11"
'        tbl.Columns.AutoFit
    End With
End Sub

当我从新打开工作簿并运行代码时,它会按预期运行。它将格式化表格。我希望将其用于 AutoFit 并按大小自动排序,但现在我只想让代码不止一次地工作

有人可以提供一些关于为什么这不起作用的见解,这样我就可以避免将来再次犯同样的错误?

标签: excelvba

解决方案


尤里卡!事实证明它没有运行,因为它试图在已经存在的表之上创建另一个表。我添加了一些代码以首先确保工作簿没有格式和表格,现在不会发生错误!

感谢所有一直在寻求有关该问题的更多信息的人。你们都帮了大忙!

最终代码:

Sub A_AllToTable()
    Sheet1.ListObjects(1).Unlist
    Sheet1.UsedRange.ClearFormats
    Dim tbl As ListObject
    Set wks = ThisWorkbook.Worksheets(1)
    With wks
        Set tbl = wks.ListObjects.Add(xlSrcRange, wks.UsedRange, , xlYes)
        tbl.TableStyle = "TableStyleDark11"
'        tbl.Columns.AutoFit
    End With
End Sub

推荐阅读