Autor
|
Thema: Auswahl von Teilen, deren Name enthält Variable string geben mit Inbox (935 mal gelesen)
|
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 25. Mrz. 2014 15:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute Kann jemand mir kurz zeigen, wie kann ich alle Teile mit genauen Namen selektieren und unter TXT-Datei schreiben? Der Name soll enthalten ein String welcher bei Inputbox gegeben ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ptit.tom Mitglied CAD-Berater
Beiträge: 114 Registriert: 11.02.2005 win10, CATIA R19 bis R30
|
erstellt am: 25. Mrz. 2014 16:55 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Hallo, Es geht mit einer Selektion und die Suchefunktion, etwa so: Code: Dim myString As String myString = InputBox("Which string are you looking for ?", "Title", "abc") 'String abfragen Dim oSel As Selection Set oSel = CATIA.ActiveDocument.Selection 'Selection erzeugen oSel.Clear Dim strSearch As String strSearch = "('Part Design'.Part & Name=*" & myString & "*);all" oSel.Search strSearch 'parts mit dem passenden Namen suchenMsgBox oSel.Count & " part(s) found" Dim cmyParts As New Collection Dim i As Integer For i = 1 To oSel.Count 'Namen der gefundenen PArts in eine Collection packen cmyParts.Add oSel.Item(i).Value Debug.Print cmyParts.Item(i).Name Next 'Create the text file Dim fs 'As Object Dim A 'As Object Set fs = CreateObject("Scripting.FileSystemObject") Set A = fs.CreateTextFile("C:\Temp\PartList.txt", True) For i = 1 To cmyParts.Count A.WriteLine (cmyParts.Item(i).Name) Next A.Close
[Diese Nachricht wurde von ptit.tom am 26. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 26. Mrz. 2014 12:38 <-- editieren / zitieren --> Unities abgeben:
Halo ptit.tom Danke für deine Antwort. Kleine Erklärung: Ich muss das Skript unter .catscript laufen, deshalb habe ich der Code ein bischen überarbeitet:
Code:
Dim myString 'As String myString = InputBox("Which string are you looking for ?", "Title", "abc") 'String abfragen Dim oSel 'As Selection Set oSel = CATIA.ActiveDocument.Selection 'Selection erzeugen oSel.Clear Dim strSearch 'As String strSearch = "('Part Design'.Part & Name=*" & myString & "*);all" oSel.Search strSearch 'parts mit dem passenden Namen suchen MsgBox oSel.Count & " part(s) found"Dim cmyParts 'As New Collection Dim i 'As Integer For i = 1 To oSel.Count 'Namen der gefundenen PArts in eine Collection packen cmyParts.Add oSel.Item(i).Value Debug.Print cmyParts.Item(i).Name Next 'Create the text file Dim fs 'As Object Dim A 'As Object Set fs = CreateObject("Scripting.FileSystemObject") Set A = fs.CreateTextFile("C:\Temp\PartList.txt", True) For i = 1 To cmyParts.Count A.WriteLine (cmyParts.Item(i).Name) Next A.Close
aber leider noch
Code:
Dim cmyParts 'As New Collection Dim i As IntegerFor i = 1 To oSel.Count 'Namen der gefundenen PArts in eine Collection packen cmyParts.Add oSel.Item(i).Value Debug.Print cmyParts.Item(i).Name Next
gibts mier Fehlermeldung, das Obiekt cmyParts ist benötig Was habe ich Falsch gemacht? P.S. Sorry für mein Deutsch - ich habe das lang nicht genutzt
[Diese Nachricht wurde von Sylas am 26. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ptit.tom Mitglied CAD-Berater
Beiträge: 114 Registriert: 11.02.2005 win10, CATIA R19 bis R30
|
erstellt am: 26. Mrz. 2014 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
OK, eigentlich kann man auch ohne Collection vorgehen. Ich bin nur daran gewöhnt, es anzuwenden. Code: Sub CATMain() Dim myString 'As StringmyString = InputBox("Which string are you looking for ?", "Title", "abc") Dim oSel 'As Selection Set oSel = CATIA.ActiveDocument.Selection oSel.Clear Dim strSearch 'As String strSearch = "('Part Design'.Part & Name=*" & myString & "*);all" oSel.Search strSearch MsgBox oSel.Count & " part(s) found" Dim i 'As Integer 'Create the text file Dim fs 'As Object Dim A 'As Object Set fs = CreateObject("Scripting.FileSystemObject") Set A = fs.CreateTextFile("C:\Temp\PartList.txt", True) For i = 1 To oSel.Count A.WriteLine (oSel.Item(i).Value.Name) Next A.Close End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 26. Mrz. 2014 14:26 <-- editieren / zitieren --> Unities abgeben:
Danke! Das ist fast alles was ich brauche! Noch zwei kleine Sachen: 1. Wie kann ich der File A am Ende öffnen (Ich meine aktiv Notepad-Fenster mit geöffnetes File)? 2. Wie kann Mann sagen, dass das File soll überspeichert sein, wenn es gibt shcon ein Instanz vom File? [Diese Nachricht wurde von Sylas am 26. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ptit.tom Mitglied CAD-Berater
Beiträge: 114 Registriert: 11.02.2005 win10, CATIA R19 bis R30
|
erstellt am: 26. Mrz. 2014 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
1. mit catscript geht es nicht. Mit VBA würde man am Ende die folgende Zeile hinzufügen: Code: Shell "C:\WINDOWS\Notepad.exe C:\Temp\PartList.txt", 1
2. es ist eigentlich das True in der Zeile:
Code: Set A = fs.CreateTextFile("C:\Temp\PartList.txt", True)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 27. Mrz. 2014 08:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich entschuldige mich für weitere Frage - aber wenn ich fange mit ein Thema I will das durch lernen Guck mal auf was ich habe gemacht, und korrigieren bitte: Code:
Sub CATMain() Dim myString 'As String myString = InputBox("Which string are you looking for ?", "Title", "abc")Dim oSel 'As Selection Set oSel = CATIA.ActiveDocument.Selection oSel.Clear Dim strSearch 'As String strSearch = "('Part Design'.Part & Name=*" & myString & "*);all" oSel.Search strSearch MsgBox oSel.Count & " part(s) found" Dim i 'As Integer 'Create the text file Dim fs 'As Object Dim A 'As Object Dim B 'As Object Set fs = CreateObject("Scripting.FileSystemObject") Set A = fs.CreateFolder("C:\Users\cpo_lkowalczyk\Desktop\" & CATIA.ActiveDocument.Name) Set B = fs.CreateTextFile(A & "\" & Index & ".txt", True) For i = 1 To oSel.Count B.WriteLine (oSel.Item(i).Value.Name) Next B.Close End Sub
Zur Zeit, Makro erstellt mir Unterordner auf meinen Desktop Code: Set A = fs.CreateFolder("C:\Users\cpo_lkowalczyk\Desktop\" & CATIA.ActiveDocument.Name)
aber Ich möchte mit dem Makro der TXT-Datei unter solche Pfad abspiechern: geöffnete Produkt-Ordner \ "Index" unterordner \ "index.txt" Noch einen kleinen Problem: wenn irgendwelches Ordner oder File existiert schon, Makro stoppt mit Fehlermeldung. [Diese Nachricht wurde von Sylas am 27. Mrz. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Mrz. 2014 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Den Pfad des aktuellen Documents bekommst du über: CATIA.ActiveDocument.Path (siehe auch V5Automation.chm) Ob ein Verzeichnis existiert kannst du über die Methode "FolderExists" des FileSystemObject prüfen. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |