Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  MultiValueParameter überschreiben

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:  MultiValueParameter überschreiben (1752 mal gelesen)
InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 07. Jun. 2017 12:23    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

Hi ich erstelle gerade ein VBA-Makro, mit dem ich die Werte eines
MultiValueParameters in ein Textfeld (Multiline) in einer Userform lade.
Den Inhalt des Textfeldes lade ich dann in eine Array und will diese
nun an den Parameter zurückgeben, wobei die alten Werte irrelevant sind.
Es sollen nur die Werte aus der Array anschließend im Parameter
enthalten sein. Ich bekomme den Parameter nur nicht überschrieben?!
Wenn ich einen neuen Parameter erzeuge, funktioniert ".SetEnumerateValues".
Zum Ändern / Überschreiben allerdings nicht?! Es kommt die Fehlermeldung
"Typ mismatch"

Weiß jemand weiter? So sieht der Code aktuell aus:

Code:

Private Sub cmd_OK_Click()
    ' Variablen definieren
        oCounter = 0

    ' Textfeldinhalt in eine Array laden
        Dim UserArray As Variant
        UserArray = Split(Me.txt_DrawUser, vbLf)

    ' Array auf Form prüfen (B. Name)
        For i = 0 To UBound(UserArray)
            If Mid(UserArray(i), 2, 2) <> ". " Then
                oCounter = oCounter + 1
            End If
        Next i
            If oCounter >= 2 Then
                MsgBox a_00_GlobalMsgBox.MsgBox_WrongUser, 48, "Warning"
                    Exit Sub
            End If

    ' Array alphabetisch sortieren
        Call UserSort(UserArray)

    ' Array an die Parameter "Name_Konstrukteur", "Name_Zeichner" und "Name_Pruefer" zurückgeben
        Set oDoc = CATIA.ActiveDocument
        Set oParas = oDoc.Parameters
            Set oPara = oParas.Item(vName_Pruefer)
                oPara.SetEnumerateValues UserArray

    ' UserForm ausblenden und entladen
        Unload Me
End Sub


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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 07. Jun. 2017 12:45    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 InFlames 10 Unities + Antwort hilfreich

Servus
Als was ist oPara dimensioniert?
Probier mal den oPara als Object oder Variant zu dimensionieren.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 07. Jun. 2017 13:00    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

Es kommt immer "Type mismatch"

Code:

Private Sub cmd_OK_Click()
    ' Variablen definieren
        oCounter = 0

    ' Textfeldinhalt in eine Array laden
        Dim UserArray As Variant
        UserArray = Split(Me.txt_DrawUser, vbLf)

    ' Array auf Form prüfen (B. Name)
        For i = 0 To UBound(UserArray)
            If Mid(UserArray(i), 2, 2) <> ". " Then
                oCounter = oCounter + 1
            End If
        Next i
            If oCounter >= 2 Then
                MsgBox a_00_GlobalMsgBox.MsgBox_WrongUser, 48, "Warning"
                    Exit Sub
            End If

    ' Array alphabetisch sortieren
        'Call UserSort(UserArray)

    ' Array an die Parameter "Name_Konstrukteur", "Name_Zeichner" und "Name_Pruefer" zurückgeben
        Dim oParas As Parameters
        'Dim oPara As Parameter
        'Dim oPara As Object
        Dim oPara As Variant
            Set oDoc = CATIA.ActiveDocument
            Set oParas = oDoc.Parameters
                Set oPara = oParas.Item(vName_Pruefer)
                    oPara.SetEnumerateValues UserArray

    ' UserForm ausblenden und entladen
        Unload Me
End Sub


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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 07. Jun. 2017 13:32    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 InFlames 10 Unities + Antwort hilfreich

Servus
Also in meinem Test hat es geklappt (unter VBA und den Parameter als Parameter dimensioniert)
Ist dein Array gefüllt? Wird der Parameter richtig angesprochen? Gibt es den Parameter? Was ist bei dir vName_Pruefer? Ist der Parameter von eine Formel gesteuert?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 07. Jun. 2017 13:45    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

Ok?!

Die Array ist befüllt, vName_Pruefer ist eine Stringvariable mit dem
Namen des Parameters (ebenfalls befüllt) und ich kann auch den Wert
des Parameters auslesen. Also eigentlich alles so wie es soll.
Und ich arbeite auch im VBA (R24).

Code:

Private Sub cmd_OK_Click()
    ' Variablen definieren
        oCounter = 0

    ' Textfeldinhalt in eine Array laden
        Dim UserArray As Variant
        UserArray = Split(Me.txt_DrawUser, vbLf)

    ' Array auf Form prüfen (B. Name)
        For i = 0 To UBound(UserArray)
            If Mid(UserArray(i), 2, 2) <> ". " Then
                oCounter = oCounter + 1
            End If
        Next i
            If oCounter >= 2 Then
                MsgBox a_00_GlobalMsgBox.MsgBox_WrongUser, 48, "Warning"
                    Exit Sub
            End If

    ' Array alphabetisch sortieren
        'Call UserSort(UserArray)

    ' Array an die Parameter "Name_Konstrukteur", "Name_Zeichner" und "Name_Pruefer" zurückgeben
        Dim oDoc As DrawingDocument
        Dim oParas As Parameters
        Dim oPara As Parameter
            Set oDoc = CATIA.ActiveDocument
            Set oParas = oDoc.Parameters
            Set oPara = oParas.Item(vName_Pruefer)


MsgBox oPara.Value
MsgBox UserArray(2)
MsgBox vName_Pruefer


                oPara.SetEnumerateValues UserArray

    ' UserForm ausblenden und entladen
        Unload Me
End Sub


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 07. Jun. 2017 13:48    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

Ok so funktioniert es?!

Code:

    ' Textfeldinhalt in eine Array laden
        Dim UserArray(2)
        UserArray(0) = "0000"
        UserArray(1) = "1111"
        UserArray(2) = "2222"
        'UserArray = Split(Me.txt_DrawUser, vbLf)

Aber die Array in dem Code vorher ist definitiv befüllt?!?!

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 07. Jun. 2017 13: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 Nur für InFlames 10 Unities + Antwort hilfreich

Servus
In welcher Zeile kommt denn die Fehlermeldung?
Müsste es nicht
Code:
Dim UserArray() As Variant
heißen?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 07. Jun. 2017 13:56    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

Mit "Dim UserArray As Variant" kommt "Type mismatch" bei "oPara.SetEnumerateValues UserArray".

Mit "Dim UserArray() As Variant" kommt "Type mismatch" bei "UserArray = Split(Me.txt_DrawUser, vbLf)".

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 07. Jun. 2017 14:04    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 InFlames 10 Unities + Antwort hilfreich

Servus
Hast du noch andere "Sonderzeichen" außer vbLf (zB vbCr).
Schon mal vbCrLf als Trennzeichen probiert?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 07. Jun. 2017 14:09    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


1.PNG

 
Funktioniert auch damit nicht :-)
Im Screenshot sieht man, dass die Array gefüllt ist und der Parameter auch definiert ist...

Das UBound() war nur ein Test. Funktioniert aber auch nicht.

Kann es daran liegen, weil die größe der Array nicht direkt definiert ist, da sie sich
ja selber definiert?!

[Diese Nachricht wurde von InFlames am 07. Jun. 2017 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 08. Jun. 2017 07:23    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

Guten Morgen,

also sobald ich die Array manuell definiere, läuft es ohne Probleme
durch. Warum?!?! Sobald ich die Array aus dem String der Textbox
erstelle, kommt immer "Type mismatch" bei oPara.SetEnumerateValues UserArray...
Es liegt also an der Array. Die ist aber befüllt und die Ausgabe per
MsgBox ergibt das richtige Ergebnis.

Code:

Private Sub cmd_OK_Click()
    ' Variablen definieren
        oCounter = 0

    ' Textfeldinhalt in eine Array laden
        'Dim UserArray As Variant
        'UserArray = Split(Me.txt_DrawUser.Value, vbLf)
        Dim UserArray(2)
        UserArray(0) = "A. Name"
        UserArray(1) = "B. Name"
        UserArray(2) = "C. Name"

    ' Array auf Form prüfen (B. Name)
        For i = 0 To UBound(UserArray)
            If Mid(UserArray(i), 2, 2) <> ". " Then
                oCounter = oCounter + 1
            End If
        Next i
            If oCounter >= 2 Then
                MsgBox a_00_GlobalMsgBox.MsgBox_WrongUser, 48, "Warning"
                    Exit Sub
            End If

    ' Array alphabetisch sortieren
        'Call UserSort(UserArray)

    ' Array an die Parameter "Name_Konstrukteur", "Name_Zeichner" und "Name_Pruefer" zurückgeben
        Dim oDoc As Document
        Dim oParas As Parameters
        Dim oPara As Parameter
            Set oDoc = CATIA.ActiveDocument
            Set oParas = oDoc.Parameters
                Set oPara = oParas.Item(vName_Pruefer)
                    oPara.SetEnumerateValues UserArray
                    oPara.Value = UserArray(0)

    ' UserForm ausblenden und entladen
        Unload Me
End Sub


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 08. Jun. 2017 08:22    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 InFlames 10 Unities + Antwort hilfreich

Hi InFlames,

probier bitte mal

    ' Textfeldinhalt in eine Array laden
        Dim UserArray() As String
        UserArray = Split(Me.txt_DrawUser.Value, vbLf)

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 08. Jun. 2017 09:24    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 InFlames 10 Unities + Antwort hilfreich

Servus

Bei mir läuft es über einen Zwischenarray vom Typ String.
zB so:

Code:
dim StrArray() as String
dim vArray() as Variant
dim i as Integer

StrArray = Split(Me.txt_DrawUser.Value, vbCrLf)

ReDim vArray(UBound(StrArray)-1)

for i = LBound(StrArray) to UBound(StrArray)
  vArray(i) = StrArray(i)
next

oPara.SetEnumerateValues vArray


Oder kann man Arrays auch direkt casten?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 08. Jun. 2017 09:47    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 InFlames 10 Unities + Antwort hilfreich

Hi Bernd,

Zitat:
Oder kann man Arrays auch direkt casten?

meinst Du ein existierendes Array, zB

dim arrString() as String

nach

redim arrstring(4) as integer

type-casten?

Meines Wissens geht das nicht.

Siehe auch Hilfe zu 'Redim':

Zitat:

You can use the ReDim statement repeatedly to change the number of elements and dimensions in an array. However, you can't declare an array of one data type and later use ReDim to change the array to another data type, unless the array is contained in a Variant. If the array is contained in a Variant, the type of the elements can be changed using an As type clause, unless you’re using the Preserve keyword, in which case, no changes of data type are permitted.

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 08. Jun. 2017 09:55    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

Ich werde bekloppt 
Das ergibt jetzt "Subscript out of range" bei vArray(i) = StrArray(i)

Code:

Private Sub cmd_OK_Click()
Dim StrArray() As String
Dim vArray() As Variant
Dim i As Integer

StrArray = Split(Me.txt_DrawUser.Value, vbCrLf)

ReDim vArray(UBound(StrArray) - 1)

For i = LBound(StrArray) To UBound(StrArray)
  vArray(i) = StrArray(i)
Next

        Dim oDoc As Document
        Dim oParas As Parameters
        Dim oPara As Parameter
            Set oDoc = CATIA.ActiveDocument
            Set oParas = oDoc.Parameters
                Set oPara = oParas.Item(vName_Konstrukteur)
                    oPara.SetEnumerateValues vArray
                '    oPara.Value = vArray(0)
                'Set oPara = oParas.Item(vName_Zeichner)
                '    oPara.SetEnumerateValues vArray
                '    oPara.Value = vArray(0)
                'Set oPara = oParas.Item(vName_Pruefer)
                '    oPara.SetEnumerateValues vArray
                '    oPara.Value = vArray(0)

    ' UserForm ausblenden und entladen
        Unload Me
End Sub


Code:

        Dim UserArray() As String
        UserArray = Split(Me.txt_DrawUser.Value, vbLf)

Ergibt ebenfalls "Type mismatch" bei oPara.SetEnumerateValues UserArray

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 08. Jun. 2017 09:57    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 InFlames 10 Unities + Antwort hilfreich

Servus Joe

Ich dachte eher einen gefüllten Array in einen anderen Typ umwandeln bzw den Inhalt des Arrays in einen anderen kopieren (der einen anderen Typ hat).
Das ganze direkt ohne Schleife und nicht so wie in meinen Code.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 08. Jun. 2017 10:07    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 InFlames 10 Unities + Antwort hilfreich

Servus
Stimmt die Anzahl beim ReDim? (ggf ist ja mein -1 falsch)
ggf mal Me.txt_DrawUser.Text anstatt .Value probieren.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 08. Jun. 2017 10:18    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

Oh mann endlich :-)
Jetzt läufts. Vielen Dank 

