SolidWorks >> Makra >> Makro VBA - dotyczy zapisywania pliku złożenia jako plik part powierzchniowy
Autor Wypowiedź
Pracuję jako konstuktor-technolog. Miłośnik komputerów, fotografi i modelarstwa.
2014-06-12, 16:01
Pomógł 0 raz(y).
Witam serdecznie Wszystkich urzytkowników tego Forum mam na imię Marcin i jest to mój pierwszy post więc prosiłbym o wyrozumiałość. Załączyłem plik makra wraz z modelem. Makro miało za zadanie dla każdej konfiguracji części zmienić długość wg określonej wartości w pętli oraz zapisać plik złożenia jako plik części ale powierzchnia zewnętrzna. Sprawa wygląda tak, że jak testuję makro ręcznie przez F8 to wszystko ładnie działa. Jednak kiedy uruchomię makro przez "Urochom makro" to zapisywane pliki są puste, nie ma w nich modelu powierzchniowego. Walczę z tym już długo i nie daję rady tego rozgryźć.
 
.
2014-06-13, 07:44
Pomógł 52 raz(y).
Trudno cokolwiek doradzić jeśli nie ma załączników. :(

Aczkolwiek , być może problem polega na tym, że masz kilka procedur w makrze i jak uruchamiasz z pod edytora przez F8 to uruchamia się 'main' i wszystko działa, a po uruchomieniu przez 'Uruchom makro' startuje z innej procedury, najczęściej ostatniej.
Spróbuj założyć sobie ikonkę dla tego makra (opis w helpie SW) i we właściwościach wybrać 'main' jako procedurę startową.
 
Pracuję jako konstuktor-technolog. Miłośnik komputerów, fotografi i modelarstwa.
2014-06-13, 09:46
Pomógł 0 raz(y).
Jak wogóle dodaje się pili zewnętrzne? Czy można dodawać tylko pliki graficzne? Poniżej zamieszczm kod programu. Spróbuje wykonać propozycję kolegi i dam odpowiedź czy zadziałało. Pozdrawiam



Option Explicit
Option Compare Text

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim Part As ModelDoc2
Dim lErrors As Long
Dim lWarnings As Long
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub Skok_wymiar(newVal As Integer) 'nowa wartość dla wymiaru "Skok"
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set Part = swApp.ActiveDoc

Dim myDimension As Object
Set myDimension = Part.Parameter("skok@Szkic1")
myDimension.SystemValue = newVal / 1000

boolstatus = Part.EditRebuild3()
Part.ClearSelection2 True

End Sub



Sub zapisz_jako(nazwa_pliku As String, sciezka_dostepu As String)

Dim myModelView As Object
Set myModelView = Part.ActiveView
longstatus = swModel.SaveAs3(sciezka_dostepu & nazwa_pliku, 0, 0)


End Sub

Sub main()

Set swApp = Application.SldWorks

Dim nazwa As String
Dim początek_j As Integer
Dim max_j As Integer
Dim krok_j As Integer
Dim Srednica As String
Dim sciezka As String

początek_j = 100
max_j = 200
krok_j = 100

Dim swModel As SldWorks.ModelDoc2
Dim FileName As String 'nazwa pliku
Dim FileName1 As String 'nazwa pliku
Dim vConfigName() As String
Dim path As String
Dim nazwa123 As String
Dim i, j As Integer
Dim sConfigName As String

FileName1 = "D:1Test Złożenie.SLDASM"

Set Part = swApp.OpenDoc6(FileName1, 2, 0, "", longstatus, longwarnings)
swApp.ActivateDoc2 "Test Złożenie.SLDASM", False, longstatus 'Right(FileName1, Len(FileName1) - początkowa_liczba_znaków)
Set Part = swApp.ActiveDoc


Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc

vConfigName = swModel.GetConfigurationNames

Set Part = swApp.ActiveDoc

path = Part.GetPathName
FileName = Dir(path)
sciezka = Left(path, Len(path) - Len(FileName))

nazwa123 = swApp.GetActiveConfigurationName(FileName)

For i = 0 To UBound(vConfigName)
sConfigName = vConfigName(i)

'zmiana bieżącej konfiguracji
If nazwa123 vConfigName(i) Then
boolstatus = Part.Extension.SelectByID2(sConfigName & "@" & FileName, "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.ShowConfiguration2(sConfigName) '"Siłownik kpl - D040")
End If

Srednica = Right(sConfigName, 3)

For j = początek_j To max_j Step krok_j

Skok_wymiar (j)

If j < 10 Then
nazwa = "CL_001_" & Srednica & "_000" & j & ".SLDPRT"
Else
If j < 100 Then
nazwa = "CL_001_" & Srednica & "_00" & j & ".SLDPRT"
Else
If i < 1000 Then
nazwa = "CL_001_" & Srednica & "_0" & j & ".SLDPRT"
Else
nazwa = "CL_001_" & Srednica & "_" & j & ".SLDPRT"
End If
End If
End If

zapisz_jako nazwa, sciezka

Next j
Next i

End Sub

 
Pracuję jako konstuktor-technolog. Miłośnik komputerów, fotografi i modelarstwa.
2014-06-13, 10:30
Pomógł 0 raz(y).
Niestety propozycja z przycisiem do makra daje taki sam efekt jak uruchomienie makra przez opcję "uruchom makro" czyli wyjściowy plik jest pusty :(.
 
.
2014-06-13, 12:10
Pomógł 52 raz(y).
Widzę w pliku kilka błędów, które uniemożliwiają uruchomenie makra wogóle.

Poprawiłem je i makro wystartowało, ale do przetestowania przydałby się plik złożenia nazwany "Test Złożenie.SLDASM" ale w wersji do 2010 (bo mam taki SW)
 
Pracuję jako konstuktor-technolog. Miłośnik komputerów, fotografi i modelarstwa.
2014-06-13, 13:57
Pomógł 0 raz(y).
Pracuję na wersji SW 2013 SP3.0 i z tego co wiem nie ma możliwości zapisania w starszej wersji. Złożenie było banalnie proste, bo składała się z jednego elementu części. Częścią był prosty walec, plik części zawierał 3 konfiguracje d1, d2, d3. W złożeniu były także zrobione odpowiednio 3 konfiguracje D1, D2, D3 odpowiadające konfiguracją z pliku. Z poziomu złożenia był zrobiony szkic z wymiarem "skok" wymiar ten był połączony za pomocą równania w wymiarem wyciągnięcia walca w pliku części. Czyli jeśli za pomocą makra zmieniłem wartość wymiaru "skok" w części zmieniała mi się długość walca. Chodziło mi o to aby zapisać plik złożenia jako plik części w postaci tylkościan (powierzchni) zewnętrznych z rużnymi wartościami długości walca. Taka była moja idea tego makra. Mogę wysłać plik złożenia wraz z plikiem części. Proszę powiedzieć tylko na jakiego emaila lub czy istnieje możliwość zamieszczania innych plików jak graficzne do posta jako załączniki? Proszę napisać co było przyczyną, że makro działa niepoprawnie? Jeśli można to proszę o umieszczenie kodu to ja przetestuję czy działa. Chociaż wolałym znać przyczynę bo chcę bardziej zgłębić tajniki pisania makr w VBA w SW.
 

PSWUG

Strefa Resellera

Publikuj

Społeczność

Ankieta

Linki

RSS

BOT