Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  SolidWorks
  API - Textzeile im Schriftkopf gezielt ansprechen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
7 Tipps für die Konstruktion von Kunststoffteilen und Spritzgussformen, ein Webinar am 27.06.2025
Autor Thema:  API - Textzeile im Schriftkopf gezielt ansprechen (399 / mal gelesen)
Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 03. Jun. 2025 16:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
In einer Zeichnung gehe ich über Blattformat bearbeiten zu unserem Schriftfeld.
Darin ist eine Textzeile für unsere Zeichnungsnummer hinterlegt.
Öffne ich diese, wird der Code dahinter sichtbar.

$PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname"

Ich möchte nun gezielt diese Textzeile per VBA in der Schriftgröße manipulieren.
Der Makrorecorder gibt mir da nur ein unbefriedigendes Ergebnis zurück.

Code:

Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Blatt1", "SHEET", 0, 0, 0, False, 0, Nothing, 0)
Part.EditTemplate
Part.EditSketch
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("DetailItem12@Blattformat1", "NOTE", 0.382140227743212, 1.53427821531257E-02, 0, False, 0, Nothing, 0)
Part.FontPoints 17
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Blatt1", "SHEET", 0, 0, 0, False, 0, Nothing, 0)
Part.EditSheet
Part.EditSketch
Part.ClearSelection2 True
End Sub

Hier wird der Mausklick mit dem Selectionmanager verwendet, was ich vermeiden möchte.

Wie kann ich gezielt diese Zeile ansprechen?
Gibt es eine Schleife über alle Textzeilen auf dem Blattformat, um die richtige auszufiltern?

Für Hilfe schon mal besten Danke.

Grüße, Andi B. 

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Torsten Niemeier
Ehrenmitglied V.I.P. h.c.
Maschinenbau Ingenieur



Sehen Sie sich das Profil von Torsten Niemeier an!   Senden Sie eine Private Message an Torsten Niemeier  Schreiben Sie einen Gästebucheintrag für Torsten Niemeier

Beiträge: 3862
Registriert: 21.06.2001

"ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform
** CSWP 04/2011 **
** CSWE 08/2011 **

erstellt am: 03. Jun. 2025 16:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hi Andi!

Aber es ist doch vermutlich immer: DetailItem12@Blattformat1, oder?
Reicht das nicht?

Gruß, Torsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 03. Jun. 2025 17:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Torsten,
ja, aber wie?

Wenn ich diesen Code durchlaufen lasse, wird die richtige Textzeile angesprochen.
Ändere ich aber Mauspositionen wie hier:  (X und Y auf 0 gesetzt)

Code:

boolstatus = Part.Extension.SelectByID2("DetailItem12@Blattformat1", "NOTE", 0, 0, 0, False, 0, Nothing, 0)

Dann ändert er mir eine andere Zeile, in diesem Fall mein Format A4.
Da die gesuchte Textzeile in A0 bis A4 jeweils auf einer anderen X / Y Position ist, sehe ich hier Probleme.

Was meinst du?

Grüße, Andi 

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Torsten Niemeier
Ehrenmitglied V.I.P. h.c.
Maschinenbau Ingenieur



Sehen Sie sich das Profil von Torsten Niemeier an!   Senden Sie eine Private Message an Torsten Niemeier  Schreiben Sie einen Gästebucheintrag für Torsten Niemeier

Beiträge: 3862
Registriert: 21.06.2001

"ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform
** CSWP 04/2011 **
** CSWE 08/2011 **

erstellt am: 03. Jun. 2025 17:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Könntest Du den boolstatus mal mit ausgeben?
Und über Part.SelectionManager.GetSelectedObjectCount() ggf. die Anzahl der selektierten Elemente?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 03. Jun. 2025 17:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Torsten,
das muss ich morgen irgendwann im Geschäft reinschieben, da ich den ganzen Tag in Besprechung bin.
Für Zuhause habe ich jetzt nicht die Lizenz mitgenommen, blöde aber auch.

Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 04. Jun. 2025 12:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Torsten,
also in beiden Versionen bekomme ich das identische Ergebnis.

boolstatus = wahr

Count = 1

Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lueghi
Mitglied
Admin für alle Systeme ....


Sehen Sie sich das Profil von Lueghi an!   Senden Sie eine Private Message an Lueghi  Schreiben Sie einen Gästebucheintrag für Lueghi

Beiträge: 464
Registriert: 01.07.2005

CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO
PDM...: PRO.FILE 8.6
ERP...: proAlpha 6.2e / 7.1
BS....: Win10, HP ZBook G5

erstellt am: 04. Jun. 2025 13:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hallo Andi,
welch ein Zufall: ich habe gerade das gleiche Problem   .

Ich finde mein Element so ähnlich wie Du:

Code:
        ' Variable im Schriftkopf suchen und korrigieren
        Part.ClearSelection2 True
        boolstatus = Part.Extension.SelectByID2("Detailelement1@Blattformat1", "NOTE", 0, 0, 0, False, 0, Nothing, 0)
        If boolstatus Then
            Set myNote = Part.SelectionManager.GetSelectedObject6(1, 0)
            alteZGNr = myNote.GetText
            'MsgBox "alte Variable: " & myNote.GetText
            If Not myNote.GetText = "Artikel-Nr." Then
                myNote.SetText "$PRPSHEET:""Artikel-Nr."""   ' korrigiere Bezug zur Dateieigenschaft
            End If
        End If
  

In meinen (begrenzten) Testdaten hat das gut funktioniert. Wenn ich aber eine größere Datenmenge habe, dann wird auch teilweise ein falsches Element selektiert. Bin da auch noch nicht weiter aber ich habe einen Verdacht: Wenn die Formate unterschiedlich sind dann wird das falsche Element selektiert.

Eine weitergehende Prüfung habe ich aber noch nicht gemacht. Vielleicht können wir uns ja gegenseitig befruchten ....😁🤣.

------------------
Gruß Stefan

