Autor
|
Thema: Excelliste sortieren (2030 mal gelesen)
|
Meggie275 Mitglied Konstrukteurin
Beiträge: 12 Registriert: 24.04.2008 CATIA V5 Rel.18 auf Windows
|
erstellt am: 24. Apr. 2008 15:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin noch ganz frisch in der Macroprogrammierung. Zur Zeit versuche ich mich an einer Stückliste. Ich schreibe über die Stücklistenfunktion in CATIA V5 die Teilenummern, Nomenklatur, etc. aller Produkte und Parts in eine Excel Datei. Das klappt auch schon gut. Jetzt möchte ich aber diese Einträge in Excel sortieren (A->Z). Hat jemand eine Idee wie das in VBA for CATIA funktioniert? In Excel VBA habe ich das mit Hilfe von Macro Aufzeichnen ganz leicht hinbekommen. Leider lässt sich dieser befehl nicht in CATIA VBA anwenden. Gruss Meggie [Diese Nachricht wurde von Meggie275 am 24. Apr. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
efbe Mitglied Entwicklungsingenieur
Beiträge: 174 Registriert: 18.12.2003 Pro/E WF2, CATIA V5R14, Pro/MECH 2001
|
erstellt am: 24. Apr. 2008 15:33 <-- editieren / zitieren --> Unities abgeben: Nur für Meggie275
Wenn du direkt im CATIA programmierst, dann musst du erstmal eine Verbindung zum EXCEL-Objekt aufbauen: Dim my_EXCEL As Excel.Application Set my_EXCEL = GetObject(, "Excel.Application") Dim my_sheet As Excel.Worksheet Set my_sheet = my_EXCEL.ActiveWorkbook.Sheets("PackData") Den Namen des Worksheets musst du natürlich anpassen - oder du wählst einfach das Aktive Sheet aus. Über my_sheet kannst du jetzt auf sämtliche Spalten und deren Sortierungen zugreifen - wie gewohnt. Viel Spaß, frank. ------------------ So long, Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meggie275 Mitglied Konstrukteurin
Beiträge: 12 Registriert: 24.04.2008 CATIA V5 Rel.18 auf Windows
|
erstellt am: 24. Apr. 2008 15:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Frank, das habe ich gemacht. Ich öffne aus CATIA die Excel Datei, in die die Stückliste geschrieben wurde. ich habe es auch schon geschafft, da dann alles zu löschen, was ich nicht in der Liste haben will, aber mit dem Sortieren klappt es nicht. EXCEL.Application.Range("B5", "B14").Select EXCEL.Application.Selection.Sort <- diesen Befehl kennt er nicht Hast Du eine Idee, wie es heissen muss? Gruss Meggie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001
|
erstellt am: 24. Apr. 2008 15:59 <-- editieren / zitieren --> Unities abgeben: Nur für Meggie275
|
Meggie275 Mitglied Konstrukteurin
Beiträge: 12 Registriert: 24.04.2008 CATIA V5 Rel.18 auf Windows
|
erstellt am: 24. Apr. 2008 16:09 <-- editieren / zitieren --> Unities abgeben:
Ich wollte es genauso machen wie in Excel: Zellen markieren und dann sortieren. In Excel wäre das Range("A1:B3").Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Anbei mal mein komplettes Marco. Vielleicht wird es dann klarer. Sub CATMain() Dim productDocument1 As ProductDocument Set productDocument1 = CATIA.ActiveDocument Dim product1 As Product Set product1 = productDocument1.Product Dim assemblyConvertor1 As AssemblyConvertor Set assemblyConvertor1 = product1.GetItem("BillOfMaterial") Dim arrayOfVariantOfBSTR1(4) arrayOfVariantOfBSTR1(0) = "LFD-Nr." arrayOfVariantOfBSTR1(1) = "Teilenummer" arrayOfVariantOfBSTR1(2) = "Benennung" arrayOfVariantOfBSTR1(3) = "Menge" arrayOfVariantOfBSTR1(4) = "Typ" Set assemblyConvertor1Variant = assemblyConvertor1 assemblyConvertor1Variant.SetCurrentFormat arrayOfVariantOfBSTR1 Dim Datei As String Datei = CATIA.FileSelectionBox("Stückliste speichern", "*.xls", CatFileSelectionModeSave) If Datei <> " " Then If Right(Datei, 4) <> ".xls" Then Datei = Datei & ".xls" End If assemblyConvertor1.[Print] "XLS", Datei, product1 Dim EXCEL As Object Set EXCEL = CreateObject("Excel.Application") EXCEL.Workbooks.Open Datei EXCEL.Visible = True EXCEL.Application.Range("B5").Select i = 5 Do While EXCEL.Application.Range("B" & i) <> Empty EXCEL.Application.Range("B" & i + 1).Select i = i + 1 Loop j = i + 1 EXCEL.Application.Range("A" & j, "E500").ClearContents EXCEL.Application.Range("A5", "E" & i).Select EXCEL.Application.Selection.Sort EXCEL.Application.ActiveWorkbook.Save EXCEL.Application.ActiveWindow.Close MsgBox ("Die Stückliste wurde unter " & Datei & " gespeichert.") Else Exit Sub End If End Sub Meggie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001
|
erstellt am: 24. Apr. 2008 16:56 <-- editieren / zitieren --> Unities abgeben: Nur für Meggie275
|
Meggie275 Mitglied Konstrukteurin
Beiträge: 12 Registriert: 24.04.2008 CATIA V5 Rel.18 auf Windows
|
erstellt am: 24. Apr. 2008 17:15 <-- editieren / zitieren --> Unities abgeben:
|
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001
|
erstellt am: 24. Apr. 2008 18:10 <-- editieren / zitieren --> Unities abgeben: Nur für Meggie275
Sorry, aber ein wenig solltest Du schon schauen was die einzelne Syntax bedeutet, alles vorgekaut wird Dir hier meistens auch nicht. Code: Dim EXCEL As Object Set xlObj= CreateObject("Excel.Application") xlObj.Open Datei xlObj.Visible = True xlObj.Range("B5").Select i = 5 Do While xlObj.Range("B" & i) <> Empty xlObj.Range("B" & i + 1).Select i = i + 1 Loop j = i + 1 xlObj.Range("A" & j, "E500").ClearContents xlObj.Range("A5", "E" & i).Sort Key1:=xlObj.Columns("B"), Order1:=xlDescending, Header:=xlNo xlObj.ActiveWorkbook.Save xlObj.ActiveWindow.Close Set objXL = Nothing
So auf die Schnelle, ungetestet (VGIT). Was Du mit Deiner Schleife genau willst bzw Deinen leeren der Spalten ist mir auch nicht ganz klar ------------------ Inoffizielle deutsche CATIA Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meggie275 Mitglied Konstrukteurin
Beiträge: 12 Registriert: 24.04.2008 CATIA V5 Rel.18 auf Windows
|
erstellt am: 25. Apr. 2008 08:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Axel, danke, dass Du Dich meinem problem annimmst! Und sorry, wenn es so rueber kam als wollte ich, dass mir hier jemand etwas vorkaut! Ich suche nur verzweifelt nach einem Befehl. Und so wie Du es in Deiner letzten Antwort beschrieben hast, habe ich es in meinem Code dann auch angepasst gehabt, aber leider laeuft es nicht. Warum ich vorher Zeilen loesche ist, weil ich nur die Stueckliste der Hauptbaugruppe brauche, Catia aber auch die Stuecklisten aller Unterbaugruppen rausschreibt. Diese loesche ich dann mit der Schleife raus. Ist dann nur die Liste der Hauptbaugruppe uebrig, moechte ich diese nach der LFD-Nr. sortieren... aber wie gesagt, ich bekomm einfach nicht raus, wie es heissen muss. Gruss Meggie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001
|
erstellt am: 25. Apr. 2008 08:23 <-- editieren / zitieren --> Unities abgeben: Nur für Meggie275
|
Meggie275 Mitglied Konstrukteurin
Beiträge: 12 Registriert: 24.04.2008 CATIA V5 Rel.18 auf Windows
|
erstellt am: 25. Apr. 2008 09:05 <-- editieren / zitieren --> Unities abgeben:
Ich habe den Code ao geaendert, wie Du es in Deinen antworten vorgeschlagen hast. Wenn ich es mit xlObj.Columns("A:E").Sort usw. probiere, bekomme ich die Fehlermeldung "Die Sort-Methode des Range-Objektes konnte nicht ausgefuehrt werden". Ersetze ich Columns durch .Range("A5","E14") kommt die Fehlermeldung "Application-defined or Object-defined error" mit der selben Fehlernummer 1004. Anbei die Exceltabelle (als txt) so wie Catia sie rausschreibt, und einmal so wie es spaeter aussehen soll. Meggie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001
|
erstellt am: 25. Apr. 2008 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für Meggie275
|
Meggie275 Mitglied Konstrukteurin
Beiträge: 12 Registriert: 24.04.2008 CATIA V5 Rel.18 auf Windows
|
erstellt am: 25. Apr. 2008 13:56 <-- editieren / zitieren --> Unities abgeben:
So funktioniert es leider auch nicht. Er sagt immer wieder, dass er die Methode Sort nicht ausfuehren kann. Ich hab schon soviele Kombinationen ausprobiert, es klappt einfach nicht. Es ist zum Haare raufen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001
|
erstellt am: 27. Apr. 2008 21:03 <-- editieren / zitieren --> Unities abgeben: Nur für Meggie275
Hier ist noch mal eine neue Basis. Ich habe das mit einem vbs Script getestet und es hat funktioniert (Achtung, es gibt noch Unterschiede zwischen Office 2003 und Office 2007). Code: Dim objXL As Object Const xlTopToBottom = 1 Const xlPinYin = 1 Const xlYes = 1Set objXL = WScript.CreateObject("Excel.Application") Set fso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Datei="C:\Dokumente und Einstellungen\Axel\Desktop\test\vor_bearbeitung.xls" objXL.Workbooks.Open Datei objXL.Visible = True objXL.ActiveWorkbook.Worksheets(1).Range("B5").Select i = 5 Do While objXL.ActiveWorkbook.Worksheets(1).Range("B" & i) <> Empty objXL.ActiveWorkbook.Worksheets(1).Range("B" & i + 1).Select i = i + 1 Loop j = i + 1 objXL.ActiveWorkbook.Worksheets(1).Range("A" & j, "E500").ClearContents ' Office 2003 objXL.ActiveWorkbook.Worksheets(1).Range("A5", "E" & i).Sort(objXL.ActiveWorkbook.Worksheets(1).Range("A4")) ' Office2007 'With objXL.ActiveWorkbook.Worksheets(1).Sort ' .SetRange objXL.Worksheets(1).Range("A4:E10") ' .Header = xlYes ' .MatchCase = False ' .Orientation = xlTopToBottom ' .SortMethod = xlPinYin ' .Apply 'End With objXL.ActiveWorkbook.Save objXL.ActiveWindow.Close
Set objXL = Nothing
Deine Schleifen kann man mit Sicherheit noch optimaler gestalten, da hatte ich aber noch keine Gelegenheit. Axel ------------------ Inoffizielle deutsche CATIA Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meggie275 Mitglied Konstrukteurin
Beiträge: 12 Registriert: 24.04.2008 CATIA V5 Rel.18 auf Windows
|
erstellt am: 28. Apr. 2008 09:07 <-- editieren / zitieren --> Unities abgeben:
|