| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Innovationstag mit SolidCAM und Plogmann bei HEDELIUS in Meppen |
Autor
|
Thema: Makro - Schriftfeld (1422 mal gelesen)
|
Frog80 Mitglied Konstruktionsmensch im Anfangsstadium ;)
Beiträge: 40 Registriert: 05.10.2005 WF3 (M200) M050 SWX 07 (SP 4.0) / SWX 08 (SP 3.1) HP T7400 2 Gig Ram
|
erstellt am: 30. Aug. 2007 15:07 <-- editieren / zitieren --> Unities abgeben:
Hoi! Zuerst mal: Umstieg auf SWX läuft bisher sehr vielversprechend - wahrscheinlich hat dieses Forum bei mir gerade die meisten Hits... also danke Vorab an alle, die wegen meinen Fragen den Kopf schütteln Zweitens: Problem - das Schriftfeld Makro von Stefan ist ziemlich der Hit! Nun ist es bei uns so üblich, dass die letzten 4 Revisionen auf der Zeichnung mit Revisionsnummer, kurzer Beschreibung, Datum und Bearbeiter dargestellt werden. Nun steht man bei Revisionen über 4 an der oberen Kante an.. Meine Idee: über ein Makro einzelne Felder ansteuern (alle Kleinigkeiten in eine eigene "Eigenschaft")- den obersten Satz löschen - danach bei den übrigen alles "-1" setzen (damit eine Zeile wieder frei wird) und schließlich Platz für eine neue Beschreibung zu haben. Habt ihr da eine bessere Lösung für dieses Problem? (Gerne auch ohne Makros!) und JA, ich habe die Suche benutzt! Danke schonmal und viele Grüße! Beni SWX Office Professional 2007 SP4 ------------------ Tomorrow is cancelled due to lack of interest. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 30. Aug. 2007 16:59 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
Ich hab für uns auch ein Makro geschrieben, mit dem wir alle möglichen Dateieigenschaften eintragen, u.a. Änderungsindex 1 bis 7, Änderungsinhalt, Änderungsdatum und Änderer (Name). Wenn das Schriftfeld bei den Änderungen voll ist, und ich trotzdem noch eine Änderung hinzufügen will, stehe ich vor deinem Problem, wenn ich dich richtig verstanden habe. Ich gehe so vor: Die Änderungsinhalte werden eingelesen und die jeweiligen Werte durch den Wert mit dem jeweils höheren Index ersetzt, dadurch rücken alle Inhalte eine Zeile nach unten. Die oberste Zeile wird gelöscht. Hier ein Teil des Codes: Public Aenderung(1 To 4, 1 To 7) As String Public Indices(1 To 7) As String Dim Zeile1(4) As String Dim Zeile2(4) As String Dim Zeile3(4) As String Dim Zeile4(4) As String Dim Zeile5(4) As String Dim Zeile6(4) As String Dim Zeile7(4) As String If erster = 0 Then Zeile1(0) = frmAenderung.txt1Ix.Text Zeile1(1) = frmAenderung.cmb1Inhalt.Text Zeile1(2) = frmAenderung.cmb1InhaltEngl.Text Zeile1(3) = frmAenderung.txtAenddat1.Text Zeile1(4) = frmAenderung.cmbAenderer1.Text Zeile2(0) = frmAenderung.txt2Ix.Text ... Zeile7(3) = frmAenderung.txtAenddat7.Text Zeile7(4) = frmAenderung.cmbAenderer7.Text erster = erster + 1 End If For row = 1 To UBound(Aenderung, 2) - 1 For col = 1 To UBound(Aenderung, 1) ' Setzt die Änderungsindices eine Zeile tiefer Aenderung(col, row) = Aenderung(col, row + 1) Next col Next row For row = 1 To UBound(Aenderung, 2) - 1 ' löscht den Index, wenn keine Änderung eingetragen ist Indices(row) = "" If Aenderung(1, row) > "" Then Indices(row) = "0" & CStr(row) End If Next row For col = 1 To UBound(Aenderung, 1) Aenderung(col, UBound(Aenderung, 2)) = "" Next col Call frmMaterial.WriteAenderungen Call cmdZeileLöschen7_Click frmAenderung.cmdLineBack.Visible = True 'Rückgängig-Taste sichtbar Wie am Schluss zu sehen ist, hab ich eine Funktion eingefügt, welche das Löschen rückgängig macht, jedenfalls, so lange das Makro offen bleibt. Man hat sich schnell mal verklickt und aus Versehen eine Zeile gelöscht, und weiß dann nicht mehr, was da stand. Ich hoffe, das hilft. Ohne Makro ist das Ganze nicht lösbar. Gruß, Piet
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frog80 Mitglied Konstruktionsmensch im Anfangsstadium ;)
Beiträge: 40 Registriert: 05.10.2005 WF3 (M200) M050 SWX 07 (SP 4.0) / SWX 08 (SP 3.1) HP T7400 2 Gig Ram
|
erstellt am: 31. Aug. 2007 09:08 <-- editieren / zitieren --> Unities abgeben:
Hoi Piet! ööö.... ich glaube, das kommt genau da hin, wie ich es haben will! nur merk' ich, dass ich mich da in Visual Basic nochmal einarbeiten muss *gg* (die Befehle sind dann doch bisschen anders wie Delphi) Gut, aber tausend Dank für die Hilfe!!!! VG, Beni ------------------ Tomorrow is cancelled due to lack of interest. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hico Mitglied Konstrukteur
Beiträge: 258 Registriert: 03.03.2005
|
erstellt am: 31. Aug. 2007 09:33 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
|
Frog80 Mitglied Konstruktionsmensch im Anfangsstadium ;)
Beiträge: 40 Registriert: 05.10.2005 WF3 (M200) M050 SWX 07 (SP 4.0) / SWX 08 (SP 3.1) HP T7400 2 Gig Ram
|
erstellt am: 31. Aug. 2007 16:42 <-- editieren / zitieren --> Unities abgeben:
Hoi Hilmar! Auch sehr fein - muchas und 10 Us! Das automatische Hochrücken (sollte das Teil mal mehr als 8 Revisionen haben) bastel ich mir noch irgendwie zusammen! muss ja auch irgendwie gehen.. Weisst du, klingt zwar jetzt nach der Standard Ausrede - aber das Suchen mit bestimmten Begriffen ist oft ziemlich uferlos (nach was sucht man da? "Revisionen eins erhöhen"? "Textfeld variabel")
und zum Glück sind die meisten CAD Besucher da nicht allzu genervt, sollte man es nicht gleich auf Anhieb finden! Nochmal Danke und ein schönes Wochenende! Beni ------------------ Tomorrow is cancelled due to lack of interest. [Diese Nachricht wurde von Frog80 am 31. Aug. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hico Mitglied Konstrukteur
Beiträge: 258 Registriert: 03.03.2005
|
erstellt am: 03. Sep. 2007 09:34 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
Hallo Frog80... Nun frei nach dem Motto "Makro-Code ist geduldig" habe ich das ganze folgendermaßen mit dem Aufrücken gelöst: Code: Sub berSfAufruecken() ' Neu von mir eingefügter Button, um Feldinhalte ' nach oben aufzurücken. Dim swApp As Object Dim swModelDoc As Object Set swApp = CreateObject("SldWorks.Application") swApp.Visible = True Set swModelDoc = swApp.ActiveDoc swModelDoc.CustomInfo2(glbConfName, "1aus") = txt2aus.Text swModelDoc.CustomInfo2(glbConfName, "1aend") = txt2aend.Text swModelDoc.CustomInfo2(glbConfName, "1dat") = cmb2dat.Text swModelDoc.CustomInfo2(glbConfName, "1bearb") = cmb2bearb.Text swModelDoc.CustomInfo2(glbConfName, "1gepr") = cmb2gepr.Text swModelDoc.CustomInfo2(glbConfName, "2aus") = txt3aus.Text swModelDoc.CustomInfo2(glbConfName, "2aend") = txt3aend.Text swModelDoc.CustomInfo2(glbConfName, "2dat") = cmb3dat.Text swModelDoc.CustomInfo2(glbConfName, "2bearb") = cmb3bearb.Text swModelDoc.CustomInfo2(glbConfName, "2gepr") = cmb3gepr.Text swModelDoc.CustomInfo2(glbConfName, "3aus") = txt4aus.Text swModelDoc.CustomInfo2(glbConfName, "3aend") = txt4aend.Text swModelDoc.CustomInfo2(glbConfName, "3dat") = cmb4dat.Text swModelDoc.CustomInfo2(glbConfName, "3bearb") = cmb4bearb.Text swModelDoc.CustomInfo2(glbConfName, "3gepr") = cmb4gepr.Text swModelDoc.CustomInfo2(glbConfName, "4aus") = txt5aus.Text swModelDoc.CustomInfo2(glbConfName, "4aend") = txt5aend.Text swModelDoc.CustomInfo2(glbConfName, "4dat") = cmb5dat.Text swModelDoc.CustomInfo2(glbConfName, "4bearb") = cmb5bearb.Text swModelDoc.CustomInfo2(glbConfName, "4gepr") = cmb5gepr.Text swModelDoc.CustomInfo2(glbConfName, "5aus") = txt6aus.Text swModelDoc.CustomInfo2(glbConfName, "5aend") = txt6aend.Text swModelDoc.CustomInfo2(glbConfName, "5dat") = cmb6dat.Text swModelDoc.CustomInfo2(glbConfName, "5bearb") = cmb6bearb.Text swModelDoc.CustomInfo2(glbConfName, "5gepr") = cmb6gepr.Text swModelDoc.CustomInfo2(glbConfName, "6aus") = txt7aus.Text swModelDoc.CustomInfo2(glbConfName, "6aend") = txt7aend.Text swModelDoc.CustomInfo2(glbConfName, "6dat") = cmb7dat.Text swModelDoc.CustomInfo2(glbConfName, "6bearb") = cmb7bearb.Text swModelDoc.CustomInfo2(glbConfName, "6gepr") = cmb7gepr.Text swModelDoc.CustomInfo2(glbConfName, "7aus") = txt8aus.Text swModelDoc.CustomInfo2(glbConfName, "7aend") = txt8aend.Text swModelDoc.CustomInfo2(glbConfName, "7dat") = cmb8dat.Text swModelDoc.CustomInfo2(glbConfName, "7bearb") = cmb8bearb.Text swModelDoc.CustomInfo2(glbConfName, "7gepr") = cmb8gepr.Text swModelDoc.CustomInfo2(glbConfName, "8aus") = "" swModelDoc.CustomInfo2(glbConfName, "8aend") = "" swModelDoc.CustomInfo2(glbConfName, "8dat") = "" swModelDoc.CustomInfo2(glbConfName, "8bearb") = "" swModelDoc.CustomInfo2(glbConfName, "8gepr") = ""End Sub
Hoffe ich konnte Dir weiterhelfen... ------------------ Gruß Hilmar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BastelW Mitglied Konstrukteur
Beiträge: 8 Registriert: 02.09.2007
|
erstellt am: 03. Sep. 2007 19:19 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
Hallo miteinander. Ich habe auch das Schriftfeld Makro von Stefan benutzt, um für uns ein "Angepaßtes" zu erstellen. Vielen Dank Stefan für Deine Vorarbeit. Jetzt zu meinen Problem: Ich habe mir z.Bsp. für das Materiel eine Combobox erstellt in welcher ich das Material auswählen kann. Ich möchte aber diese "Materilaliste" extern pflegen --> soll also bedeuten, die Combobox holt sich die Daten aus dieser externen Tabelle. Gleichzeitig soll es möglich sein, bei geöffneten Makro in diese Tabelle neue Werte aufzunehmen und diese danach auswählen zu können. So einen richtigen Lösungsansatz habe ich dafür noch nicht gefunden. Ich hoffe aber, mir kann einer von Euch Profis weiterhelfen! Habe ich beinah vergessen, ich bin noch ein "besserer Neuling" auf dem Gebiet des Makroprogrammierens. Also, ich hoffe jemand kann mir helfen. Vielen Dank schon mal vorab! Gruß Bastel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hico Mitglied Konstrukteur
Beiträge: 258 Registriert: 03.03.2005
|
erstellt am: 04. Sep. 2007 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
Hallo Bastel! Für die Benutzung einer separaten Werkstoffliste in txt-Form benötigst Du z.B. folgende Zeilen... Code: Private Sub MatListe_Click() ' Button, um txt-File zu editieren Dim x x = Shell("notepad.exe \\PCxx\SolidWorks\SolidWorks-Vorlagen\Makros\Werkstofftabelle.txt", vbNormalFocus) End SubPrivate Sub UserForm_Initialize() ' ...folgendes hinzufügen: Dim s$ Open "\\PCxx\SolidWorks\SolidWorks-Vorlagen\Makros\Werkstofftabelle.txt" For Input As #1 While Not EOF(1) Line Input #1, s cmbMaterial.AddItem s Wend Close #1 End Sub
------------------ Gruß Hilmar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BastelW Mitglied Konstrukteur
Beiträge: 8 Registriert: 02.09.2007
|
erstellt am: 04. Sep. 2007 19:59 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
Hallo Hilmar. Vielen Dank für Deine Informativen Zeilen. Was muß an der Stelle für PCxx eingetragen werden? Ich habe bei mir den folgenden Pfad eingetragen x = Shell("notepad.exe\\C:\test.txt", vbNormalFocus) doch sagt mir mein Makro jedesmal --> Laufzeitfehler "53" Datei nicht gefunden ! Ich habe aber diese Datei in folgenden Pfad liegen --> C:\test.txt ! Was mache ich falsch? Könntest Du mir weiterhelfen? Danke schon mal vorab. Gruß Bert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 05. Sep. 2007 07:59 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
|
BastelW Mitglied Konstrukteur
Beiträge: 8 Registriert: 02.09.2007
|
erstellt am: 05. Sep. 2007 18:52 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
Hallo Andreas. Vielen Dank für den Hinweis. Funktioniert jetzt tadellos. Trotzdem noch eine Frage. Wie muß der CODE lauten, damit der neue eingetragene Wert in meine externe Materialliste nach dem schließen mit speichern sofort zur Verfügung steht--> also ich den neuen eingegebenen Wert sofort mit zur Auswahl habe? Für den gegebenen Hinweis für den Dateipfad gibt es von mir für Dich sowie an Hilmar 10 UNITS an Dich. Danke! Gruß Bert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 07. Sep. 2007 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für Frog80
Hallo Bert Ich würde sowas machen.
Code: Sub Aktualisieren_Click() ' Button, um Combobox zu aktualisierencmbMaterial.Clear 'Combobox leeren Dim s$ Open "C:\test.txt" For Input As #1 While Not EOF(1) Line Input #1, s cmbMaterial.AddItem s Wend Close #1 End Sub
Und so nebenbei (Code zum sortieren)
Code: Dim i_Erster As Integer Dim i_Letzter As Integer Dim i_Aktuell As Integer Dim i_Nächster As Integer Dim s_buffer As String 'Liste Sortieren With cmbMaterial If .ListCount = 0 Then Exit Sub i_Erster = 0 i_Letzter = .ListCount - 1 For i_Aktuell = i_Erster To i_Letzter For i_Nächster = i_Aktuell + 1 To i_Letzter If .List(i_Aktuell) > .List(i_Nächster) Then s_buffer = .List(i_Nächster) .List(i_Nächster) = .List(i_Aktuell) .List(i_Aktuell) = s_buffer End If Next i_Nächster Next i_Aktuell End With
Gruss Andreas------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|