[Diese Nachricht wurde von Lueghi am 04. Jun. 2025 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wybren
Mitglied
Maschinenbau Techniker


Sehen Sie sich das Profil von wybren an!   Senden Sie eine Private Message an wybren  Schreiben Sie einen Gästebucheintrag für wybren

Beiträge: 36
Registriert: 19.06.2009

Solidworks 2024SP5

erstellt am: 04. Jun. 2025 13:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hallo,
um an die Notes zu kommen, würde ich einen allgemeineren Ansatz wählen.
Code:

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDrawDoc As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swNote As SldWorks.Note
Dim sheetCount As Long
Dim viewCount As Long
Dim noteCount As Long
Dim i As Long

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDrawDoc = swModel
    Dim viewCount As Long
    viewCount = swDrawDoc.GetViewCount
    Dim ss As Variant
    ss = swDrawDoc.GetViews
    For sheetCount = LBound(ss) To UBound(ss)
        Dim vv As Variant
        vv = ss(sheetCount)
        For viewCount = LBound(vv) To UBound(vv)
            Debug.Print (vv(viewCount).GetName2())
            Dim vNotes As Variant
            noteCount = vv(viewCount).GetNoteCount
            If noteCount > 0 Then
                vNotes = vv(viewCount).GetNotes
                For i = 0 To noteCount - 1
                    Debug.Print "  Note text: " & vNotes(i).GetText
                    'An dieser Stelle eine Abfrage auf den Inhalt um zu prüfen, ob man die richtige Note erwischt hat.
                Next
            End If
        Next viewCount
    Next sheetCount
End Sub


------------------
Freundliche Grüße
Bernd

Homepage: solidworks.berndhornemann.de
YouTube: https://www.youtube.com/@SWMP

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Volkmar Grube
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Volkmar Grube an!   Senden Sie eine Private Message an Volkmar Grube  Schreiben Sie einen Gästebucheintrag für Volkmar Grube

Beiträge: 134
Registriert: 31.01.2009

WIN11 64Bit, SWX 2024, Delphi 10

erstellt am: 04. Jun. 2025 14:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Ah, Bernd war schneller,
mein Quelltext ist sehr ähnlich.
Deshalb nur eine Anmerkung: Um im konkreten Fall den Inhalt beurteilen zu können, müsste man INote.PropertyLinkedText auswerten und nicht INote.gettext
Das liefert den "wirklichen" Inhalt zurück.
z.B.  If Inhalt = "$PRP:""Benennung""" then  ....

------------------
Grüße aus Dresden
Volkmar Grube

Es gibt keine Probleme, es gibt nur Aufgaben.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 04. Jun. 2025 20:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Bernd und Volkmar,
besten Dank für die Schnipsel, so geht es.
Ich habe etwas ergänzt und so kann ich die Textgröße anpassen.

Code:

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDrawDoc As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swNote As SldWorks.Note
Dim sheetCount As Long
Dim viewCount As Long
Dim noteCount As Long
Dim Zeileninhalt As String
Dim i As Long
Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDrawDoc = swModel
    Dim viewCount As Long
    viewCount = swDrawDoc.GetViewCount
    Dim ss As Variant
    ss = swDrawDoc.GetViews
    For sheetCount = LBound(ss) To UBound(ss)
        Dim vv As Variant
        vv = ss(sheetCount)
        For viewCount = LBound(vv) To UBound(vv)
            Debug.Print (vv(viewCount).GetName2())
            Dim vNotes As Variant
            noteCount = vv(viewCount).GetNoteCount
            If noteCount > 0 Then
                vNotes = vv(viewCount).GetNotes
                For i = 0 To noteCount - 1
                    Debug.Print "  Note text: " & vNotes(i).GetText
                    Debug.Print "  Note text: " & vNotes(i).PropertyLinkedText
                    Zeileninhalt = "$PRPSHEET:""Auftragsnummer""$PRPSHEET:""Number""-$PRPSHEET:""SW-Konfigurationsname"""
                    'An dieser Stelle eine Abfrage auf den Inhalt um zu prüfen, ob man die richtige Note erwischt hat.
                    If vNotes(i).PropertyLinkedText = Zeileninhalt Then
                        Debug.Print "  Das ist es! "
                        Set swNote = vNotes(i)
                        swNote.SetHeightInPoints 17
                        swModel.EditRebuild3
                        Exit For
                    End If
                   
                Next
            End If
        Next viewCount
    Next sheetCount
End Sub

Grüße aus dem Schwabenland
Andi Beck   

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

[Diese Nachricht wurde von Andi Beck am 04. Jun. 2025 editiert.]

[Diese Nachricht wurde von Andi Beck am 04. Jun. 2025 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lueghi
Mitglied
Admin für alle Systeme ....


Sehen Sie sich das Profil von Lueghi an!   Senden Sie eine Private Message an Lueghi  Schreiben Sie einen Gästebucheintrag für Lueghi

Beiträge: 464
Registriert: 01.07.2005

CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO
PDM...: PRO.FILE 8.6
ERP...: proAlpha 6.2e / 7.1
BS....: Win10, HP ZBook G5

erstellt am: 05. Jun. 2025 11:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von wybren:
Hallo,
um an die Notes zu kommen, würde ich einen allgemeineren Ansatz wählen.
...


Mit Deinem Beispiel gehst Du ja durch alle Ansichten. Wenn ich jetzt NUR die Einträge im Schriftkopf finden und bearbeiten möchte dann komme ich - bei mir - nicht weiter da der zu suchende Text auch in Bemerkungen in der Zeichnung selber vorhanden sein kann. Hast Du da auch einen Tipp für mich?

------------------
Gruß Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wybren
Mitglied
Maschinenbau Techniker


Sehen Sie sich das Profil von wybren an!   Senden Sie eine Private Message an wybren  Schreiben Sie einen Gästebucheintrag für wybren

Beiträge: 36
Registriert: 19.06.2009

Solidworks 2024SP5

erstellt am: 05. Jun. 2025 12:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hallo Stefan,
der Schriftkopf müsste, wenn ich mich recht erinnere, der erste View sein. Dann entweder nach dem ersten View die Schleife abbrechen oder nur den ersten View holen. Kann ich jetzt gerade nicht testen. Probier einfach mal.

------------------
Freundliche Grüße
Bernd

Homepage: solidworks.berndhornemann.de
YouTube: https://www.youtube.com/@SWMP

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 05. Jun. 2025 12:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
jetzt habe ich das oben beschriebene Makro auch über eine Zeichnung mit 2 Blättern laufen lassen.
Jedes Blatt hat den selben Schriftkopf und so kommt meine gesuchte Textzeile 2 x vor.
Die Schleife findet auch 2 Blätter und die gesuchte Textzeile 2 x.

Allerdings wird nur auf dem aktiven Blatt die Schriftgröße geändert.

Code:

                        swNote.SetHeightInPoints 17
                        swModel.EditRebuild3

Auf der inaktiven Blatt passiert nichts, auch nicht nach STRG-Q.
Wechsel ich das Blatt, lass das Makro dort laufen, wird auch dort geändert, dafür nicht mehr auf dem inaktiven Blatt.
Der Grund dafür erschließt sich mir noch nicht.
Evtl. muss man dann noch einen Blattwechsel mit einbauen.

Grüße, Andi B. 

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Volkmar Grube
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Volkmar Grube an!   Senden Sie eine Private Message an Volkmar Grube  Schreiben Sie einen Gästebucheintrag für Volkmar Grube

Beiträge: 134
Registriert: 31.01.2009

WIN11 64Bit, SWX 2024, Delphi 10

erstellt am: 05. Jun. 2025 16:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Am Besten ist, wenn du durch alle Blätter durchgehst, in jedem Blatt für den View[0] alle Notes suchst und dann den Filter anwendest.

  Dim swDraw As SldWorks.DrawingDoc
  Dim aSheet As SldWorks.Sheet
  dim swModel as ModelDoc2


  set swdraw = swModel
  If swDraw.GetSheetCount > 0 Then
    ' nach Blättern suchen
    For i = 0 To swDraw.GetSheetCount - 1
      SheetName = swDraw.GetSheetNames(i)  ' Name ermitteln
      swDraw.ActivateSheet (SheetName)    ' Blatt aktivieren
      Set aSheet = swDraw.GetCurrentSheet  ' aSheet die aktuelle Adresse zuweisen

dann 1. View ermitteln und dort die INotes analysieren

------------------
Grüße aus Dresden
Volkmar Grube

Es gibt keine Probleme, es gibt nur Aufgaben.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 06. Jun. 2025 10:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
Danke Volkmar für die Rückmeldung.
Ich habe den Code überarbeitet und jetzt werden auch andere Blätter berücksichtigt.

Wen es Interessiert, hier der Code:

Code:

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDrawDoc As SldWorks.DrawingDoc

Sub main()
    Dim vSheetNames As Variant
    Dim sSheetName As String
    Dim swView As SldWorks.View
    Dim swNote As SldWorks.Note
    Dim lSheetCount As Long
    Dim lViewCount As Long
    Dim lNoteCount As Long
    Dim sZeileninhalt As String
    Dim ss As Variant
    Dim vv As Variant
    Dim vNotes As Variant
    Dim i As Long
    Dim j As Long
   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDrawDoc = swModel

    'nach Blättern suchen
    vSheetNames = swDrawDoc.GetSheetNames
    For i = 0 To UBound(vSheetNames)
        sSheetName = swDrawDoc.GetSheetNames(i)    'Blattname ermitteln
        swDrawDoc.ActivateSheet (sSheetName)      'Blatt aktivieren
        lViewCount = swDrawDoc.GetViewCount
        ss = swDrawDoc.GetViews        'Ruft alle Ansichten, einschließlich der Blätter, in diesem Zeichnungsdokument ab.
        lSheetCount = LBound(ss)
        vv = ss(lSheetCount)
        lViewCount = LBound(vv)
        Debug.Print (vv(lViewCount).GetName2())
        lNoteCount = vv(lViewCount).GetNoteCount
       
        If lNoteCount > 0 Then
            vNotes = vv(lViewCount).GetNotes    'Ruft die Notizen in dieser Zeichnungsansicht ab.
            For j = 0 To lNoteCount - 1
                'Debug.Print "  Note text: " & vNotes(j).GetText
                Debug.Print "  Note text: " & vNotes(j).PropertyLinkedText
                sZeileninhalt = "$PRPSHEET:""Auftragsnummer""$PRPSHEET:""Number""-$PRPSHEET:""SW-Konfigurationsname"""
                'An dieser Stelle eine Abfrage auf den Inhalt um zu prüfen, ob man die richtige Note erwischt hat.
                If vNotes(j).PropertyLinkedText = sZeileninhalt Then
                    Debug.Print "  Das ist es! "
                    Set swNote = vNotes(j)
                    swNote.SetHeightInPoints 13    '19Pt ist Standard
                    swModel.EditRebuild3
                    Exit For
                End If
            Next
        End If
    Next
   
End Sub


Euch ein schönes Pfingstwochenende 

Grüße, Andi Beck

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 10. Jun. 2025 15:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo in die Runde,
jetzt habe ich doch noch diverse Probleme gefunden.

Diese Codezeile

Code:

Debug.Print "  Note text: " & vNotes(j).PropertyLinkedText

gibt mir im Idealfall diesen Inhalt zurück:
$PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname"

Jetzt gibt es Varianten, da dort noch mehr steht:
<FONT size=14PTS>$PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname"
oder
<FONT size=3.8>$PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname"

Diese anderen Ergebnisse kommen immer dann zustande, wenn die Schriftgröße nicht mit der Voreinstellung in der Blattvorlage übereinstimmt. (So vermute ich)

Jetzt habe ich entsprechend meine Abfrage angepasst:

Code:

'von
If vNotes(j).PropertyLinkedText = sZeileninhalt Then
'zu
If InStr(1, vNotes(j).PropertyLinkedText, sZeileninhalt, vbTextCompare) > 0 Then

So komme ich wieder in meinen Bearbeitungsmodus, wenn ich die richtige Zeile gefunden habe.
Leider funktioniert die Schriftgrößenanpassung unter diesen beiden Varianten nicht mehr. Nur wenn die Schriftgröße auf 19pt eingestellt ist, kommt FONT size=xxxx nicht, und ich kann die Schriftgröße anpassen:

Code:

'swNote.SetHeightInPoints (HeightInPoints)  'In Points ist zu grobe Einteilung
swNote.SetHeight (HeightInMeter)
swModel.EditRebuild3

Kennt jemand diese Problematik und weiß evtl. eine Abhilfe?

Grüße, Andi Beck  


------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

[Diese Nachricht wurde von Andi Beck am 10. Jun. 2025 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Torsten Niemeier
Ehrenmitglied V.I.P. h.c.
Maschinenbau Ingenieur



Sehen Sie sich das Profil von Torsten Niemeier an!   Senden Sie eine Private Message an Torsten Niemeier  Schreiben Sie einen Gästebucheintrag für Torsten Niemeier

Beiträge: 3862
Registriert: 21.06.2001

"ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform
** CSWP 04/2011 **
** CSWE 08/2011 **

erstellt am: 10. Jun. 2025 18:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hi Andi,

ich denke, da hast Du zwei Möglichkeiten:

Wenn der Text bzgl. Font-Size da ist:
1. Den Text hinsichtlich Deiner Erfordernisse umschreiben. (Scheint allerdings in mm zu sein!)
2. Den Textabschnitt löschen und dann Deine übliche Einstellung durchführen.

Gruß, Torsten

[Diese Nachricht wurde von Torsten Niemeier am 10. Jun. 2025 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Volkmar Grube
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Volkmar Grube an!   Senden Sie eine Private Message an Volkmar Grube  Schreiben Sie einen Gästebucheintrag für Volkmar Grube

Beiträge: 134
Registriert: 31.01.2009

WIN11 64Bit, SWX 2024, Delphi 10

erstellt am: 10. Jun. 2025 21:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hallo Andi,

Diese Fontangaben entstehen, wenn jemand im vorhandenen Text einen Block markiert und dem neue Angaben zur Schriftart und -größe verpasst (das ist so eine Art RTF-Syntax).
Ich würde also den Text erstmal saubermachen, d.h. den vorhandenen Text gegen " $PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname" " ersetzen (vNotes(j).PropertyLinkedText = sZeileninhalt), ohne jede Schriftgrößenangabe und dann die Schriftgröße verändern (swNote.SetHeight ...).
Ich kanns jetzt nicht ausprobieren. Es kann auch sein dass man den Bezugshinweis erstmal temporär auf "Dokumentenstandard" zurücksetzen muss, damit die Änderung wirkt.

------------------
Grüße aus Dresden
Volkmar Grube

Es gibt keine Probleme, es gibt nur Aufgaben.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 11. Jun. 2025 08:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Torsten,
Hallo Volkmar,
besten Dank für eure Anmerkungen.
Der Vorschlag von Volkmar war ein Volltreffer, so funktioniert es, da hätte ich auch selber drauf kommen können. 
Das eigenartige ist, dass das mit dem "Font size" angezeigt wird, wenn man mit der Maus darauf zeigt.
Lasse ich aber den Inhalt der Zeile per Textfenster anzeigen, wird "Font size" nicht angezeigt.

Jetzt kann ich also die Schriftgröße in allen Varianten verändern.
Genauer gesagt verkleinere ich die Schriftgröße, wenn der Text nicht mehr in sein Feld passt.
Dazu zähle ich die Anzahl der Ziffern und Buchstaben und definiere die Schriftgröße in Abhängigkeit der Anzahl.
Nur leider wird das Ergebnis nicht optimal, da die Ziffern und Buchstaben unterschiedlich Platz benötigen.

Beispiel:
11111 ..... IIIII = 17 Stellen = 25,6 mm bei 19 pt
WWWWW OOOOO MMMMM = 17 Stellen = 56 mm bei 19 pt

Frage:
Lässt sich die benötigte Textlänge in mm per API abfragen?

Wenn ja, dann könnte ich die Textgröße viel besser an den vorhanden Platz anpassen.

Grüße, Andi 

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Volkmar Grube
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Volkmar Grube an!   Senden Sie eine Private Message an Volkmar Grube  Schreiben Sie einen Gästebucheintrag für Volkmar Grube

Beiträge: 134
Registriert: 31.01.2009

WIN11 64Bit, SWX 2024, Delphi 10

erstellt am: 12. Jun. 2025 11:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hallo Andi,
die reale Textbreite für ein Wort zu errechnen, ist immer ein bisschen schwierig. Ich habe mich darum immer gedrückt. 
Das errechnet sich nämlich nicht nur aus der Textgröße, sondern da spielen auch noch die Schriftarten mit rein.
Vielleicht mal googeln unter "Schriftbreite errechnen" u.ä.
Da muss man aus dem Wort, der Schriftart und der zur Verfügung stehenden Breite in mm die Schrifthöhe errechnen.
Im konkreten Fall steht der reale Text zur Programmierzeit ja auch noch nicht wirklich zur Verfügung, sondern nur die Platzhalter. Wenn jemand den Eigenschaftstext ändert, ändert sich wieder alles.

------------------
Grüße aus Dresden
Volkmar Grube

Es gibt keine Probleme, es gibt nur Aufgaben.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2627
Registriert: 02.10.2006

Firma: SW 2024-5.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2025-1.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 12. Jun. 2025 14:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Volkmar,
ich habe ein wenig getüftelt und einen ganz brauchbaren Weg gefunden, die Textlänge zu optimieren.
Ich erzeuge einen Rahmen um den Text, vermesse ihn, passe solange an, bis meine Wunschlänge erzeugt ist, und entferne den Rahmen wieder.

Code:

Dim bRet As Boolean
Dim value As Variant
Dim Textlänge As Double
bRet = swNote.SetBalloon(4, 0)  'Rahmen um den Text anbringen
value = swNote.GetBalloonInfo()
Debug.Print "    Balloon Info x center point = " & value(0)
Debug.Print "    Balloon Info x arc point = " & value(3)
Debug.Print "    Balloon Info radius = " & value(6)
Debug.Print "    Textlänge = " & (value(0) - value(3)) * 2

Textlänge = (value(0) - value(3)) * 2  'Startwert

'Schleife bis Textlänge bei 74 mm ist
Do While Textlänge <= 0.0743
    HeightInMeter = HeightInMeter + 0.0001
    swNote.SetHeight (HeightInMeter)
    bRet = swNote.SetBalloon(0, 0)  'Rahmen um den Text entfernen
    bRet = swNote.SetBalloon(4, 0)  'Rahmen um den Text erneut anbringen
    value = swNote.GetBalloonInfo()
    Textlänge = (value(0) - value(3)) * 2
    Debug.Print "Textlänge: " & Textlänge
Loop

bRet = swNote.SetBalloon(0, 0)      'Rahmen um den Text entfernen


Evtl. kann damit jemand etwas anfangen oder hat auch noch Verbesserungsvorschläge.

Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz