| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Zeichnungsnummer in iProperties (1887 mal gelesen)
|
Skeater Mitglied

 Beiträge: 42 Registriert: 25.05.2002
|
erstellt am: 24. Jan. 2010 11:49 <-- editieren / zitieren --> Unities abgeben:         
Hallo. Ich möchte ein Makro erstellen, welches in jedem Einzelteil der Braugruppe die Zeichnungsnummer der Baugruppe einträgt. Diese Zeichnungsnummer soll in iProperties Feld „Kommentare“. Vorhandene Einträge dürfen nicht überschrieben werden. Teile aus dem Inhaltscenter sind nicht zu berücksichtigen. Ich bin VBA Neuling, und deshalb für jeden Tipp dankbar. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 24. Jan. 2010 12:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Skeater
|
Skeater Mitglied

 Beiträge: 42 Registriert: 25.05.2002
|
erstellt am: 24. Jan. 2010 16:33 <-- editieren / zitieren --> Unities abgeben:         
Dann stehen mehrere Zeichnungsnummern dort. Darum dürfen die vorhandenen Einträge nicht gelöscht werden. Wir machen das zurzeit immer von Hand. So kann man sofort ablesen wo das Teil überall verbaut ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler

 Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 24. Jan. 2010 17:14 <-- editieren / zitieren --> Unities abgeben:          Nur für Skeater
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 24. Jan. 2010 21:17 <-- editieren / zitieren --> Unities abgeben:          Nur für Skeater
Hallo Vermutlich steht er noch ganz am Anfang, deswegen auch keine konkrete Frage. Weil man einfach nicht weiß, wo und wie man anfangen soll. Kenn ich. Ich würd's nicht durchziehen. Warum? Das Makro schreibt nur dazu, doppelte Einträge kriegt man noch über Stringoperationen/-vergleiche verhindert. Aber wie kriegt ihr entfernte Bauteile dazu auch ihren Zugehörigkeitseintrag zur BG aus der es eben entfernt wurde, zu entfernen? Vermutlich händisch. Also ist das Makro eigentlich nur die halbe Miete bzw. der kleinste Teil. Wär's nicht einfacher auf eine Datenverwaltungssoftware umzusteigen bzw. diese einzuführen? Verwendungsnachweise können die in der Regel alle darstellen. Man muß ja nicht alle Feature nutzen, die angeboten werden. Wenn du's durchziehen willst, fang vielleicht damit an: Code: Private Sub iPropDingens()Dim oAssDoc As AssemblyDocument If ThisApplication.ActiveDocumentType = kAssemblyDocumentObject Then Set oAssDoc = ThisApplication.ActiveDocument Else MsgBox "Kein Baugruppendokument - Exit" Exit Sub End If Dim oCompOcc As ComponentOccurrence Dim oProp As Property Dim sValue As String On Error Resume Next For Each oCompOcc In oAssDoc.ComponentDefinition.Occurrences If oCompOcc.SubOccurrences.Count = 0 Then If oCompOcc.DefinitionDocumentType = kPartDocumentObject Then Set oProp = oCompOcc.Definition.Document.PropertySets.Item(1).Item(5) sValue = oProp.Value If Not sValue = "" Then oProp.Value = sValue & vbNewLine & oAssDoc.FullDocumentName 'Setzt einen neuen Inhalt Else oProp.Value = oAssDoc.FullDocumentName End If End If Else Call AllSubOccs(oCompOcc) End If Next MsgBox "Fertsch" End Sub Private Sub AllSubOccs(ByVal oCompOcc As ComponentOccurrence) Dim oSubCompOcc As ComponentOccurrence Dim oProp As Property Dim sValue As String On Error Resume Next For Each oSubCompOcc In oCompOcc.SubOccurrences If oSubCompOcc.SubOccurrences.Count = 0 Then If oSubCompOcc.DefinitionDocumentType = kPartDocumentObject Then Set oProp = oSubCompOcc.Definition.Document.PropertySets.Item(1).Item(5) sValue = oProp.Value If Not sValue = "" Then oProp.Value = sValue & vbNewLine & oCompOcc.Definition.Document.FullDocumentName 'Setzt einen neuen Inhalt Else oProp.Value = oCompOcc.Definition.Document.FullDocumentName End If Else Call AllSubOccs(oSubCompOcc) End If End If Next End Sub
Es fehlt: - Einlesen des vorhandenen Propertyinhaltes - Zerlegen des Inhaltes in einzelne Strings (je ein BG die das BT enthält) - Vergleichen jedes Strings mit dem neu dazuzuschreibenden - Entweder neuen String verwerfen, weil schon vorhanden - oder hinzufügen - und irgendwas, das ich auch vergessen hab ------------------ MfG RK [Diese Nachricht wurde von rkauskh am 24. Jan. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Skeater Mitglied

 Beiträge: 42 Registriert: 25.05.2002
|
erstellt am: 24. Jan. 2010 23:18 <-- editieren / zitieren --> Unities abgeben:         
Hallo rkauskh. Das ist schon super. Es ist zwar noch nicht ganz so wie ich es wollte, aber der Ansatz ist toll. Jetzt kann ich schon mal etwas arbeiten. Hat jemand eine Idee wie ich prüfen kann ob es diesen Eintrag schon gibt? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 24. Jan. 2010 23:59 <-- editieren / zitieren --> Unities abgeben:          Nur für Skeater
Hallo Nur um mal mit einem weit verbreiteten Mißverständnis aufzuräumen, das hier ist keine Makrobestellecke. Zum Vergleichen mußt du, wie oben schon erwähnt den String der im iProperty steht anhand eines Trennzeichens zerlegen. Das Trennzeichen könnte hier Carriage-Return Chr(13) sein. Zum Trennen schau dir die Funktion Split an. Die liefert ein Array zurück, das einzeln durchlaufen und mit dem neuen Wert verglichen werden muß. Die Split-Funktion kannst du auch hernehmen, um statt des FullDocumentName nur den Dateinamen "herauszuschneiden", falls du den Pfad nicht dabei haben willst. Hier ist ein Beispiel dafür. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |