Makro zum Abrufen des Werts einer Notiz eingerichtet

Hallo
Ich habe einen Plan mit mehreren Seiten, die den gleichen Hintergrund haben.
In dieser Hintergrundkarte habe ich eine Notiz, wo wir manuell einen Wert zuweisen, der für jede Seite unterschiedlich ist.

In meinem Makro möchte ich den Wert dieser Notiz für jede Seite abrufen, um sie für den Seitennamen zu verwenden (ich habe bereits das Makro, um den Seitennamen zu verwalten). Ich weiß nicht, wie ich diesen Wert auf jeder Seite abrufen kann ...

Vielen Dank im Voraus
Cédric

Hallo

Wenn die Notiz nicht mit einer Dateieigenschaft verknüpft ist, sondern Teil der Vorlage für die Grundebene ist, muss die ID des Notizobjekts abgerufen werden, um die Aktionen der Notiz verarbeiten zu können.

1 „Gefällt mir“

Hallo;

Um @Cyril_f in seiner Argumentation zu unterstützen, wäre es viel einfacher, wenn diese Notizen direkt von einer Eigenschaft des zu planenden Bauteils abgeleitet würden.
Auf diese Weise werden sie automatisch in den Blättern aktualisiert oder können über ein Makro verwendet werden (was weniger notwendig wird).

Ich war mit dem Kopf unter Wasser... Vielen Dank für Ihre Antworten
Es ist nicht möglich, die Notiz mit einer Eigenschaft des Teils zu verknüpfen, es handelt sich um eine Information, die Sie manuell in der Zeichnung ausfüllen

Auf der anderen Seite bin ich daran interessiert zu wissen, wie man die ID des Notizobjekts abruft

Hallo

Sie müssen alle Notizen durchlaufen und den Inhalt der Notiz abrufen, um ihre Nummer zu finden, und dann eine Zeile wie diese schreiben:

if swNote.GetName = "Objet de détailxxx" then ...

Für die Schleife müssen Sie etwas wie folgt tun:

    Set swView = swDraw.GetFirstView
    Set swNote = swView.GetFirstNote
    Do While Not swNote Is Nothing
    If swNote.GetText = "xxx" then debug.print swNote.GetName: stop
Set swNote = swNote.GetNext
Set swView = swView.GetNext

3 „Gefällt mir“

Danke, ich werde es testen!

Hier habe ich es nach mehreren Versuchen geschafft, das zu bekommen, was ich wollte!
Hier ist mein vollständiges Makro, angepasst an unsere Bedürfnisse: Wir benennen jedes Blatt mit der Blattnummer und der Positionsnummer (die in der Notiz zu finden ist) um. Wenn keine Notiz oder kein Text in der Notiz gefunden wird, wird der Name des Blattes nicht geändert

Option Explicit


Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swSheet As SldWorks.Sheet
    Dim vSheetNames As Variant
    Dim swView As SldWorks.View
    Dim swNote As SldWorks.Note
    Dim i As Long
    Dim pos, feuilleorigin As Long
    Dim FName As Variant
    Dim namesArray As Variant
    Dim noteFound As Boolean

    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel

    ' Désactiver l'affichage pour accélérer la macro (mode en arrière-plan)
    swApp.Visible = False

    ' get the list of sheets names
    vSheetNames = swDraw.GetSheetNames
    
    ReDim namesArray(0)
    For i = 0 To UBound(vSheetNames)
        ' increase the array length and add the sheet name to the list
        ReDim Preserve namesArray(UBound(namesArray) + 1) ' increase the array length to put the next value
        namesArray(i) = vSheetNames(i)
        ' temporary rename the sheet to avoid duplicate names (if duplicate, you can not rename)
        Set swSheet = swDraw.Sheet(vSheetNames(i))
        swSheet.SetName (i)
    Next i
    
    ' get the list of sheets names
    vSheetNames = swDraw.GetSheetNames
    For i = 0 To UBound(vSheetNames)
        ' get the original name of the sheet
        FName = namesArray(i)

        ' rename the sheet with the new number and the original part of the name
        Set swSheet = swDraw.Sheet(vSheetNames(i))
        ' activate the sheet to get the current note text
        swDraw.ActivateSheet (vSheetNames(i))
        Set swView = swDraw.GetFirstView ' This is the drawing template

        Set swNote = swView.GetFirstNote
        noteFound = False
        Do While Not swNote Is Nothing
'Debug.Print swNote.GetName
            ' Objet de détail15 = nom de la note qui contient la position
            ' check if the note exists and if it has some text, else do not change the sheet name
            If swNote.GetName = "Objet de détail15" And Trim(swNote.GetText) <> "" Then
                noteFound = True
                Exit Do
            End If
            Set swNote = swNote.GetNext
        Loop
        'swSheet.SetName (i + 1 & Mid(FName, pos))
        If noteFound = True Then
            swSheet.SetName (i + 1 & "-pos" & swNote.GetText)
        Else
            swSheet.SetName (FName)
        End If
    Next i
    
     ' Réactiver l'affichage pour SolidWorks
    swApp.Visible = True
    
    MsgBox "Renumérotation terminée"

End Sub


3 „Gefällt mir“