Zrobiłem test i oto co dostałem
I mam wrażenie, że po linii, która jest w kolorze żółtym, idzie bezpośrednio do
" Funkcja GetFilename(strPath As String) As String "
Zrobiłem test i oto co dostałem
I mam wrażenie, że po linii, która jest w kolorze żółtym, idzie bezpośrednio do
" Funkcja GetFilename(strPath As String) As String "
Właśnie przerobiłem testy, kopiując kod podstawowy i nie działa to za każdym razem...
Zrobiłem 5 testów i miałem 2 razy, w których działa dobrze, inne, w których nie mam PDF/DWG, albo po prostu się nie uruchamia!
Nie rozumiem, dlaczego nie działa za każdym razem!
W przeciwnym razie teoretycznie nie muszę już zmieniać ścieżki do pliku
Witam;
@Antoine_Ruelle ,
Przyglądając się bliżej swojemu MEP, wygląda na to, że nie używasz właściwości " Revision ". Co wyjaśni poniższy błąd:
Indeks " A " w Twoim eurodeputowanym wydaje się być tylko tekstem...
Ponadto w pliku SLDPRT Twoje właściwości mają postać:
" Tekst: " (Nie sądzę, aby użycie " : " było właściwe w tym kontekście.
Tylko twój SLDPRT wydawał się mieć pojęcie indeksu, czy używasz PDM?
Pozdrowienia
Dobry wieczór
Tak, przechodzi do funkcji, aby móc pobrać informacje o nazwie pliku, usuwając rozszerzenie.
W chwili obecnej kod oferowany przez @sbadenis działa na SW2022.
Witam @tous
Antoine w międzyczasie przygląda się temu makro,
Usuwa wiersze 4 i 5 po " sub main ".
I Przypisuje dokładną nazwę właściwości wersji zamiast " hint "
Rzeczywiście, @Maclane w części rewizyjnej, również o tym pomyślałem, stąd modyfikacja, którą zaproponowałem z usunięciem tej właściwości i dodaniem folderów.
W przypadku właściwości rzeczywiście dziwne jest dodanie " : " w nazwie właściwości i może to rzeczywiście stanowić problem w niektórych przypadkach (makro lub inne).
Przykładowa właściwość bez:
Na @Antoine_Ruelle potwierdzam, że makro działa dobrze na SW2023 (więc nie ma powodu na 2022 roku), jak @Cyril_f również mówi.
Możesz także wypróbować rozwiązanie @Lynkoa15, mając nadzieję, że tym razem problem się nie pojawi.
Witam, dziękuję za tę opinię @Maclane .
Rzeczywiście, nie używam właściwości revision, zdałem sobie z tego sprawę po fakcie, ponieważ do zapisania w PDF/DWG mam taką samą nazwę pliku jak plan oprogramowania. Więc usunąłem tę część. I nadal mam ten sam problem, nie mam PDF/DWG
Jako wskazówkę wpisał ręcznie w tekście właściwość pokoju, która jest pokazana na planie.
I nie, nie używamy PDM
sbadenis - Dla kogo jest ": " Nie wiem, czy to naprawdę problem, ponieważ działało dobrze 2 razy z rzędu. Dziś rano zrobiłem test bez ":" i znowu dostałem komunikat, że na linii 118 mam blok, który nie jest zdefiniowany. Czy możesz mi wyjaśnić tę linię?
" Set swModel = swApp.ActivateDoc3(sModelName, True, swOpenDocOptions_Silent, lErrors) "
Właśnie ponownie zrobiłem test, zanim ci odpowiedziałem i zadziałało
@Lynkoa15 Jeśli dobrze zrozumiałem ścieżkę do folderu, muszę określić je jako zmienne
Const dxfSubFolder jako ciąg = "\dwg"
Const pdfSubFolder As String = "\pdf"
Const stepSubFolder As String = "\krok"
Wywołać je w ścieżkach nagrania?
W każdym razie dziękuję za pomoc, zaczynam trochę lepiej rozumieć VBA
Witam
Ta linia pozwala na aktywację jednego z otwartych dokumentów w trybie cichym (przezroczystym dla użytkownika).
Tak, upraszcza kod i wywołuje zmienne, zamiast wprowadzać ten sam tekst n razy.
A jeśli kiedykolwiek zdecydujesz się na zmianę ścieżki, łatwiej jest zarządzać tylko jedną zmienną niż sprawdzać cały kod.
Okej, więc dlaczego w niektórych przypadkach makro się na nim zacina? Czy to możliwe, że plik jest już otwarty? Albo że go nie znajdzie?
A więc na jakim poziomie kodu powinienem określić zmienną ścieżki, aby powiedzieć mu, aby wziął ścieżkę do danego pliku i dodał "/pdf", aby mieć odpowiedni folder rekordów?
Albo jaką część kodu z innego makra muszę pobrać?
Skoro podjąłem temat w toku, czy mógłbyś podzielić się najnowszą wersją swojego kodu?
Właśnie ponownie zrobiłem test i to nie działa, już nic nie rozumiem haha!!
Oto kod
Option Explicit
Public Enum swDocumentTypes_e
swDocNONE = 0 ' Used to be TYPE_NONE
swDocPART = 1 ' Used to be TYPE_PART
swDocASSEMBLY = 2 ' Used to be TYPE_ASSEMBLY
swDocDRAWING = 3 ' Used to be TYPE_DRAWING
End Enum
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swConfig As SldWorks.Configuration
Dim vSheetNameArr As Variant
Dim vSheetName As Variant
Dim I As Long
Dim nDocType As Long
Dim op As Long
Dim suppr As Long
Dim lErrors As Long
Dim lWarnings As Long
Dim boolstatus As Boolean
Dim bRet As Boolean
Dim FileConnu As Boolean
Dim nbConnu As Integer
Dim sModelName As String
Dim sPathName As String
Dim TabConnu(10000) As String
Dim sConfigName As String
Const dxfSubFolder As String = "\dwg"
Const pdfSubFolder As String = "\pdf"
Const stepSubFolder As String = "\step"
Sub Main()
Set swApp = Application.SldWorks
boolstatus = swApp.SetUserPreferenceIntegerValue(swStepAP, 214) 'Force la version AP214
boolstatus = swApp.SetUserPreferenceIntegerValue(swStepExportPreference, swAcisOutputGeometryPreference_e.swAcisOutputAsSolidAndSurface) 'Force l'export en format Solid/Surface Geometry
Set swModel = swApp.ActiveDoc
swModel.Extension.SaveAs GetFilename(swModel.GetPathName) & ".pdf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings 'Enregistrement en PDF
swModel.Extension.SaveAs GetFilename(swModel.GetPathName) & ".dwg", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings 'Enregistrement en DWG
Call ExportStep ' Appelle le programe d'export STEP
End Sub
Function GetFilename(strPath As String) As String
Dim strTemp As String
strTemp = Mid$(strPath, InStrRev(strPath, "\") + 1)
GetFilename = Left$(strTemp, InStrRev(strTemp, ".") - 1)
End Function
Sub ExportStep() ' Vérification si c'est une piece ou un assemblage
Set swDraw = swModel
vSheetName = swDraw.GetSheetNames
vSheetNameArr = swDraw.GetSheetNames
For Each vSheetName In vSheetNameArr
bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
Set swView = swDraw.GetFirstView 'Sélectionne le fond de plan
Set swView = swView.GetNextView 'Passe à la vue suivante pour exclure le fond de plan
While Not swView Is Nothing
' Determine si la vue est une pieces ou un assemblage
sModelName = swView.GetReferencedModelName
sModelName = LCase(sModelName)
sConfigName = swView.ReferencedConfiguration
FileConnu = False
If InStr(sModelName, "sldprt") > 0 Then
nDocType = swDocPART
ElseIf InStr(sModelName, "slasm") > 0 Then
nDocType = swDocASSEMBLY
Else
nDocType = swDocNONE
Exit Sub
End If
If nDocType = 1 Then
For I = 1 To nbConnu
If UCase(sModelName) & " - " & UCase(sConfigName) = TabConnu(I) Then
FileConnu = True
End If
Next
If Not FileConnu Then
nbConnu = nbConnu + 1
TabConnu(nbConnu) = UCase(sModelName) & " - " & UCase(sConfigName)
Call Export
End If
End If
Set swView = swView.GetNextView
Wend
Next vSheetName
End Sub
Sub Export()
Set swModel = swApp.ActivateDoc3(sModelName, True, swOpenDocOptions_Silent, lErrors)
Set swModel = swApp.ActiveDoc
boolstatus = swModel.ShowConfiguration2(sConfigName)
Set swConfig = swModel.GetActiveConfiguration
sPathName = swModel.GetPathName & ".step"
If Dir(sPathName, vbHidden) <> "" Then 'Test l'existence du fichier
suppr = MsgBox("Le fichier " & sPathName & " existe déjà, voulez vous le supprimer?", vbYesNo) 'Message utilisateur confirmation de suppression oui/non
If suppr = vbYes Then 'Réponse Oui
Kill (sPathName) 'Suppression du fichier existant
swModel.SaveAs2 sPathName, 0, True, False 'Enregistrement du fichier
op = MsgBox("Le fichier a été enregistré sous " & sPathName & vbNewLine)
Else 'Réponse NON
MsgBox ("Fichier conservé") 'Message utilisateur
End If
Else
swModel.SaveAs2 sPathName, 0, True, False 'Enregistrement du fichier
op = MsgBox("Le fichier a été enregistré sous " & sPathName) 'Message utilisateur
End If
swApp.CloseDoc (sModelName)
Set swModel = swApp.ActiveDoc
End Sub
Spróbuj zidentyfikować pliki, na których makro nie działa (zwłaszcza jeśli są zawsze takie same):
Kilka dróg:
Obraz 3D i układ nie znajdują się w tym samym katalogu.
3D i blueprint nie mają dokładnie tej samej nazwy.
Jedna z właściwości, których szuka makro, nie istnieje.
Pliki docelowe (pdf/dwg i/lub STEP) są już otwarte lub tylko do odczytu...
Nazwy plików i/lub katalogów zawierają znaki specjalne (akcenty, kropki,...)
Uważaj również, makra są wrażliwe na PRZERWY... tj. (podsumowując) rozróżniają małe i wielkie litery), dotyczy to nazw plików, ale także rozszerzeń.
…
idealnym rozwiązaniem jest przeglądanie makra w trybach krok po kroku (F8), z widocznym oknem zmiennych lokalnych,
i ewentualnie najedź myszką na zmienne w wierszach kodu, aby sprawdzić, czy pobierają żądane od nich dane.
(szczególnie w węźle "debug" na punktach przerwania...
Pytanie pomocnicze, jak rozpocząć realizację makro? przycisk w solidworks lub za pomocą odtwarzania bezpośrednio w edytorze VBA? Czy zawsze zaczynasz makro od rutyny "Głównej"?
Pozdrowienia.
Cóż, szukałem, ale brakowało mi wielu rzeczy, między innymi do tworzenia podfolderów.
@Antoine_Ruelle , przetestowałeś kod zaproponowany przez @sbadenis (4. odpowiedź), który moim zdaniem był całkowicie funkcjonalny?
Tak i pominąłem wiadomość, ale kiedy pytam, czy to działa, odpowiadasz mi poprzednim makrem z poprawkami.
Weź najnowszą wersję, jak wskazano w @Cyril_f i @Maclane i powinna działać.
Z drugiej strony, nie masz pewności, czy kod jest zoptymalizowany, robi się to w pośpiechu od tego z @Cyril_f .
Zawsze testowałem na tym samym pliku. rysunek czapki.
Rysunek znajduje się w innym folderze niż części, ale pliki mają tę samą nazwę.
Przyjrzałem się już kodowi, robiąc to krok po kroku, a ponieważ nie znam się na nim zbyt wiele, nie wiem, jak poprawnie zidentyfikować problemy.
Aby uruchomić makro, zrobiłem przycisk i próbowałem również z odtwarzania.
Tak dla podfolderów, na razie nic nie zrobiłem, tylko wkleiłem 3 zmienne do zdefiniowania.
Ponieważ staram się, aby kod działał za każdym razem. Wziąłem podstawowy kod bez wprowadzania żadnych zmian, z wyjątkiem usunięcia poprawki w nazwie pliku.
Raz zadziałało, usunąłem wygenerowane pliki i uruchomiłem od nowa i tam pojawił się błąd poniżej
I nie, nie testowałem jeszcze kodu 4. odpowiedzi @Cyril_f
Właśnie znalazłem błąd, mój przycisk do uruchamiania makra był źle skonfigurowany, działa dobrze
Dobra wiadomość.
Wszystko, co pozostaje, to zatwierdzić " Najlepszą odpowiedź ", aby zamknąć tę dyskusję.
I do zobaczenia wkrótce, aby zobaczyć nowe makra...
W międzyczasie radzę zajrzeć na różne strony (nie zawsze po francusku -Visual Basic- zobowiązuje), ale często dydaktyczne, aby rozpocząć naukę programowania:
…
Pozdrowienia.
A także uruchomić makra z edytora, aby uruchomić właściwy!
A kiedy to zadziała, możesz utworzyć przycisk.
Tak, z drugiej strony nie mam jeszcze części kodu, która pozwala mi przechowywać pliki w podfolderach