SolidWorks >> Makra >> Pobieranie właściwości pliku - problem
Autor Wypowiedź
2017-03-06, 09:57
Pomógł 0 raz(y).
Dzień dobry,
mam problem, a właściwie dwa.
Korzystam z makra pobierającego właściwości pliku (numer rysunku, nazwę i pierwsze 3 litery z numeru rysunku). Makro przepisuje mi to do rysunku wykonawczego i tu nie ma problemu. Pojawia się on gdy za kilka dni otwieram ponownie rysunek wykonawczy i wtedy "gubi" on te właściwości. Da się zrobić tak, że zapamięta je?

I druga sprawa czy da się to makro jakoś podpiąć do zapisywania pliku, żeby nie trzeba było za każdym razem je klikać?

 
CSWP, CSWE, CSWI *** solid-blog.pl ***
2017-03-06, 14:42
Pomógł 405 raz(y).
No fajnie, ale nie załączyłeś ani pliku SW ani makra - więc jak można cokolwiek pomóc?

Sprawdziłbym przede wszystkim, co się dzieje z właściwościami pliku, bo to stąd trafiają wpisy do rysunku.
 
2017-03-06, 16:23
Pomógł 0 raz(y).
Jasne, już wrzucam makro.

"Dim swApp As Object
Sub main()

Set swApp = Application.SldWorks
Dim NazwaPliku As String
Dim Spacja As Long
Dim Dlugosc As Long
Dim Description As String
Dim PartNo As String
Dim Numer As String
Dim Wpis As Long
Dim CusPropMgr As SldWorks.CustomPropertyManager

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "Brak otwartych dokumentów", swMbInformation
End
End If
Set CusPropMgr = swModel.Extension.CustomPropertyManager("")
NazwaPliku = swModel.GetTitle()
Dlugosc = Len(NazwaPliku)
Spacja = InStr(NazwaPliku, " ")
PartNo = "" + Left(NazwaPliku, Spacja - 1) + ""
Description = Mid(NazwaPliku, Spacja + 1)
Numer = Left(NazwaPliku, 3)
NazwaPliku = NazwaPliku + ".SLDPRT"

Wpis = CusPropMgr.Delete("Description")
Wpis = CusPropMgr.Delete("PartNo")
Wpis = CusPropMgr.Delete("Numer")
Wpis = CusPropMgr.Add2("Description", swCustomInfoText, Description)
Wpis = CusPropMgr.Add2("PartNo", swCustomInfoText, PartNo)
Wpis = CusPropMgr.Add2("Numer", swCustomInfoText, Numer)
Wpis = CusPropMgr.Add2("Material", swCustomInfoText, Chr(34) + "SW-Material@" + NazwaPliku + Chr(34))
Wpis = CusPropMgr.Add2("Masa", swCustomInfoText, Chr(34) + "SW-Mass@" + NazwaPliku + Chr(34))


End Sub
"
 
.
2017-03-06, 20:30
Pomógł 52 raz(y).
Tak na pierwszy rzut oka wydaje mi się, że zamiast:
NazwaPliku = swModel.GetTitle()
powinno być:
NazwaPliku = swModel.GetPathName
Wiersz : NazwaPliku = NazwaPliku + ".SLDPRT" należy usunąć.

Wtedy pobierana jest pełna nazwa pliku ze ścieżką. Inaczej jest pobierana nazwa z nagłówka i ścieżka jest domyślna dla SW niekonieczne zgodna ze ścieżką pliku, czyli SW zapisuje tam gdzie chce. Później otwierasz niestety stary dokument.
 
2017-03-07, 09:06
Pomógł 0 raz(y).
Zrobiłem tak jak napisałeś, niestety moje makro się popsuło.
Zamiast nazwy dokumentu i numeru rysunku pobiera teraz pełną ścieżkę i ścieżkę skróconą o nazwę części.
 
.
2017-03-07, 10:53
Pomógł 52 raz(y).
Sorry, nie zauważyłem, że tą samą zmienną używasz do dwóch celów.
Twoje makro powinno działać poprawnie. Sprawdź w rysunku powiązanie z odpowiednimi właściwościami modelu i czy na pewno rysunek odnosi się do właściwego modelu. No i najważniejsze, czy zapisujesz model i rysunek po uruchomieniu makra. Zapisywanie modelu można umieścić w makrze i wtedy będzie się to robiło automatycznie.

 
2017-03-07, 12:51
Pomógł 0 raz(y).
Masz rację, faktycznie błąd leży w tym, że nie zapisałem modelu po kliknięciu w makro.
Czy mógłbyś mi powiedzieć jaką linijkę muszę dopisać żeby od razu zapisywało z poziomu makra ?
 
