Tworzę makro do dodawania notatek i aktualizowania ich zgodnie z danymi wprowadzonymi w formularzu użytkownika. Następnie wychodzę z niego, aby dodać notatki i je sformatować, ale aby znaleźć istniejące notatki na planie, wysuszam.
Zastępując nazwę przykładowej notatki (DetailItem300) moją własną (Annotation219). Nic się nie dzieje. Bez tego kroku nie mogę kontynuować mojego makra
Ponadto, jeśli zmieniłeś tylko nazwę adnotacji w drugiej części przykładu, to normalne, że nie działa. Zazwyczaj w tym miejscu musisz umieścić nazwę swojego arkusza:
DetailItem300@Sheet Format1
Edycja: A po testach, SW za pomocą metody swNote.Getname nie zwraca nazwy wyświetlanej we właściwościach, ale raczej coś w rodzaju "Detail objectxxx"
Przez makro obiektem zwracanym przez SwNote.GetName jest DetailItem300 (w rzeczywistości wszystkie notatki w ich przykładzie są zwracane w formacie DetailItemmxxx) Tak więc ich przykładowe makro jest świetne, ale znajomość z góry nazwy adnotacji jest po prostu niemożliwa. Najprostszym sposobem jest zeskanowanie notatek, a jeśli jesteś w " stałych " notatkach z jednego formatu klipu do innego (w przypadku tabelki rysunkowej, na przykład, jeśli wszystkie pochodzą z tego samego szablonu), możesz uprościć kod, aby bezpośrednio kierować żądane notatki. Ze swojej strony zawsze bawiłem się skanerem notatek i nie jest on szczególnie wolniejszy (zwłaszcza na planie w tle w ogóle nie ma ich 250).
Dziękuję za te odpowiedzi, widzę to wyraźniej. Rzeczywiście, pominąłem szczegóły, notatki są w planie tła (w kartridżu), więc powinienem być w stanie namierzyć te nuty, o których mowa... Do kodu skopiowałem i wkleiłem przykład, dokonując pewnych modyfikacji tylko.
Dla metody "skanowania": Z pierwszą częścią kodu. Nic się nie dzieje po zmianie nazwy
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDrawing As SldWorks.DrawingDoc
Dim swSelMgr As SldWorks.SelectionMgr
Dim swNote As SldWorks.Note
Dim swView As SldWorks.View
Dim swSelObj As Object
Dim theCurrentRev As String
Dim foundNote As Boolean
Dim ret As Boolean
Dim descriptionText As String
Const swSelNOTES = 15
Const swDocDRAWING = 3
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
' Verify that the document is a drawing
If (swModel Is Nothing) Or (swModel.GetType <> swDocDRAWING) Then
Exit Sub
End If
Set swDrawing = swModel
' Edit the current drawing template
swDrawing.EditTemplate
' This is the template
Set swView = swDrawing.GetFirstView
' This section shows a slower method for
' selecting a note by name by using note
' traversal (swView::GetFirstNote and SwView::GetNext)
' Get the first note object
Set swNote = swView.GetFirstNote
' While you have a valid note
Do While Not swNote Is Nothing
' Verify if you have the desired note by checking its name
' This can also be done by checking the position or the existing
' text string in the note
If (swNote.GetName = "DetailItem219") Then
foundNote = True
theCurrentRev = swNote.GetText
swApp.SendMsgToUser ("Note found")
End If
'Set swNote = swNote.GetNext
' Continue until no more notes
Loop
Witam Czy masz pewność, że adnotacje są zakodowane jako DetailItem? Jeśli twoje oprogramowanie jest w języku francuskim, a twoje szablony są tworzone w wersji FR, o ile się nie mylę, wszystkie adnotacje są skodyfikowane obiektem Detail.
Po kilku nieudanych próbach udało mi się. W rzeczywistości nazwa "Adnotacja219" nie jest zbyt przydatna, wykonując nagranie makra i wybierając odpowiednią notatkę, udało mi się poznać jej nazwę (w tym przypadku Obiekt détail1130@Fond planu1). W rezultacie działa z metodą "ukierunkowaną", ale nie ze skanowaniem... Ale na razie mi to nie przeszkadza.
Teraz, gdy notatka została znaleziona, mogę z nią zrobić, co chcę.