Makro skonfigurowane do pobierania wartości notatki

Witam
Mam plan z kilkoma stronami, które mają to samo tło.
Na tej mapie tła mam notatkę, w której ręcznie przypisujemy wartość, inną dla każdej strony.

W moim makrze chciałbym pobrać wartość tej notatki dla każdej strony, aby użyć jej jako nazwy strony (mam już makro do zarządzania nazwą strony). Nie wiem, jak mogę pobrać tę wartość na każdej stronie...

Z góry dziękuję
Cédric powiedział:

Witam

Jeśli notatka nie jest połączona z żadną właściwością pliku, ale jest częścią szablonu płaszczyzny bazowej, należy pobrać identyfikator obiektu notatki w celu przetworzenia działań notatki.

1 polubienie

Witam;

Przyłączając się do @Cyril_f w jego rozumowaniu, byłoby znacznie prościej, gdyby te notatki bezpośrednio wywodzą się z właściwości planowanego komponentu.
W ten sposób będą one automatycznie aktualizowane w arkuszach lub będzie można z nich korzystać za pomocą makra (co staje się mniej potrzebne).

Byłem z głową pod wodą... Dziękuję za odpowiedzi
Nie ma możliwości powiązania notatki z właściwością części, jest to informacja, którą wypełnia się ręcznie na rysunku

Z drugiej strony interesuje mnie, jak odzyskać identyfikator obiektu notatki

Witam

Musisz zapętlić wszystkie notatki i pobrać zawartość notatki, aby znaleźć jej numer, a następnie napisać wiersz podobny do tego:

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

Dla pętli musisz zrobić coś takiego:

    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 polubienia

dziękuję, przetestuję to!

Tutaj po kilku próbach udało mi się uzyskać to, czego chciałem!
Oto moje kompletne makro, dostosowane do naszych potrzeb: zmieniamy nazwę każdego arkusza na numer arkusza i numer pozycji (który znajduje się w notatce). Jeśli w notatce nie zostanie znaleziona żadna notatka ani tekst, nazwa arkusza nie zostanie zmieniona

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 polubienia