| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Technische Kommunikation mit der 3DEXPERIENCE Plattform |
Autor
|
Thema: Bohrungstabelle - als txt speichern unter - Makro? (827 mal gelesen)
|
grisu486 Mitglied Senior Technical Consultant MCAD
Beiträge: 575 Registriert: 14.11.2005
|
erstellt am: 17. Jan. 2006 18:11 <-- editieren / zitieren --> Unities abgeben:
Hi! Wir haben hier ein "Problem" mit Bohrungstabellen. Unsere Programmierer brauchen einen Textfile, den man "einfach" erstellen kann, indem man die Tabelle markiert, "Datei, speichern unter" anklickt, den Dateipfad wählt, den Dateityp (*.txt) auswählt und dann den Dateinamen eingibt. Soweit so gut. Aber das muss man doch per Makro mit einen Klick machen können. Solidworks hat doch alle Informationen, um das Textfile korrekt abspeichern zu können. Ich habe im Forum gesucht und http://ww3.cad.de/foren/ubb/Forum2/HTML/008871.shtml#000000 gefunden. Das Makro ist schon ziemlich gut, eine Größenanpassung der Zeilen ist schon mal nicht schlecht. Zur Lösung meines Problem fehlt mir jetzt eine Funktion, die die selektierte Tabelle als Text unter einem gewissen Namen abspeichert. In der Hilfe habe ich "TableAnnotation.SaveAsText" gefunden, komme damit aber nicht zurecht ... ... irgendwann sollte ich vielleicht mal einen API-Kurs mitmachen ... Viele Grüße *uwe* Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brummbaer Mitglied Student / Maschinenbau
Beiträge: 28 Registriert: 25.11.2004
|
erstellt am: 18. Jan. 2006 07:37 <-- editieren / zitieren --> Unities abgeben: Nur für grisu486
Hallo, ich habe diesen Befehl zwar noch nicht benutzt, aber der Befehl enthält doch nur zwei Parameter; den Dateinamen (mit Pfad) und das gewünschte Trennzeichen. Beim Dateinamen ist zu beachten, dass die Trennung durch "\\" erfolgt; z.B "D:\\Verzeichnis\\Name.Txt"
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grisu486 Mitglied Senior Technical Consultant MCAD
Beiträge: 575 Registriert: 14.11.2005 StartupTools 9.0.1.0 GENIUS TOOLS for Creo Creo 9.0 Creo 8.0 Creo 7.0 GENIUS TOOLS ModelProzessor GENIUS TOOLS ModelProzessorUser (jeweils die aktuellste Versionen und bei Bedarf auch ältere - aber nicht gerne) HP Z-Book G9 Quadro RTX A3000 12 GB Windows 11
|
erstellt am: 18. Jan. 2006 09:32 <-- editieren / zitieren --> Unities abgeben:
Ja ... hmmmm ... Ich sagte ja, ich komme damit nicht zurecht So einfach geht es jedenfalls NICHT, es tritt ein Laufzeitfehler "424" auf, mit dem Hinweis, es sei ein Objekt erforderlich ... ======================================== If SelectionMgr.GetSelectedObjectCount >= 1 Then ' wenn es eine der neuen (seit 2004) Tabellen ist If SelectionMgr.GetSelectedObjectType(1) = swSelANNOTATIONTABLES Then ' dann die Tabelle holen, das ist dei komplette Tabelle, auch wenn ' diese gesplittet wurde, was die Sache natürlich deutlich vereinfacht Set Kotab = SelectionMgr.GetSelectedObject5(1) TableAnnotation.SaveAsText = ("c:\\test.txt") ' Und ein rebuild, damit man es auch sieht ' do a rebuild to show the changes DrawingDoc.EditRebuild Else MsgBox "Bitte Bohrungstabelle (selektieren", vbOKOnly + vbExclamation, "Information" End If Else MsgBox "Bitte Bohrungstabelle selektieren", vbOKOnly + vbExclamation, "Information" End If ======================================== Ich gebe es ja zu, ich ziemlich schlecht in VB ... Viele Grüße *uwe* Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 18. Jan. 2006 16:40 <-- editieren / zitieren --> Unities abgeben: Nur für grisu486
Hallo Uwe also ich glaube der Fehler liegt im Aufruf von "saveastext" Sollte meiner Meinung nach über "Kotab.saveasText..." erfolgen anbei ein paar Zeilen die bei mir funktionieren mit dem Vorteil, dass selbstständig nach einer Bohrungstabelle gesucht wird Sub main() Dim swApp As SldWorks.SldWorks Dim tab1 As SldWorks.TableAnnotation Dim selmgr As SldWorks.SelectionMgr Dim modell As SldWorks.ModelDoc2 Dim swView As SldWorks.View Dim swtable As SldWorks.TableAnnotation Dim col As New Collection Set swApp = Application.SldWorks '** Es erfolgt keine Prüfung ob eine Zeichnungsdatei geöffnet ist Set modell = swApp.ActiveDoc Set selmgr = modell.SelectionManager '** Wenn nichts selektiert ist suchen wir selbst nach einer Bohrungstabelle If selmgr.GetSelectedObjectCount = 0 Then Set swView = modell.GetFirstView Do While Not swView Is Nothing Set tab1 = swView.GetFirstTableAnnotation Do While Not tab1 Is Nothing If tab1.Type = swTableAnnotation_HoleChart Then col.Add tab1 End If Set tab1 = tab1.GetNext Loop Set swView = swView.GetNextView Loop '** Es wurde eine Bohrungstabelle gefunden If col.Count = 1 Then Set tab1 = col.Item(1) Else '** Es wurden mehrere Bohrungstabellen gefunden MsgBox "Es sind mehrere Bohrungstabellen vorhanden" + Chr(10) + "Bitte wählen Sie eine aus und starten Sie das Makro neu", vbOKOnly, "Meldung" Exit Sub End If Else '** Es wurde etwas selektiert If selmgr.GetSelectedObjectType3(1, 0) = swSelANNOTATIONTABLES Then Set tab1 = selmgr.GetSelectedObject5(1) Else '** Die selektierte Tabelle ist keine Bohrungstabelle MsgBox "Sie haben keine Bohrungstabellen gewählt" + Chr(10) + "Bitte wählen Sie eine aus und starten Sie das Makro neu", vbOKOnly, "Meldung" Exit Sub End If End If tab1.SaveAsText "C:\TAB04.TXT", "" Set swView = Nothing Set tab1 = Nothing Set selmgr = Nothing Set modell = Nothing Set swApp = Nothing End Sub
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grisu486 Mitglied Senior Technical Consultant MCAD
Beiträge: 575 Registriert: 14.11.2005
|
erstellt am: 18. Jan. 2006 16:52 <-- editieren / zitieren --> Unities abgeben:
|
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 18. Jan. 2006 16:52 <-- editieren / zitieren --> Unities abgeben: Nur für grisu486
NACHTRAG ich würde den Abschnitt "Es wurde etwas selektiert" noch verbessern um sicher zu gehen, dass wirklich eine Bohrungstabelle gewählt wurde und nicht einen andere Tabelle '** Es wurde etwas selektiert If selmgr.GetSelectedObjectType3(1, 0) = swSelANNOTATIONTABLES Then Set tab1 = selmgr.GetSelectedObject5(1) If tab1.Type <> swTableAnnotation_HoleChart Then '** Die selektierte Tabelle ist keine Bohrungstabelle MsgBox "Sie haben keine Bohrungstabellen gewählt" + Chr(10) + "Bitte wählen Sie eine aus und starten Sie das Makro neu", vbOKOnly, "Meldung" Exit Sub End If Else '** Das selektierte Objekt ist keine Bohrungstabelle MsgBox "Sie haben keine Bohrungstabellen gewählt" + Chr(10) + "Bitte wählen Sie eine aus und starten Sie das Makro neu", vbOKOnly, "Meldung" Exit Sub End If
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 18. Jan. 2006 17:01 <-- editieren / zitieren --> Unities abgeben: Nur für grisu486
Wo man das lernt: 1. (und meiner Meinung nach am wichtigsten) "Learning by doing" über viele Jahre Nie aufgeben! 2. Die Onlinehilfe und die Beispiele durchforsten und Teile daraus verwenden und abändern 3. Kurse (bedingt) da bei Kursen die Funktionen auch nur sehr allgemein erklärt werden. Was auch verständlich ist bei der Anzahl von Funktionen. Es muss sich dann jeder selbst mit seinen Problemen beschäftigen
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grisu486 Mitglied Senior Technical Consultant MCAD
Beiträge: 575 Registriert: 14.11.2005
|
erstellt am: 18. Jan. 2006 17:38 <-- editieren / zitieren --> Unities abgeben:
Naja ... 1. Learning by doing is ja scho klar, es wird schon etwas besser ... und aufgeben werde ich sowieso nicht! 2. Ich durchforste und schlachte aus und verwende und und und ... Das klappt schon ganz gut! 3. Es müsste jemanden geben, der einem beim programmieren über die Schulter schaut und im Zweifelsfalle hilft ... Auf jeden Fall nochmals vielen Dank für das Makro! Es erleichtert uns wieder mal ein kleines bisschen die alltägliche Arbeit! Viele Grüße *uwe* Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brummbaer Mitglied Student / Maschinenbau
Beiträge: 28 Registriert: 25.11.2004
|
erstellt am: 19. Jan. 2006 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für grisu486
Hallo, ich finde man sollte sich erstmal ein wenig mit den Grundlagen des Programmierens beschäftigen, bevor man Makros programmiert. Denn ohne diese Grundlagen versteht man ja nicht wie die Beispiele funktionieren. Das mit der API- bzw. Makroprogrammierung ergibt sich dann von ganz allein, man hat ein Problem.... sucht sich aus der API-Hilfe die benötigten Befehle bzw. Objekte raus und löst das Problem oder auch nicht. mfg Brummbaer
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |