Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Array Übergabe von VBA nach CATScript und zurück

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Array Übergabe von VBA nach CATScript und zurück (517 / mal gelesen)
PatrickV5
Mitglied


Sehen Sie sich das Profil von PatrickV5 an!   Senden Sie eine Private Message an PatrickV5  Schreiben Sie einen Gästebucheintrag für PatrickV5

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11792
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 05. Apr. 2023 13:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für PatrickV5 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Randle an!   Senden Sie eine Private Message an Randle  Schreiben Sie einen Gästebucheintrag für Randle

Beiträge: 698
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 05. Apr. 2023 14:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für PatrickV5 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von PatrickV5 an!   Senden Sie eine Private Message an PatrickV5  Schreiben Sie einen Gästebucheintrag für PatrickV5

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 String

Dim 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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz