| |
| KISTERS 3DViewStation: Mehr CAD Lizenzen durch 3D-Viewer ersetzen und Geld sparen, eine Pressemitteilung
|
Autor
|
Thema: Herauslesen von Normen aus Zeichnung (1337 / mal gelesen)
|
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 25. Feb. 2020 12:30 <-- editieren / zitieren --> Unities abgeben:
Hallo liebes Forum, ich benötige ein Makro, das aus einer Zeichnung spezielle Normen herausliest. Diese Normen sollen anschließend ausgegeben werden. Hat jemand eine Idee, wie man das umsetzen könnte? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 743 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Feb. 2020 14:16 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
|
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 25. Feb. 2020 14:24 <-- editieren / zitieren --> Unities abgeben:
Also: Ich habe eine Zeichnung/Drawing in CATIA. Es gibt bei uns eine Vielzahl von Normen, von denen aber nur einige wenige auf der Zeichnung zu finden sind. Wichtig ist nur der Name der Norm, z.B. XY123. Die auf der Zeichnung vorhandenen Normen werden in einer Tabelle auf der Zeichnung zusammengefasst. Ich möchte nun ein Makro programmieren, dass die vorhandenen Normen auf der Zeichnung erfasst und diese anschließend ausgibt, sodass man nicht jede einzelne Norm auf der Zeichnung suchen muss, sondern direkt die benötigte Tabelle auf der Zeichnung ausfüllen kann. Die Normen, die auf der Zeichnung zu finden sein können, liegen mir dabei vor und könnten im Quellcode implementiert werden, z.B. XY123 oder XY456. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 743 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Feb. 2020 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
Hallo, über was für Normen reden wir hier (Normteile wie Schrauben usw.) oder Zeichnungsnormen (wie Allgemeintoleranzen)? In welcher Form sind diese Normen in der Zeichnung enthalten? Als Text? Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 25. Feb. 2020 14:34 <-- editieren / zitieren --> Unities abgeben:
Es handelt sich dabei um Normen eines großen Automobilherstellers, die alle den gleichen Aufbau besitzen: XY123. Die Normen liegen dabei als Text in der Zeichnung vor. Ich möchte nur, dass das Makro die Normen, die in der Zeichnung zu finden sind, erfasst. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 743 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Feb. 2020 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
Hallo, ich gehe mal davon aus das die Textfelder mit den Normen nicht eindeutig benannt sind. Dann kannst du eigentlich nur alle Textfelder durchgehen (Alle Blätter, alle Ansichten) und den Inhalt mit einer Liste (im Quellcode, als Textdatei) vergleichen. Die Treffer (doppelte entfernen) gibst du dann wie auch immer aus. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 25. Feb. 2020 15:25 <-- editieren / zitieren --> Unities abgeben:
|
Randle Mitglied CAD/PLM Consultant
Beiträge: 743 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Feb. 2020 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
Hallo, hier ungetestet. Code:
Sub CATMain()Dim oDrwDoc As DrawingDocument Dim oDrwSheet As DrawingSheet Dim oDrwView As DrawingView Dim oDrwText As DrawingText Set oDrwDoc = CATIA.ActiveDocument For Each oDrwSheet In oDrwDoc.Sheets For Each oDrwView In oDrwSheet.Views If oDrwView.Texts.Count > 0 Then For Each oDrwText In oDrwView.Texts If oDrwText.Text = "DEIN TEXT" Then # was auch immmer damit dann passieren soll End Next End If Next Next End Sub
Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 25. Feb. 2020 16:00 <-- editieren / zitieren --> Unities abgeben:
Alles klar, vielen, vielen Dank! Sub CATMain() Dim oDrwDoc As DrawingDocument Dim oDrwSheet As DrawingSheet Dim oDrwView As DrawingView Dim oDrwText As DrawingText Set oDrwDoc = CATIA.ActiveDocument For Each oDrwSheet In oDrwDoc.Sheets For Each oDrwView In oDrwSheet.Views If oDrwView.Texts.Count > 0 Then For Each oDrwText In oDrwView.Texts If oDrwText.Text = "1234" Then MsgBox = "1234" End If End Next End If Next Next End Sub Bei mir hat er nun mit der MsgBox Probleme: Er zeigt an "Compile Error: Function call on left-hand side of assignment must return Variant or Objekt." Hast du eine Idee, woran das liegen könnte? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Feb. 2020 16:15 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
|
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 25. Feb. 2020 16:18 <-- editieren / zitieren --> Unities abgeben:
|
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 25. Feb. 2020 16:31 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Feb. 2020 16:34 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
Servus Der Code greift auf alle Views zu. Für Background nur oDrwSheet.Views.Item(2) nutzen. (siehe auch V5Automation.chm) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 27. Feb. 2020 09:26 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für deine Antwort. Kannst du mir sagen, wo und wie ich den Quellcode ändern muss, um auf die Textboxen im "Sheet Background" zuzugreifen? Aktuell greift er nämlich nur auf die "Drawing View" zu. Vielen Dank Sub CATMain() Dim oDrwDoc As DrawingDocument Dim oDrwSheet As DrawingSheet Dim oDrwView As DrawingView Dim oDrwText As DrawingText Dim auto As Variant Set oDrwDoc = CATIA.ActiveDocument For Each oDrwSheet In oDrwDoc.Sheets For Each oDrwView In oDrwSheet.Views If oDrwView.Texts.Count > 0 Then For Each oDrwText In oDrwView.Texts If oDrwText.Text = "1234" Then MsgBox "1234" End If End Next End If Next Next End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Feb. 2020 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
Servus Versuch den Code zu verstehen. Er greift auf alle Views zu (auch auf den Background). Code: For Each oDrwSheet In oDrwDoc.Sheets Set oDrwView = oDrwSheet.Views.Item(2) ' usw.
Eventuell suchst du auch falsch nach dem Text. In deinem Beispiel wird der Text nur gefunden, wenn genau dieser vorkommt (also auch kein weiteres Zeichen mehr vorkommt) ggf musst du die Suche anders gestalten (zB mit InStr in den Texten des Textfeldes suchen) Gruß Bernd PS: ggf mal ein Screenshot posten, wie so ein Text aussieht in dem die Norm erwähnt wird ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 27. Feb. 2020 10:12 <-- editieren / zitieren --> Unities abgeben:
Besten Dank für die schnelle Antwort. Ich habe den Quellcode nun etwas umgebaut: For I = 1 To CATIA.ActiveDocument.Sheets.ActiveSheet.Views.Item(2).Texts.Count If (CATIA.ActiveDocument.Sheets.ActiveSheet.Views.Item(2).Texts.Item(I).Text = "Zeichnungsnummer") Then Z_Nummer = CATIA.ActiveDocument.Sheets.ActiveSheet.Views.Item(2).Texts.Item(I).Text MsgBox Z_Nummer Exit For End If Next Problem ist aber noch, dass er halt genau nach dem Wort sucht, wie du schon gesagt hast. Allerdings stehen die Normen häufig auch im laufenden Text und immer an unterschiedlichen Positionen im Satz: "dklfjadoiajfea XY123 dfsjaljfilosaöjöfla" Gibt es da eine schnelle Lösung, um es auch im laufenden Text zu erkennen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Feb. 2020 10:20 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
Servus Schau dir mal die String-Methoden von VB an. Ich würde zB mit If InStr(oDrwText.Text,"ISO ") <> 0 then ... danach suchen. Gruß Bernd PS: Bitte Code in enstprechenden Tags posten und Systeminfo ergänzen ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 27. Feb. 2020 10:40 <-- editieren / zitieren --> Unities abgeben:
Danke für deinen Tipp. Mein Quellcode sieht nun wie folgt aus: Sub CATMain() Dim oDrwDoc As DrawingDocument Dim oDrwSheet As DrawingSheet Dim oDrwView As DrawingView Dim oDrwText As DrawingText Set oDrwDoc = CATIA.ActiveDocument For Each oDrwSheet In oDrwDoc.Sheets For Each oDrwView In oDrwSheet.Views If oDrwView.Texts.Count > 0 Then For Each oDrwText In oDrwView.Texts If InStr(oDrwText.Text, "50181") <> 0 Then MsgBox "Zeichnungsnummer" End If If InStr(oDrwText.Text, "12345") <> 0 Then MsgBox "12345" End If End Next End If Next Next End Sub Leider findet er nur Zahlen, wenn ich jetzt, z.B. nach "VW" suchen will, funktioniert es nicht mehr. Woran liegt das? Vielen Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Feb. 2020 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
Servus Also bei mir geht es (auch mit "VW"). Hast du wirklich "Textfelder"? Oder hast du 2D-Details in denen du nach den "Normen" suchst? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 27. Feb. 2020 10:54 <-- editieren / zitieren --> Unities abgeben:
|
Randle Mitglied CAD/PLM Consultant
Beiträge: 743 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 27. Feb. 2020 11:19 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
|
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 27. Feb. 2020 11:35 <-- editieren / zitieren --> Unities abgeben:
Ja, das weiß ich. Danke. Wenn eine Textbox auf der Zeichnung zu finden ist, funktioniert es jetzt auch zuverlässig. Wenn sich allerdings mehrere Textboxen auf der Zeichnung zu finden sind. Funktioniert es nicht mehr, obwohl er ja eigentlich jede Textbox durchgehen sollte. Oder sind die If-Schleifen falsch gesetzt? Sub CATMain() Dim oDrwDoc As DrawingDocument Dim oDrwSheet As DrawingSheet Dim oDrwView As DrawingView Dim oDrwText As DrawingText Set oDrwDoc = CATIA.ActiveDocument For Each oDrwSheet In oDrwDoc.Sheets For Each oDrwView In oDrwSheet.Views If oDrwView.Texts.Count > 0 Then For Each oDrwText In oDrwView.Texts If InStr(oDrwText.Text, "VW") <> 0 Then MsgBox "Zeichnungsnummer" End If If InStr(oDrwText.Text, "123") <> 0 Then MsgBox "12345" End If End Next End If Next Next End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Feb. 2020 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für davidmeyer98
Servus Was soll das End zwischen dem letzten End if und Next? Deshalb immer Code versuchen nachzuvollziehen und durch entsprechende Einrückungen strukturieren. In solch einem Fall hilft es: den Code im VBA-Editor schrittweise ablaufen lassen oder über zusätzliche MsgBox schauen wo der Code hängt/aussteigt/springt Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
davidmeyer98 Mitglied Student
Beiträge: 13 Registriert: 25.02.2020
|
erstellt am: 27. Feb. 2020 12:22 <-- editieren / zitieren --> Unities abgeben:
|