Code:

Private Sub cmd_OK_Click()
    ' Variablen definieren
        oCounter = 0

    ' Textfeldinhalt in eine Array laden
        Dim InputArray() As String
        InputArray = Split(Me.txt_DrawUser.Text, vbLf)

    ' Array auf Form prüfen (B. Name)
        For i = 0 To UBound(InputArray)
            If Mid(InputArray(i), 2, 2) <> ". " Then
                oCounter = oCounter + 1
            End If
        Next i
            If oCounter >= 2 Then
                MsgBox a_00_GlobalMsgBox.MsgBox_WrongUser, 48, "Warning"
                    Exit Sub
            End If

    ' Array alphabetisch sortieren
        Call UserSort(UserArray)

    ' Array umformen
        Dim UserArray() As Variant
        ReDim UserArray(UBound(InputArray))
            For i = LBound(InputArray) To UBound(InputArray)
              UserArray(i) = InputArray(i)
            Next

    ' Array an die Parameter "Name_Konstrukteur", "Name_Zeichner" und "Name_Pruefer" zurückgeben
        Dim oDoc As Document
        Dim oParas As Parameters
        Dim oPara As Parameter
            Set oDoc = CATIA.ActiveDocument
            Set oParas = oDoc.Parameters
                Set oPara = oParas.Item(vName_Konstrukteur)
                    oPara.SetEnumerateValues UserArray
                    oPara.Value = UserArray(0)
                Set oPara = oParas.Item(vName_Zeichner)
                    oPara.SetEnumerateValues UserArray
                    oPara.Value = UserArray(0)
                Set oPara = oParas.Item(vName_Pruefer)
                    oPara.SetEnumerateValues UserArray
                    oPara.Value = UserArray(0)

    ' UserForm ausblenden und entladen
        Unload Me
End Sub


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 08. Jun. 2017 11:29    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 InFlames 10 Unities + Antwort hilfreich

Hi InFlames,

noch zweikurze Anmerkungen:

Code:

    ' Array alphabetisch sortieren
        Call UserSort(UserArray)


Solange die Elemente von UserArray noch leer sind, wird da nicht viel sortiert.
Code:

    ' Array umformen
        Dim UserArray() As Variant
        ReDim UserArray(UBound(InputArray))
            For i = LBound(InputArray) To UBound(InputArray)
              UserArray(i) = InputArray(i)
            Next


Anstatt
Code:

        Dim UserArray() As Variant
        ReDim UserArray(UBound(InputArray))


müsste auch
Code:

        Dim UserArray(UBound(InputArray)) As Variant


funktionieren.
Statt
Code:

            For i = LBound(InputArray) To UBound(InputArray)


kannst auch
Code:

            For i = 0 To UBound(UserArray)


schreiben.

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InFlames
Mitglied
techn. Productdesigner


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

Beiträge: 72
Registriert: 22.09.2014

Windows 7 Professional
Catia V5R26

erstellt am: 08. Jun. 2017 11:34    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

Danke

Ja das hatte ich übersehen mit dem sortieren.

Code:

Call UserSort(InputArray)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 08. Jun. 2017 11:39    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 InFlames 10 Unities + Antwort hilfreich

Hi Bernd,

gleichgrosse Arrays gleichen Datentyps müssten kopierbar sein ala

ArrA = arrB

Siehe auch den Thread hierzu:
https://stackoverflow.com/questions/22903330/copy-array-data-to-another-array-using-vb6

Bei nicht-dynamischen Arrays geht's mit Hilfe der Api(Speicherbereich kopieren).
Aber ob das immer schneller wie die Schleife ist ...?

Bei nichtgleichen Datentypen musst wohl über die Schleife laufen. Die einzelnen Array-Elemente sind unterschiedlich lang(2 Bytes für integer, 4 Bytes für long, ...).

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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