.
2017-03-07, 14:54
Pomógł 52 raz(y).
Należy dodać linię :

swModel.Save


przed End Sub
 
2017-03-08, 07:34
Pomógł 0 raz(y).
Dziękuję, działa.

Co do drugiej części mojego pytania, nie da się zrobić tak żeby makro samo się "wciskało" po otwarciu pliku ? Niby samo kliknięcie trwa chwilę ale czasami się zapomina.
 
.
2017-03-08, 08:04
Pomógł 52 raz(y).
Niestety raczej się nie da. Sam szukałem takiego rozwiązania coś w stylu autoexec dla SW.
 
2017-03-08, 08:29
Pomógł 0 raz(y).
Szkoda, może kiedyś ktoś coś takiego wymyśli.
Dziękuję za pomoc.
 
CSWP, CSWE, CSWI *** solid-blog.pl ***
2017-03-08, 08:52
Pomógł 405 raz(y).
A tutaj przykład. Jest to nieco zawiłe ale wygląda, że działa https://www.youtube.com/watch?v=zbvp1v7_bec
 
.
2017-03-08, 10:41
Pomógł 52 raz(y).
Wygląda to strasznie i do tego w SW 2015 gdzie jest inny interface do równań nie da sie wprowadzić takiego równania.
Chyba prościej jednak kliknąć na ikonę z makrem.
 
CSWP, CSWE, CSWI *** solid-blog.pl ***
2017-03-08, 11:06
Pomógł 405 raz(y).
Zgodzę się :)

Widziałem też inne rozwiązania ale nie jestem przekonany. Osobiście też wolałbym kliknąć.
 
.
2017-03-08, 11:15
Pomógł 52 raz(y).
Problem jest w tym, że zastosowany w linku trik polegał na wpisaniu równania, które zawierało błąd składni. Poprzedni interface zapisywał takie błędne równania i zaznaczał błąd a nowy w ogóle nie pozwala na taki błędny wpis.

Zdecydowanie lepiej kliknąć na ikonkę z makrem, albo napisać sobie makro do otwierania dokumentów SW , które w sobie miło by tą funkcję jaka jest Ci potrzebna przy starcie.

PS.
Automatyczne uruchamianie makra przy otwieraniu dokumentu może a raczej na pewno wydłuży czas otwierania złożeń bo będzie wykonywane we wszystkich częściach.
 
.
2017-03-09, 09:00
Pomógł 52 raz(y).
Napisałem takie makro do otwierania dokumentu SW z wykonaniem operacji przy starcie:



Dim swApp As SldWorks.SldWorks
Option Explicit


Sub main()

Dim Filter As String

Dim fileName As String
Dim fileConfig As String
Dim fileDispName As String
Dim fileOptions As Long
Set swApp = Application.SldWorks

Filter = "Dokument SolidWorks (*.sldprt; *.sldasm; *.slddrw)|*.sldprt;*.sldasm;*.slddrw|"
fileName = swApp.GetOpenFileName("Otwórz dokument . . . ", "", Filter, fileOptions, fileConfig, fileDispName)

If Not fileName = "" Then
Dim Rozszerzenie, TypPliku As String
Dim Plik As Object
Rozszerzenie = Split(fileName, ".")
TypPliku = Trim(Rozszerzenie(UBound(Rozszerzenie)))

Select Case Trim(UCase(TypPliku))
Case "SLDPRT"
Set Plik = swApp.OpenDoc(fileName, swDocPART)
Case "SLDASM"
Set Plik = swApp.OpenDoc(fileName, swDocASSEMBLY)
Case "SLDDRW"
Set Plik = swApp.OpenDoc(fileName, swDocDRAWING)
End Select

If Not Plik Is Nothing Then
Dim longstatus As Long
swApp.ActivateDoc2 fileName, False, longstatus
Autoexec
End If
End If
End Sub

' Procedura do wykonania na starcie

Sub Autoexec()
Dim swModel As SldWorks.ModelDoc2
Set swModel = swApp.ActiveDoc
'
' Tutaj operacje do wykonania przy starcie dokumentu
' lub wykonanie innego makra
' swApp.RunMacro "Nazwa pliku makra","Moduł","Procedura"
'
End Sub


Można też prościej :
http://www.pswug.info/image/forum/forum_760_20_2542_9004.swp
 

PSWUG

Strefa Resellera

Publikuj

Społeczność

Ankieta

Linki

RSS

BOT