Autor
|
Thema: Array Übergabe von VBA nach CATScript und zurück (517 / mal gelesen)
|
PatrickV5 Mitglied
Beiträge: 4 Registriert: 16.08.2016 Windows 10 Enterprise; Intel Core i7-10850H 2,70GHz; 32GB RAM; NVIDIA Quadro T2000; CATIA V5R2017 SP3
|
erstellt am: 05. Apr. 2023 11:21 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte über Excel-VBA ein CATScript starten. Von VBA soll ein zu Beginn leeres Array ins CATScript übergeben werden. Im CATScript wird das Array befüllt und entsprechend vergrößert. Nach dem Ende des CATScripts soll das befüllte Array wieder an VBA zurück übergeben werden. Leider scheitere ich irgendwie am Syntax oder ist das so wie ich mir das vorstelle garnicht möglich? Innerhalb des CATScript selbst funktioniert die Übergabe zwischen den Unterprogrammen. Hier mein Excel-VBA Code:
Code: Option Explicit Sub StartExternalScript()Dim CATIA As Object Set CATIA = GetObject(, "CATIA.Application") Dim params(0) Dim arr1(0) As String arr1(0) = "" params(0) = arr1 CATIA.SystemService.ExecuteScript "C:\Test", catScriptLibraryTypeDirectory, "SubArray.CATScript", "CATMain", params 'Inhalt vom Array nach CATScript prüfen MsgBox arr1(0) End Sub
Hier mein CATScript: Code: Sub CATMain (ByREF arr1() As String)Dim arr2() As String Dim arr3() As Integer ReDim arr2(0) arr2(0)="test" ReDim arr3(0) arr3(0)=123 Call Unterprogramm(arr1,arr2,arr3) MsgBox arr1(0) MsgBox arr2(1) MsgBox arr3(1) End Sub Sub Unterprogramm(ByREF arr1() As String, ByREF arr2() As String, ByREF arr3() As Integer)
ReDim arr1(0) arr1(0)="Bauteilnummer XYZ" ReDim Preserve arr2(1) arr2(1)="test2" ReDim Preserve arr3(1) arr3(1)=456 End Sub
Für eure Hilfe wäre ich sehr dankbar lg Patrick [Diese Nachricht wurde von PatrickV5 am 05. Apr. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11792 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Apr. 2023 13:30 <-- editieren / zitieren --> Unities abgeben: Nur für PatrickV5
Servus Hat es eine bestimmten Grund warum du ExecuteScript verwenden möchtest? Da du schon auf Catia zugriffen hast, könntest du auch direkt den Code des CATScripts in VBA ausführen. Gruß Bernd PS: Ich weiß nicht ob ExecuteScript überhaupt einen Wert zurückgibt, bzw ob die Parameter als Referenz übergeben werden und nicht als Wert. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 698 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 05. Apr. 2023 14:05 <-- editieren / zitieren --> Unities abgeben: Nur für PatrickV5
Hallo, doch das ist schon möglich das ExecuteScript einen Wert zurückgibt.
Code: Dim Result as String 'oder was auch immer da zurück kommt Result = CATIA.SystemService.ExecuteScript ("C:\Test", catScriptLibraryTypeDirectory, "SubArray.CATScript", "CATMain", params)
Ob das mit nem Array funktioniert weiß ich allerdings jetzt nicht. Gruß Randle ------------------ Planung ersetzt Fehler durch Irrtum! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PatrickV5 Mitglied
Beiträge: 4 Registriert: 16.08.2016 Windows 10 Enterprise; Intel Core i7-10850H 2,70GHz; 32GB RAM; NVIDIA Quadro T2000; CATIA V5R2017 SP3
|
erstellt am: 05. Apr. 2023 14:50 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke für eure Antworten. Aus Performace-Gründen will ich einen Teil meines Programms von VBA auf ein CATScript auslagern. Ich bin das Array jetzt mal mit einem Workaround umgangen und zu meinem gewünschten Ergebnis gekommen. Ja ich weiß schön ist es nicht... Excel-VBA Code:
Code: Option Explicit Sub StartExternalScript()Dim CATIA As Object Set CATIA = GetObject(, "CATIA.Application") Dim params(0) As Variant params(0) = "start" Dim result As String result = CATIA.SystemService.ExecuteScript("C:\Test", catScriptLibraryTypeDirectory, "SubArray.CATScript", "CATMain", params) Dim arr1() As String arr1 = Split(result, ";") 'Geteilt als Array MsgBox arr1(0) MsgBox arr1(1) End Sub
CATScript Code:
Code: Function CATMain(ByREF text1 As String) As StringDim arr2() As String Dim arr3() As Integer ReDim arr2(0) arr2(0)="test" ReDim arr3(0) arr3(0)=123 Call Unterprogramm(text1,arr2,arr3) MsgBox text1 MsgBox arr2(1) MsgBox arr3(1) CATMain=text1 End Function Sub Unterprogramm(ByREF text1 As String, ByREF arr2() As String, ByREF arr3() As Integer) text1 =text1 & ";" & "Bauteilnummer XYZ" ReDim Preserve arr2(1) arr2(1)="test2" ReDim Preserve arr3(1) arr3(1)=456 End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|