Как устранить ошибку времени выполнения 438 внутри макроса CATIA? - PullRequest
0 голосов
/ 12 февраля 2019

Я пишу макрос в CATIA v5, используя VBA.Предполагается, что программа берет точки из геометрического набора и переносит их в файл Excel.Я успешно получил открытый документ Excel, создал заголовок, но затем я получаю «Ошибка времени выполнения« 438 »: объект не поддерживает это свойство или метод. Я попытался выполнить поиск, и кажется, что раздел кодапытаясь взаимодействовать с чем-то за пределами его домена, но я не могу понять, как. Ниже приведен пример моего кода. Строка, которая содержит «***» слева, является строкой, которая указана в отладчике.

Dim xls As Object
Dim wkbks As Object
Dim wkbk As Object
Dim wksheets As Object
Dim sheet As Object
Dim fs, f, f1, fc, s
Dim coords(2) As Integer
Dim PartDoc

Sub CATMain()

    CATIA.ActiveDocument.Selection.Search "CATGmoSearch.Point,all"

    'Function Calls
    AppStart
    CATIAtoXLS

    'wksheet.Application.ActiveWorkbook.SaveAs (ExcelFolder & Left(CATIA.ActiveDocument.Name,Len(CATIA.ActiveDocument.Name)-8)&".xls")
    'wksheet.Application.ActiveWorkbook.Close

End Sub

Private Sub AppStart()

    Err.Clear
    On Error Resume Next
    Set xls = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Err.Clear
        Set xls = CreateObject("Excel.Application")
    End If

    xls.Application.Visible = True
    Set wkbks = xls.Application.Workbooks
    Set wkbk = wkbks.Add
    Set wksheets = wkbk.Worksheets(1)
    Set sheet = wkbk.Sheets(1)
    sheet.Cells(1, "A") = "X-Cord"
    sheet.Cells(1, "B") = "Y-Cord"
    sheet.Cells(1, "C") = "Z-Cord"

End Sub

Private Sub CATIAtoXLS()

    For i = 1 To CATIA.ActiveDocument.Selection.Count
        Set Selection = CATIA.ActiveDocument.Selection        ***
        Set Element = Selection.Item(i)

        'Transfer data to xls
        Point.GetCoordinates (coords)
        sheet.Cells(i + 1, "A") = coords(0)
        sheet.Cells(i + 1, "B") = coords(1)
        sheet.Cells(i + 1, "C") = coords(2)

    Next i

End Sub

1 Ответ

0 голосов
/ 13 февраля 2019

Ваша первая проблема заключается в том, что любой метод в CATIA VBA, который передает массив в качестве аргумента, должен вызываться для объекта, объявленного вариантом (явно или по умолчанию).Таким образом, вы должны выглядеть так:

Dim px as Variant
Set px = CATIA.ActiveDocument.Selection.Item(i).Value
Call Point.GetCoordinates(coords)

Вторая проблема заключается в том, что в VBA, если вы используете подпрограмму с круглыми скобками, вы должны использовать ключевое слово Call:

Call Point.GetCoordinates (coords)

В противном случае,Вы можете пропустить скобки и ключевое слово:

Point.GetCoordinates coords
...