应用程序或对象定义错误

时间:2017-05-19 11:12:45

标签: excel vba solidworks

我在以下代码的以下行中收到了对象或应用程序定义的错误:

.Range("A2", .Range("E2").End(xlDown)).Sort Columns("C"), xlAscending

以下内容:

Dim Exl As Object
Dim xlWB As Excel.Workbook

Set Exl = New Excel.Application




Set xlWB = Exl.Workbooks.Open(FileName)
Debug.Print Dir(TxtPath & "\BOMTable_" & swModel.GetTitle() & ".txt")

'RENAME SHEET 1 "RAW"
xlWB.ActiveSheet.Name = "RAW"
xlWB.Worksheets("RAW").Activate
Debug.Print xlWB.Worksheets(1).Name

'FORMAT AND COPY RAW EXCEL SHEET
With xlWB.Worksheets("RAW")
.Columns("A:E").HorizontalAlignment = xlCenter
.Columns("A:C").ColumnWidth = 15
.Columns("E:E").ColumnWidth = 10
.Columns("D:D").ColumnWidth = 50
.Range("A2", .Range("E2").End(xlDown)).Sort Columns("C"), xlAscending
End With

代码在SolidWorks中运行并打开文本文件以进行编辑。它通常在第一次尝试时按预期运行,但之后我得到了对象定义的错误。

有时错误也是"远程服务器机器不存在或不可用"或运行时错误1004"公式缺少范围引用或定义的框架"

有没有人知道这方面的解决方案?

3 个答案:

答案 0 :(得分:0)

更改

Set Excel = New Excel.Application

Set Exl = New Excel.Application

答案 1 :(得分:0)

怎么样?

.Range("A2", .Range("E2").End(xlDown)).Sort .Range("C2"), xlAscending

答案 2 :(得分:0)

我不熟悉SolidWorks的语法(以及它作为各种默认值使用的内容),但在VBA中,行

With xlWB.Worksheets("RAW")
    '...
    .Range("A2", .Range("E2").End(xlDown)).Sort Columns("C"), xlAscending
    '...
End With

相当于:

xlWB.Worksheets("RAW").Range("A2", xlWB.Worksheets("RAW").Range("E2").End(xlDown)).Sort Application.ActiveWorkbook.ActiveSheet.Columns("C"), xlAscending

xlWB.Worksheets("RAW").Range("A2", xlWB.Worksheets("RAW").Range("E2").End(xlDown))部分正在定义一个范围,然后将Sort方法应用于该范围。

Application.ActiveWorkbook.ActiveSheet.Columns("C")部分也定义了一个范围,该范围将用作排序的排序键。

因为您尝试使用不属于要排序范围的键,所以会生成错误。

您可以通过将代码更改为

来解决该特定错误(可能是,也可能不是导致您的问题的错误)
With xlWB.Worksheets("RAW")
    '...
    .Range("A2", .Range("E2").End(xlDown)).Sort .Columns("C"), xlAscending
    '...
End With

即。 插入缺失的期间。然后,这将确保从xlWB.Worksheets("RAW").Columns("C")获得排序键。