Macro ingesteld om de waarde van een notitie op te halen

Hallo
Ik heb een plan met meerdere pagina's die dezelfde achtergrond hebben.
In deze achtergrondkaart heb ik een notitie waar we handmatig een waarde aan toekennen, die voor elke pagina anders is.

In mijn macro wil ik de waarde van deze notitie voor elke pagina ophalen om deze te gebruiken voor de paginanaam (ik heb de macro al om de paginanaam te beheren). Ik weet niet hoe ik deze waarde op elke pagina kan ophalen...

Bij voorbaat dank
Cédric

Hallo

Als de notitie niet is gekoppeld aan een bestandseigenschap, maar deel uitmaakt van de basissjabloon, moet de ID van het notitieobject worden opgehaald om de acties van de notitie te verwerken.

1 like

Hallo;

Om @Cyril_f in zijn redenering te volgen: het zou veel eenvoudiger zijn als deze noten rechtstreeks zouden worden afgeleid van een eigenschap van het onderdeel dat wordt geschaafd.
Op deze manier worden ze automatisch bijgewerkt in de sheets, of kunnen ze worden gebruikt via een macro (die minder nodig wordt).

Ik stond met mijn hoofd onder water... Bedankt voor je antwoorden
Het is niet mogelijk om de notitie te koppelen aan een eigenschap van het onderdeel, het is een info die je handmatig invult in de tekening

Aan de andere kant ben ik geïnteresseerd om te weten hoe ik de ID van het notitieobject kan ophalen

Hallo

Je moet alle noten doornemen en de inhoud van de notitie ophalen om het nummer te vinden en dan een regel als deze schrijven:

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

Voor de lus moet je zoiets als dit doen:

    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 likes

bedankt, ik zal het testen!

Hier heb ik na verschillende pogingen kunnen krijgen wat ik wilde!
Hier is mijn volledige macro, aangepast aan onze behoeften: we hernoemen elk blad met het bladnummer en het positienummer (dat te vinden is in de notitie). Als er geen notitie of tekst in de notitie wordt gevonden, wordt de naam van het blad niet gewijzigd

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 likes