| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Text in UserForm anzeigen lassen (1841 / mal gelesen)
|
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 207 Registriert: 29.03.2007 IV2024 R3 CATIA V6 R2013x
|
erstellt am: 15. Dez. 2020 15:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, hiermit Code: Private Sub GETTEXT_Suche_Schriftkopf() Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument'Set oTextBox = oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Zustand 1*" Then Quelle_Text1 = Eintrag.text Text_ausgelesen1 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text1 & " : " & Text_ausgelesen1 End If Next For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Änderung Nr 1*" Then Quelle_Text2 = Eintrag.text Text_ausgelesen2 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text2 & " : " & Text_ausgelesen2 End If Next For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Datum 1*" Then Quelle_Text3 = Eintrag.text Text_ausgelesen3 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text3 & " : " & Text_ausgelesen3 End If Next For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Name 1*" Then Quelle_Text4 = Eintrag.text Text_ausgelesen4 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text4 & " : " & Text_ausgelesen4 End If Next End Sub
lese ich aus einem Schriftkopf Werte aus. Diese Werte möchte ich mir in einer UserForm Fenster anzeigen lassen. Könnte mir jemand ein Bsp. nennen wo ich nachvollziehen kann wie so etwas gemacht werden kann!? Danke und Gruß
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 15. Dez. 2020 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Hallo Goose, UserForm anlegen, TextBox einfügen -> (In Eigenschaften Multiline = True) deinen Code in das Userform kopieren Folgenden Code in das Userform kopieren: Code:
Private Sub UserForm_Initialize() Call "deine_Prozedur" Call TextBox1_ChangeEnd Sub Private Sub TextBox1_Change() TextBox1.Text = "z.B. Titelzeile" _ & vbCr & "Zeile 1" _ & vbCr & "Zeile 2" End Sub
Zeile 1 - n einfach durch deine Variablen ersetzen. Grüße
EIBe 3D [Diese Nachricht wurde von EIBe 3D am 15. Dez. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 15. Dez. 2020 21:19 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Hallo @ElBe 3D Kann es sein, dass dein Code nicht funktionieren wird, da die Variablen nur im Kontext der Sub GETTEXT_Suche_Schriftkopf existieren? Bei Rückkehr in die Sub Initialize existieren die Variablen nicht mehr und werden auch nicht in Sub TextBox1_Change übergeben. Ich sehe jetzt keinen triftigen Grund das nicht ganz primitiv zu machen. - UserForm erstellen - 1 Textfester (Multiline=True) einfügen - 1 Button (Caption z.B. = "Schließen") - folgenden Code einfügen Code:
Private Sub CommandButton1_Click() Me.Hide End Sub Private Sub UserForm_Initialize() TextBox1.Text = GETTEXT_Suche_Schriftkopf End Sub Private Function GETTEXT_Suche_Schriftkopf() As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument 'Set oTextBox = oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Zustand 1*" Then Quelle_Text1 = Eintrag.Text Text_ausgelesen1 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text1 & " : " & Text_ausgelesen1 End If If Eintrag.FormattedText Like "*Änderung Nr 1*" Then Quelle_Text2 = Eintrag.Text Text_ausgelesen2 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text2 & " : " & Text_ausgelesen2 End If If Eintrag.FormattedText Like "*Datum 1*" Then Quelle_Text3 = Eintrag.Text Text_ausgelesen3 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text3 & " : " & Text_ausgelesen3 End If If Eintrag.FormattedText Like "*Name 1*" Then Quelle_Text4 = Eintrag.Text Text_ausgelesen4 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text4 & " : " & Text_ausgelesen4 End If Next GETTEXT_Suche_Schriftkopf = Text_ausgelesen1 & vbCrLf & _ Text_ausgelesen2 & vbCrLf & _ Text_ausgelesen3 & vbCrLf & _ Text_ausgelesen4 End Function
- neues Modul erstellen und folgenden Code einfügen Code:
Option Explicit Public Sub ShowForm() Dim myForm As New UserForm1 myForm.Show End Sub
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 16. Dez. 2020 07:59 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Hallo zusammen, Code: ... @ElBe 3D Kann es sein, dass dein Code nicht funktionieren wird, da die Variablen nur im Kontext der Sub GETTEXT_Suche_Schriftkopf existieren? Bei Rückkehr in die Sub Initialize existieren die Variablen nicht mehr und werden auch nicht in Sub TextBox1_Change übergeben. ...
@Ralf Das ist eindeutig eine Suggestivfrage Selbstverständlich wird es aus genau den von dir genannten Gründen nicht wie gewünscht funktionieren. War mir beim zweiten Überfliegen meines Geschreibsels auch klar, musste nur dann leider vom Rechner weg. Jeglichen Korrekturvorhaben meinerseits bist du dann zuvor gekommen. Eine Frage meinerseits:
Unter [Private Sub CommandButton1_Click()] Steht [Me.Hide] Wäre hier nicht [Unload Me] die anzuwendende Methode um das UserForm auch wirklich zu schließen und nicht nur auszublenden? Grüße
EIBe 3D
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 16. Dez. 2020 08:53 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Moin Ich war nur misstrauisch, ob ich wieder was übersehe. Ja, unload me wäre korrekt, da das Objekt nicht wieder verwendet wird. Aber, da eine neue Instanz myForm der Form mittels New UserForm2 erstellt wird, sollte besser diese entladen werden. In der CommandButton_Click bleibt es bei me.hide, aber in das Modul kann man ein Unload MyForm setzen. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 207 Registriert: 29.03.2007 IV2024 R3 CATIA V6 R2013x
|
erstellt am: 16. Dez. 2020 10:31 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank erst einmal....ich hatte auf ein Bsp. gehofft und "Fertige Arbeit" bekommen. Den Code Code: Private Sub CommandButton1_Click() Me.Hide End SubPrivate Sub Label2_Click() End Sub Private Sub Label3_Click() End Sub Private Sub Label4_Click() End Sub Private Sub Label5_Click() End Sub Private Sub UserForm_Initialize() TextBox1.text = GETTEXT_Suche_Schriftkopf1 TextBox2.text = GETTEXT_Suche_Schriftkopf2 TextBox3.text = GETTEXT_Suche_Schriftkopf3 TextBox4.text = GETTEXT_Suche_Schriftkopf4 End Sub Private Function GETTEXT_Suche_Schriftkopf1() As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Zustand 1*" Then Quelle_Text1 = Eintrag.text Text_ausgelesen1 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text1 & " : " & Text_ausgelesen1 End If Next GETTEXT_Suche_Schriftkopf1 = Text_ausgelesen1 End Function
Private Function GETTEXT_Suche_Schriftkopf2() As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Änderung Nr 1*" Then Quelle_Text2 = Eintrag.text Text_ausgelesen2 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text2 & " : " & Text_ausgelesen2 End If
Next GETTEXT_Suche_Schriftkopf2 = Text_ausgelesen2 End Function Private Function GETTEXT_Suche_Schriftkopf3() As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Datum 1*" Then Quelle_Text3 = Eintrag.text Text_ausgelesen3 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text3 & " : " & Text_ausgelesen3 End If Next GETTEXT_Suche_Schriftkopf3 = Text_ausgelesen3 End Function Private Function GETTEXT_Suche_Schriftkopf4() As String
Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like "*Name 1*" Then Quelle_Text4 = Eintrag.text Text_ausgelesen4 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text4 & " : " & Text_ausgelesen4 End If Next GETTEXT_Suche_Schriftkopf4 = Text_ausgelesen4 End Function
habe ich so angepasst, dass jeder Wert in einem eigenen Textfeld ausgegeben wird.
Ist es möglich jetzt über das Textfeld der UserForm die ausgelesen Werte zu ändern? Wenn also ein Wert ausgelesen wird soll dieser editiert werden können und zurück an das Textfeld der Zeichnung übergeben werden. Danke und Gruß
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 16. Dez. 2020 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Hallo Ja, das geht. Die jeweilige TextBox wird in einer Variable gespeichert die während der Lebenszeit der UserForm bestehen bleibt. Somit können wir sehr einfach dahin zurückschreiben. Füge einen weiteren Button (CommandButton2 in meinem Code) in die Form ein. Die Caption-Eigenschaft könnte "Ändern" sein. Code: Dim oTB1, oTB2, oTB3, oTB4 As Inventor.TextBoxPrivate Sub CommandButton1_Click() Me.Hide End Sub Private Sub CommandButton2_Click() Call Writetext(TextBox1.Text, oTB1) Call Writetext(TextBox2.Text, oTB2) Call Writetext(TextBox3.Text, oTB3) Call Writetext(TextBox4.Text, oTB4) End Sub Private Sub UserForm_Initialize() TextBox1.Text = GETTEXT_Suche_Schriftkopf1 TextBox2.Text = GETTEXT_Suche_Schriftkopf2 TextBox3.Text = GETTEXT_Suche_Schriftkopf3 TextBox4.Text = GETTEXT_Suche_Schriftkopf4 End Sub Private Sub Writetext(ByVal sText As String, ByVal oTB As Inventor.TextBox) Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Call oDrawDoc.ActiveSheet.TitleBlock.SetPromptResultText(oTB, sText) End Sub Private Function GETTEXT_Suche_Schriftkopf1() As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Dim eintrag As Inventor.TextBox For Each eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If eintrag.FormattedText Like "*Zustand 1*" Then Quelle_Text1 = eintrag.Text Text_ausgelesen1 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(eintrag) Debug.Print Quelle_Text1 & " : " & Text_ausgelesen1 Set oTB1 = eintrag Exit For End If Next GETTEXT_Suche_Schriftkopf1 = Text_ausgelesen1 End Function Private Function GETTEXT_Suche_Schriftkopf2() As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Dim eintrag As Inventor.TextBox For Each eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If eintrag.FormattedText Like "*Änderung Nr 1*" Then Quelle_Text2 = eintrag.Text Text_ausgelesen2 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(eintrag) Debug.Print Quelle_Text2 & " : " & Text_ausgelesen2 Set oTB2 = eintrag Exit For End If Next GETTEXT_Suche_Schriftkopf2 = Text_ausgelesen2 End Function Private Function GETTEXT_Suche_Schriftkopf3() As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Dim eintrag As Inventor.TextBox For Each eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If eintrag.FormattedText Like "*Datum 1*" Then Quelle_Text3 = eintrag.Text Text_ausgelesen3 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(eintrag) Debug.Print Quelle_Text3 & " : " & Text_ausgelesen3 Set oTB3 = eintrag Exit For End If Next GETTEXT_Suche_Schriftkopf3 = Text_ausgelesen3 End Function Private Function GETTEXT_Suche_Schriftkopf4() As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Dim eintrag As Inventor.TextBox For Each eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If eintrag.FormattedText Like "*Name 1*" Then Quelle_Text4 = eintrag.Text Text_ausgelesen4 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(eintrag) Debug.Print Quelle_Text4 & " : " & Text_ausgelesen4 Set oTB4 = eintrag Exit For End If Next GETTEXT_Suche_Schriftkopf4 = Text_ausgelesen4 End Function
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 16. Dez. 2020 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Je nach Inhalt der TextBox scheint Code:
Private Sub Writetext(ByVal sText As String, ByVal oTB As Inventor.TextBox) Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Call oDrawDoc.ActiveSheet.TitleBlock.SetPromptResultText(oTB, sText) End Sub
nicht zu funktionieren. Siehe dazu das Autodeskforum Ich hab es jedenfalls bei Versuchen in Ermangelung eines entsprechenden Feldes auch nicht umsetzen können. Noch eine Anmerkung bzgl. der Variablendeklaration
Bei DIM oTB1, oTB2, oTB3, oTB4 As Inventor.TextBox wird nur oTB4 als Textbox deklariert. oTB1-3 sind vom Typ Variant. Dim oTB1 as Inventor.Textbox Dim oTB2 as Inventor.Textbox usw. ergibt das gewünschte Ergebnis (selbst gerade erst aufgrund eines blöden Folgefehlers lernen dürfen :smokin Grüße
EIBe 3D
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 16. Dez. 2020 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Ich würde dafür plädieren, das Lesen durch eine (1) Function zu erledigen (statt 4). Dazu muss der Such-Text übergeben werden. Auch die Textbox zur späteren Verwendung wie von Ralf vorgeschlagen. Code: Private Function GETTEXT_Suche_Schriftkopf_universal_Update(sSuchTxt As String, ByRef oTB As TextBox) As String ' der Parameter enthält dann den gesuchten Text z.B. "*Name 1*" ' der Parameter oTB wird hier befüllt und referenziert dann die gefundene TextBox (für das Schreiben später) Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Dim Quelle_Text4 As String, Text_ausgelesen4 As String 'über die Namen der Variablen könnte man streiten Dim Eintrag As TextBox For Each Eintrag In oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like sSuchTxt Then Quelle_Text4 = Eintrag.text Text_ausgelesen4 = oDrawDoc.ActiveSheet.TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text4 & " : " & Text_ausgelesen4 Set oTB = Eintrag 'Parameter setzen, benutzt als Rückgabewert 'Exit For 'Schleife verlassen? siehe auch Kommentar unten End If Next ''falls die If-Bedingung mehrmals erfüllt wird, wird mehrmals ausgelesen 'auch mehrere Zeilen mit Debug.Print geschrieben 'die Function gibt aber nur den letzten Eintrag zurück 'so gewünscht? 'evtl. oben Exit For ergänzen?!? (dann wird der zuerst passende Eintrag zurückgegeben und etwas Arbeit gespart) GETTEXT_Suche_Schriftkopf_universal_Update = Text_ausgelesen4 End Function
------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 16. Dez. 2020 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Zitat: Original erstellt von EIBe 3D: Je nach Inhalt der TextBox scheint [...] nicht zu funktionieren. Siehe dazu das Autodeskforum
Wenn ich das im Forum richtig verstehe, klappt das nur bei Textboxen mit "Angeforderter Eingabe". Das halte ich für beabsichtigtes Verhalten. Wird im Schriftfeld z.B. ein iProperty angezeigt lässt sich die Textbox nicht mit SetPromptResultText setzen, sondern es muss das iProperty geändert werden. Scheint mir hier kein Problem zu sein (der Threadsetter wird sein Schriftfeld gut genug kennen). ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 207 Registriert: 29.03.2007 IV2024 R3 CATIA V6 R2013x
|
erstellt am: 16. Dez. 2020 13:36 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von KraBBy:
Wenn ich das im Forum richtig verstehe, klappt das nur bei Textboxen mit "Angeforderter Eingabe". Das halte ich für beabsichtigtes Verhalten. Wird im Schriftfeld z.B. ein iProperty angezeigt lässt sich die Textbox nicht mit SetPromptResultText setzen, sondern es muss das iProperty geändert werden. Scheint mir hier kein Problem zu sein (der Threadsetter wird sein Schriftfeld gut genug kennen).
Es geht in diesem Fall nur um Textboxen mit "Angeforderter Eingabe" Ich möchte mich nochmal für Eure Hilfe bedanken.... Echt klasse von Euch Unities sind raus....
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 207 Registriert: 29.03.2007 IV2024 R3 CATIA V6 R2013x
|
erstellt am: 18. Dez. 2020 09:31 <-- editieren / zitieren --> Unities abgeben:
Ich hätte noch eine Frage: Wenn eine Zeichnung mehrere Blätter hat würde ich jetzt gerne auf Blatt Nr.1 die Werte editieren und gleichzeitig auf alle Blätter übertragen. Ist das möglich? Ich habe in der API diesbezüglich nichts gefunden. Und ich wüsste auch nicht nach welcher Befehlsbezeichnung ich suchen könnte. Hintergrund ist, dass Bestandsdaten nicht sauber gepflegt sind und die Eintragungen nicht auf allen Blättern vollständig sind. Danke und Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 18. Dez. 2020 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Moin @KraBBy Jepp, wieder mit vb.net verwechselt. Das kommt vom ständigen hin und her springen. @ElBe 3D In Funktion auslagern bietet sich hier an. Guter Hinweis, übernommen. Man kann alle Blätter gleichzeitig ändern. Auf Blatt1 muss das korrekte Schriftfeld vorhanden sein, das prüfe ich nicht. Egal welches Blatt man gerade aktiv ist, die Ausgangswerte werden von Blatt 1 geholt.
Code: Dim oTB1 As Inventor.TextBox Dim oTB2 As Inventor.TextBox Dim oTB3 As Inventor.TextBox Dim oTB4 As Inventor.TextBox Dim oTBDef As TitleBlockDefinitionPrivate Sub CommandButton1_Click() Me.Hide End Sub Private Sub CommandButton2_Click() Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Dim oSheet As Sheet For Each oSheet In oDrawDoc.Sheets If oSheet.TitleBlock.Definition Is oTBDef Then Call Writetext(TextBox1.Text, oTB1, oSheet) Call Writetext(TextBox2.Text, oTB2, oSheet) Call Writetext(TextBox3.Text, oTB3, oSheet) Call Writetext(TextBox4.Text, oTB4, oSheet) End If Next End Sub Private Sub UserForm_Initialize() TextBox1.Text = GETTEXT_Suche_Schriftkopf("*Zustand 1*", oTB1) TextBox2.Text = GETTEXT_Suche_Schriftkopf("*Änderung Nr 1*", oTB2) TextBox3.Text = GETTEXT_Suche_Schriftkopf("*Datum 1*", oTB3) TextBox4.Text = GETTEXT_Suche_Schriftkopf("*Name 1*", oTB4) End Sub Private Sub Writetext(ByVal sText As String, ByVal oTB As Inventor.TextBox, ByVal oSheet As Sheet) Call oSheet.TitleBlock.SetPromptResultText(oTB, sText) End Sub Private Function GETTEXT_Suche_Schriftkopf(sSuchTxt As String, ByRef oTB As TextBox) As String Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Set oTBDef = oDrawDoc.Sheets.Item(1).TitleBlock.Definition Dim Quelle_Text As String, Text_ausgelesen As String Dim Eintrag As TextBox For Each Eintrag In oDrawDoc.Sheets.Item(1).TitleBlock.Definition.Sketch.TextBoxes If Eintrag.FormattedText Like sSuchTxt Then Quelle_Text = Eintrag.Text Text_ausgelesen = oDrawDoc.Sheets.Item(1).TitleBlock.GetResultText(Eintrag) Debug.Print Quelle_Text & " : " & Text_ausgelesen Set oTB = Eintrag Exit For End If Next GETTEXT_Suche_Schriftkopf = Text_ausgelesen End Function
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 18. Dez. 2020 10:35 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 18. Dez. 2020 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Moin Sorry, war keine Absicht. CommandButton2 blendet die Form nur aus und das ist gewollt so. Ich hab das Instanzieren und Zerstören in einem Modul. Das ist das empfohlene Vorgehen. Das Auto-Instantiating sollte nicht genutzt werden. Code:
Public Sub ShowUserForm2() Dim myForm As New UserForm2 myForm.Show Unload myForm End Sub
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 18. Dez. 2020 11:56 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Ok, d.h. solange myForm.Show aktiv ist bleibt die Sub ShowUserForm2() unterbrochen, wird fortgesetzt wenn die UserForm ausgeblendet wird und führt dann Unload aus? Warum sollte die Auto-Instanzierung nicht genutz werden? Grüße
EIBe 3D Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 18. Dez. 2020 18:13 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Hab versucht das mit dem Auto instantiating selbst zu verstehen. Dabei bin ich hier gelandet. stack overflow Das mache (machte) ich wohl auch falsch, wobei ich bisher noch nicht darüber gestolpert bin. Wieder was gelernt. Zitat: d.h. solange myForm.Show aktiv ist bleibt die Sub ShowUserForm2() unterbrochen, wird fortgesetzt wenn die UserForm ausgeblendet wird und führt dann Unload aus?
Von mir ein Ja. Einzig wenn die Form 'modeless' ausgeführt wird, wird die Ausführung nicht unterbrochen. (property showmodal glaub ich, oder auch Parameter bei .Show) ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 18. Dez. 2020 19:09 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Hallo Ja, die Sub bleibt unterbrochen da die Form modal geladen wurde. Macht hier auch Sinn, dass der User erstmal die Änderungen fertig macht und nicht zwischendurch z.B. ein Bauteil zum aktiven Dokument machen kann. Automatische Instanzierung ist vergleichbar mit der automatischen Typisierung von Variablen. Geht oft gut, aber garantiert ist nix. UserForms sind im Kern auch nur Klassenmodule. Spätestens wenn man mit zwei Instanzen der Form arbeiten will/muss, hat man mit hoher Wahrscheinlichkeit ein Problem. Der im Link von KraBBy dargestellte Fall ist ein Beispiel in dem Autoinstanzierung unbeabsichtigt erfolgte. Durch den Versuch Userform1.Caption zu ändern, erstellt VBA erstmal automatisch eine neue Instanz von UserForm1, da es innerhalb des Initialize-Events keinen Zugriff auf die zuvor erstellte Instanz von UserForm1 in der ShowForm-Sub gibt. Richtig wäre in den Fall einfach die Caption Eigenschaft in der ShowForm-Sub zu ändern.
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 207 Registriert: 29.03.2007 IV2024 R3 CATIA V6 R2013x
|
erstellt am: 07. Jan. 2021 13:50 <-- editieren / zitieren --> Unities abgeben:
Ein gesundes "Neues Jahr"! Ich bin das Makro in ein Add in umzuwandeln. Die Beschreibung der Fehlerbehebung innerhalb von Visual Studio Express 2017 ist eigentlich recht gut verständlich aber wie ich diese Zeile Code: Dim oTB1, oTB2, oTB3, oTB4, oTB5, oTB6, oTB7, oTB8, oTB9, oTB10, oTB11, oTB12 As Inventor.TextBox
des Makro umschreiben muss verstehe ich nicht. Kann mir jemand an einem Bsp. beschreiben wie das abgeändert werden muss!? Danke und Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 07. Jan. 2021 21:31 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Hallo Auch ein gesundes neues Jahr. Was hat Visual Studio denn an der Zeile zu bemängeln? Die Anweisung ist in einem Namespace ungültig? Dann hast du die Zeile außerhalb einer Klasse platziert. Ansonsten bitte wenigstens die Meldung posten. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bkrüger Mitglied Konstrukteur
Beiträge: 51 Registriert: 14.09.2014 Win10 IV2018 Vault2018-WG
|
erstellt am: 08. Jan. 2021 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 09. Jan. 2021 08:34 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Moin Einspruch! Er schreibt, dass er in ein Addin mit Visual Studio 2017 umwandelt. Das unterstelle ich mal, dass VB.Net verwendet wird. VB.Net bietet die Möglichkeit mehrere Variablen in einem Dim Statement zu deklarieren. Man kann z.B.
Code: Dim text1, text2, text3() As String
schreiben. Das erzeugt zwei Variablen (text1 und text2) als String und ein dynamisches Stringarray text3. Was gern vermutet wird, aber nicht geht ist das Zuweisen von Werten in einer solchen Mehrfachdeklaration. Code: Dim zahl1, zahl2, zahl3 As Integer = 17
ergibt einen Fehler. Theoretisch könnte man alle Deklarationen in ein Dim Statement packen. Code: Dim text1, text2, text3() As String, zahl1, zahl2, zahl3 As Integer, ... usw. usw.
Ich finde die Möglichkeit gehört zu "Kann man machen, muss man aber nicht." ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |