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