Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  SW2008 API Assambly.GetComponents in Array speichern

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
Bechtle PLM Deutschland tritt dem Deutschen Robotik Verband bei und startet Kooperation, eine Pressemitteilung
Autor Thema:  SW2008 API Assambly.GetComponents in Array speichern (1780 mal gelesen)
oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 02. Dez. 2010 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

Hallo zusammen,

ich hab mal wieder ein Problem:

Ich habe eine Abfrage geschrieben, in der überprüft wird, ob in einer Baugruppe Virtuelle komponenten vorhanden sind. Dies gescheiht über die AssemblyDoc.GetComponents(topLevelOnly) abfrage. Hier erhält man ein schönes Variant mit lauter Objekten, die in der Baugruppe vorkommen.

Diese Objekte prüfe ich eins nach dem Anderen mit dem .isVirtual Befehl, jedes mal, wenn eine virtuelle Komponente auftaucht soll die nun in ein Array geschrieben werden, um später auf sie zuzugreifen.

Die Namen der Komponenten abspeichern klappt ohne Probleme... nur will mir das Progrämmchen verweigern die Objekte in ein Variant zu speichern   

Code:

Dim virtarr() As Variant
Dim virtCount As Integer
Dim ObjArr() As Variant

Sub Main()


    Dim swApp As SldWorks.SldWorks

    Dim swModel As SldWorks.ModelDoc2
   
    Dim swAssy As SldWorks.AssemblyDoc
   
    Dim swComp As SldWorks.Component2
   
    Dim swCompArr As Variant
       
    Dim virtstat As Boolean
      
    Set swApp = Application.SldWorks
   
    Set swModel = swApp.GetFirstDocument
   
    virtCount = 0
   
    ReDim virtarr(virtCount)


Do While Not swModel Is Nothing
   
    If Not swModel.GetType() = swDocASSEMBLY Then
                  
        'hier könnte Ihre Aufgabe stehen ...
           
    Else
                       
        Dim count As Long
                   
        Dim i As Integer
                   
        i = 0
                   
        Set swAssy = swModel
               
        swCompArr = swAssy.GetComponents(True)
                   
        count = swAssy.GetComponentCount(True)
                                    
        Do While Not i = count
                   
           If Not IsEmpty(swCompArr) Then
                   
              Set swComp = swCompArr(i)
                       
              If Not IsEmpty(swComp) Then
                   
                 virtstat = swComp.IsVirtual
                   
                 If virtstat Then
                                 
                    virt = swCompArr(i).Name2()
                                       
                    virtCount = virtCount + 1
                                       
                    ReDim Preserve virtarr(virtCount)
                   
                    ReDim Preserve ObjArr(virtCount)
                                      
                    virtarr(virtCount - 1) = virt
                                     
                    ObjArr(virtCount - 1) = swCompArr(i)
                                                       
                  End If
                            
               End If
                       
               i = i + 1
                       
            End If
                   
         Loop
   
    End If

    Set swModel = swModel.GetNext

Loop



Fehlermeldung ist "Objekt oder Withblockvariable nicht festgelegt...": "ObjArr(virtCount - 1) = swCompArr(i)"

Aber warum kann ich denn keinen Variant - Eintrag in ein anderes Variant schreiben?


Gruß

Alex

[Diese Nachricht wurde von oeNkraD am 02. Dez. 2010 editiert.]

[Diese Nachricht wurde von oeNkraD am 02. Dez. 2010 editiert.]

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

nahe
Ehrenmitglied



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

Beiträge: 1764
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 02. Dez. 2010 11:01    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 oeNkraD 10 Unities + Antwort hilfreich

Hallo

schon mal mit

Set ObjArr(virtCount - 1) = swCompArr(i)

versucht?

PS

ich würd
"virtCount = virtCount + 1"

nach
"ReDim Preserve ObjArr(virtCount)"

enbauen, weil "ObjArr" sonst am Schleifenende ein Element zuviel enthält das nichts zugeordnet hat.

------------------
Grüße
Heinz

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 02. Dez. 2010 11:43    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...

war ja jetz nicht soooo schwierig...

Aber wann setz ich Set ein, und wann nicht? Hängt das mit der Übergabe von Strings, namen und anderen fixen Werten auf der einen und Zeigern auf der anderen Seite zusammen?

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

nahe
Ehrenmitglied



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

Beiträge: 1764
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 02. Dez. 2010 12:52    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 oeNkraD 10 Unities + Antwort hilfreich

Wie schon mal geschrieben

die Online Hilfe von SWXSolidWorks bzw. VBA ist wirklich eine empfehlenswerte Lektüre.

Dort steht z.B.:

Set-Anweisung
Weist einer Variablen oder Eigenschaft einen Objektverweis zu.

------------------
Grüße
Heinz

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)2024 CAD.de | Impressum | Datenschutz