| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Cloud Computing mit 3DEXPERIENCE® und Abaqus |
Autor
|
Thema: Hilfe bei Code Konfigurationstabellen austauschen (1065 / mal gelesen)
|
Bernhard09 Mitglied Konstrukteur Rohrbündelwärmetauscher
Beiträge: 80 Registriert: 09.04.2013 Intel i7-8850 @2,6GHz 32GB Ram Nvidia Quadro P1000 Windows 10 Enterprise 1809 Inventor Professional 2016 SP26 Vault Basic 2016 SoliWorks 2019 Pro.File 8.7
|
erstellt am: 10. Nov. 2020 13:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen Ich bin bei meinem Programm schon ein Stück weiter gekommen. Nur habe ich jetzt ein Problem und komme einfach nicht dahinter. Dieses Programm soll in beliebiger Baugruppe alle Teile auslesen und den Teilen eine Konfigurationstabelle zuweisen. In der Schleife kommt es immer zum Fehler "Objekt erforderlich". Ich habe die Zeile unten FETT und Kursiv markiert Vielleicht könnte sich das jemand mal bitte anschauen. Hoffe es ist nur eine kleine Sache. Danke schon mal im Voraus. Code:
Private Sub CommandButton1_Click() Dim Dateipfad As String Dim Auftragsnummer As String Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim value As Boolean Dim swErrors As Long Dim swWarnings As Long Dim boolstatus As Boolean Dim longstatus As Long Dim longwarnings As Long Dim vComps As Variant Dim i As Long Dim swComp As SldWorks.Component2 Dim swCompModel As IModelDoc2 Dim swAssy As SldWorks.AssemblyDoc Dim Filename As String Dim arrSplitStrings As Variant Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc ' Pfad aus dem Formular holen Dateipfad = Excel_Dateipfad.TextBox1.value ' Beispiel: C:\temp\ Auftragsnummer = Excel_Dateipfad.TextBox2.value 'Beispiel: 20063456 If TextBox1.Text = "" Then ' Überprüfung ob auch ein Pfad eingetragen wurde MsgBox "Pfad muß ausgefüllt sein" Exit Sub 'Programm wird angehalten bis eingabe erfolgt End If If TextBox2.Text = "" Then ' Überprüfung ob auch eine Auftragsnummer eingetragen wurde MsgBox "Auftragsnummer muß ausgefüllt sein" Exit Sub 'Programm wird angehalten bis eingabe erfolgt End If Set swAssy = swModel vComps = swAssy.GetComponents(False) 'Alle Komponenten der Baugruppe auch Unterbaugruppen If IsEmpty(vComps) Then Exit Sub 'Wenn Baugruppe leer dann Programm ende 'Schleife für alle Teile in Baugruppe For i = 0 To UBound(vComps) Set swComp = vComps(i) Set swCompModel = swComp.GetModelDoc2 Set Filename = swCompModel.GetTitle 'Dateiname des Bauteils (Tragoese.sldprt) arrSplitStrings = Split(Filename, ".") 'Dateiname teilen beim "." (Tragoese und sldprt) Set swModel = swApp.ActiveDoc ' Teil öffnen swModel.OpenCompFile Set swModel = swApp.OpenDoc6(swCompModel.GetPathName, 1, 0, "", longstatus, longwarnings) 'eventuelle vohandene Tabelle löschen boolstatus = swModel.Extension.SelectByID2("Tabelle", "DESIGNTABLE", 0, 0, 0, False, 0, Nothing, 0) swModel.EditDelete swModel.CloseFamilyTable ' dem Teil eine Tabelle zuweisen value = swModel.InsertFamilyTableOpen(Dateipfad & "\" & Auftragsnummer & "-" & arrSplitStrings(0) & ".xlsx") 'Pfad zur Tabelle swModel.CloseFamilyTable 'Tabelle schließen ' Teil neu aufbauen boolstatus = swModel.ForceRebuild3(True) ' Speichern boolstatus = swModel.Save3(1, swErrors, swWarnings) ' Schließen des Teils swApp.CloseDoc (swCompModel.GetPathName) Next i 'Userform ausblenden Excel_Dateipfad.Hide End Sub
------------------ Personalführung ist die Kunst, den Mitarbeiter so schnell über den Tisch zu ziehen das er die Reibungshitze als Nestwärme empfindet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 10. Nov. 2020 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard09
Hallo Bernhard, du wendest eine "Set" Anweisung auf einen String an -> "Set" wendet man nur bei Object Variablen an. Versuch es mal ohne das "Set". Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard09 Mitglied Konstrukteur Rohrbündelwärmetauscher
Beiträge: 80 Registriert: 09.04.2013 Intel i7-8850 @2,6GHz 32GB Ram Nvidia Quadro P1000 Windows 10 Enterprise 1809 Inventor Professional 2016 SP26 Vault Basic 2016 SoliWorks 2019 Pro.File 8.7
|
erstellt am: 10. Nov. 2020 14:47 <-- editieren / zitieren --> Unities abgeben:
Jetzt sagt er an gleicher stelle "Objektvariable oder With-Blockvariable nicht festgelegt" ------------------ Personalführung ist die Kunst, den Mitarbeiter so schnell über den Tisch zu ziehen das er die Reibungshitze als Nestwärme empfindet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 10. Nov. 2020 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard09
Hallo Bernhard, hört sich so an als würde swCompModel nicht korrekt zugewiesen. Setz doch mal auf die Zuweisungen über der Fehlerzeile Haltepunkte und schau ob die Variablen korrekt befüllt werden. Vielleicht verennt er sich in irgendeiner unterdrückten Komponente o.ä. Bin im moment selbst nicht in SW unterwegs, so dass ich nichts prüfen kann. Grüße
EIBe 3D Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 10. Nov. 2020 16:11 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard09
Moin, wenn die Komponenten reduziert geladen oder unterdrückt sind ... (siehe Anmerkung bei component:getmodeldoc ...) du könntest wohl auch direkt Code: myPathname = swcomp.getpathname
benutzen. ist vielleicht auch sicherer Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard09 Mitglied Konstrukteur Rohrbündelwärmetauscher
Beiträge: 80 Registriert: 09.04.2013 Intel i7-8850 @2,6GHz 32GB Ram Nvidia Quadro P1000 Windows 10 Enterprise 1809 Inventor Professional 2016 SP26 Vault Basic 2016 SoliWorks 2019 Pro.File 8.7
|
erstellt am: 12. Nov. 2020 14:55 <-- editieren / zitieren --> Unities abgeben:
Nachdem ich das SET weggelassen habe und alle Unterbaugruppen entfernt habe und weitere Kleinigkeiten an den Tabellen angepasst hatte läuft es. Was ein Glück. Dank eurer Hilfe. Jetzt muß ich es noch hinbekommen das es auch mit Unterbaugruppen (auch die Baugruppen haben Tabellen nicht nur deren Teile) funktioniert. Habt ihr hierzu vielleicht eine Ansatz Idee? Danke schon mal. ------------------ Personalführung ist die Kunst, den Mitarbeiter so schnell über den Tisch zu ziehen das er die Reibungshitze als Nestwärme empfindet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard09 Mitglied Konstrukteur Rohrbündelwärmetauscher
Beiträge: 80 Registriert: 09.04.2013 Intel i7-8850 @2,6GHz 32GB Ram Nvidia Quadro P1000 Windows 10 Enterprise 1809 Inventor Professional 2016 SP26 Vault Basic 2016 SoliWorks 2019 Pro.File 8.7
|
erstellt am: 13. Nov. 2020 10:23 <-- editieren / zitieren --> Unities abgeben:
Jetzt ist mir aufgefallen das die Tabellen zwar eingefügt werden aber nicht verlinkt sind zu der externen Tabelle. den entsprechenden Befehl habe ich in der API Hilfe gefunden ich weiß nur nicht wie ich ihn einsetzte oder anwende. LinkToFile Property (IDesignTable) das müsste ja dann hier dazwischen kommen wo ich die Tabelle zuweise oder?
Code: ' dem Teil eine Tabelle zuweisen value = swmodel.InsertFamilyTableOpen(Dateipfad & "\" & Auftragsnummer & "-" & arrSplitStrings2(0) & ".xlsx") 'Pfad zur Tabelle 'hier also oder????? swmodel.CloseFamilyTable 'Tabelle schließen
Danke ------------------ Personalführung ist die Kunst, den Mitarbeiter so schnell über den Tisch zu ziehen das er die Reibungshitze als Nestwärme empfindet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard09 Mitglied Konstrukteur Rohrbündelwärmetauscher
Beiträge: 80 Registriert: 09.04.2013 Intel i7-8850 @2,6GHz 32GB Ram Nvidia Quadro P1000 Windows 10 Enterprise 1809 Inventor Professional 2016 SP26 Vault Basic 2016 SoliWorks 2019 Pro.File 8.7
|
erstellt am: 17. Nov. 2020 12:02 <-- editieren / zitieren --> Unities abgeben:
Hat denn keiner eine Idee dazu?...Link to File? Ich komme hier echt nicht weiter und wäre für jeden hinweis sehr dankbar. ------------------ Personalführung ist die Kunst, den Mitarbeiter so schnell über den Tisch zu ziehen das er die Reibungshitze als Nestwärme empfindet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 17. Nov. 2020 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard09
Hallo, hab es noch nicht ausprobiert, aber ich würd es dahinter machen, weil du das Tabellenobjekt noch gar nicht gegriffen hast ...
Code:
dim sFilename as string dim tableobject as object 'oder sldworks.designtable sFilename = Dateipfad & "\" & Auftragsnummer & "-" & arrSplitStrings2(0) & ".xlsx") 'Pfad zur Tabelle value = swmodel.InsertFamilyTableOpen(sFilename) 'value verrät, ob es jetzt drin ist swmodel.CloseFamilyTable 'Tabelle schließen set tableobject = swmodel.getdesigntable tableobject.filename = sFilename 'weiß nicht, ob das noch nötig ist tableobject.linktofile = true
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard09 Mitglied Konstrukteur Rohrbündelwärmetauscher
Beiträge: 80 Registriert: 09.04.2013 Intel i7-8850 @2,6GHz 32GB Ram Nvidia Quadro P1000 Windows 10 Enterprise 1809 Inventor Professional 2016 SP26 Vault Basic 2016 SoliWorks 2019 Pro.File 8.7
|
erstellt am: 20. Nov. 2020 09:31 <-- editieren / zitieren --> Unities abgeben:
Moin so hat ein bisschen gedauert. Vielen Dank Christian für deinen Tipp. Die Sache sieht jetzt so aus. Code:
Set tableobject = swmodel.GetDesignTable() tableobject.EditFeature tableobject.SourceType = 2 tableobject.LinkToFile = True tableobject.Filename = Dateipfad & "\" & Auftragsnummer & "-" & arrSplitStrings2(0) & ".xlsx" laststate = tableobject.Updatable tableobject.Updatable = Not laststate tableobject.AutoAddNewConfigs = False tableobject.AutoAddNewParams = False tableobject.EnableCellDropdownLists = False status = tableobject.UpdateFeature swmodel.CloseFamilyTable
Das Geheimnis war dann doch noch das man erst das Feature bearbeiten aktivieren muß. Es läuft zwar nur in einem Bauteil und nicht aus der Baugruppe heraus aber auch das werde ich noch hinbekommen. Vielen Dank nochmal an alle. Gruß Bernhard ------------------ Personalführung ist die Kunst, den Mitarbeiter so schnell über den Tisch zu ziehen das er die Reibungshitze als Nestwärme empfindet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |