Otwieranie i odświeżanie rodziny artykułów za pomocą makra

Witam

Mam makro, które wymaga wymiaru. Następnie chcę automatycznie otworzyć moją rodzinę części i zaktualizować wartości za pomocą tego wymiaru.

Czy wiesz, jak otworzyć rodzinę części i zmienić zawartość komórki za pomocą wartości?

Dziękujemy za Twoją opinię

1 polubienie

Witam

Dzięki tym dwóm linkom do pomocy API myślę, że znajdziesz rozwiązanie.

http://help.solidworks.com/2020/english/api/sldworksapi/get_or_set_whether_edits_update_design_table_example_vb.htm

http://help.solidworks.com/2020/english/api/sldworksapi/get_design_table_example_vb.htm

Z drugiego linku wystarczy dodać polecenie, takie jak swDesTable.SetEntryValue, które jest przeznaczone dla kolumny i wiersza, które mają zostać zmodyfikowane.

1 polubienie

Witaj Cyryl

Dziękuję bardzo. Makro 1 doskonale nadaje się do sprawdzania, czy rodzina części istnieje.

Użyłem kodu z makra 2 do otwarcia rodziny pomieszczeń. Plik Excell  otwiera się dobrze, wskazane wartości są poprawne, ale 3D nie jest aktualizowany. Aktualizuje się ponownie, jeśli ponownie otworzę rodzinę części.

 

Oto kod makra 2, który wskazałem:

 

Ustaw swDesTable = swModel.GetDesignTable
bRet = swDesTable.Dołącz
Debug.Assert bRet
swDesTable.Detach
Part.ForceRebuild

Przyznam, że nie do końca rozumiem, po co są te linie.... Jeśli wiesz, jestem zainteresowany informacjami

Czy mógłbyś mi powiedzieć, jak wymusić rekonstrukcję bez konieczności wracania do instrukcji obsługi w rodzinie części?

Z góry wielkie podziękowania

Witam

We fragmencie kodu, który podajesz, otrzymasz tabelę obiektu "swModel", ale prosisz o rekonstrukcję obiektu "Part", spróbuj wpisać "swModel.ForceRebuild" zamiast "Part.ForceRebuild".

Pozdrowienia

1 polubienie

Witam

Dla swDesTable.Detach przyznaję, że nie wiem dokładnie, do czego to służy, ale w pomocy: Odłącz tabelę projektu od arkusza Microsoft Excel.

W przypadku wnioskowanego zastosowania nie sądzę, aby było to konieczne.

Z drugiej strony swDesTable.Attach służy do aktywacji tabeli.

Debug.assert jest warunkowym punktem przerwania, jeśli nie popełnię błędu, jeśli wartość logiczna bret jest fałszywa, makro zatrzymuje się w tym wierszu (w zasadzie, jeśli tabela się nie otwiera).

Aby zaktualizować szablon, należy użyć swDesTable.UpdateTable 2, True

Więcej informacji na temat metody: 

Elementy interfejsu IDesignTable - 2020 - Pomoc SOLIDWORKS API

Wyliczenie swDesignTableUpdateOptions_e - 2020 - Pomoc SOLIDWORKS API

1 polubienie

Dziękuję wam obojgu za odpowiedzi. To działa. Nadal mam aplikację excell (chyba ze względu na rodzinę części), która pozostaje otwarta. Czy dałoby się go zamknąć i wrócić do 3D na końcu makra? Z góry dziękujemy za Twoją opinię

Normalnie linia swDesTable.UpdateTable 2, True zamyka rodzinę części, a zatem teoretycznie przewyższa.

 

Potwierdzam, że ta funkcja zamyka plik rodziny części, ale nie aplikację Excel...

 

W makrze musi znajdować się coś jeszcze, co blokuje zamknięcie programu Excel. Ze swojej strony mam Excela, który znika z aktywnych procesów, gdy tylko makro się zakończy (ale mam tylko fragment kodu, który otwiera tabelę, aktualizuje wartość, zamyka tabelę i aktualizuje 3D).

Wymagałoby to pełnego kodu, aby sprawdzić, czy istnieje inna funkcja, która blokuje.

1 polubienie

Oto linie...

Zrobiłem mix z przesłanymi modelami....

Dziękujemy za Twoją wiedzę!

Dim swApp As Object

Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Ustaw swApp = Application.SldWorks

Ustaw część = swApp.ActiveDoc
Przyciemnij myModelView jako obiekt
Ustaw myModelView = Part.ActiveView

myModelView.FrameState = swWindowState_e.swWindowMaximized


'-----------------------------------
' Warunki wstępne:
' 1. Otwórz dokument części, który zawiera tabelę konfiguracji.
' 2. Sprawdź, czy dokument części zawiera projekt
   ' tabeli, rozwijając pole Tabele w menedżerze konfiguracji.
' 3. Otwórz okno bezpośrednie.
'
' Warunki końcowe:
' 1. Pobiera, czy tabela konfiguracji jest możliwa do aktualizacji przed
   ' uruchamiając makro.
' 2. Ustawia tabelę konfiguracji tak, aby nie można jej było aktualizować, jeśli jest
   ' aktualizowalny lub na odwrót.
' 3. Przyjrzyj się oknu bezpośredniemu.
'-----------------------------------
Opcja jawna
'Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDesignTable jako SldWorks.DesignTable
Dim boolstatus As Boolean
Dim laststate As Variant
 Dim swDesTable              jako SldWorks.DesignTable
 Przyciemniona podwójna wysokość
 
 

    Ustaw swApp = Application.SldWorks
    Ustaw swModel = swApp.ActiveDoc
    Ustaw swDesignTable = swModel.GetDesignTable()
    ' Zezwalaj na zmiany w charakterystyce
    ' tabela projektowa
    swDesignTable.EditFeature
    ' Sprawdza, czy tabela konfiguracji jest aktualizowalna
    laststate = swDesignTable.Updatable
    Debug.Print "Tabela projektowa aktualizowalna: " & CStr(laststate)
    ' Jeśli tabela konfiguracji jest aktualizowalna, ustaw ją
    ' na brak możliwości aktualizacji lub odwrotnie
    swDesignTable.Updatable = Nie ostatni stan
    ' Zaktualizuj tę charakterystykę tabeli konfiguracji
    boolstatus = swDesignTable.UpdateFeature()
    ' Sprawdza, czy tabela konfiguracji jest aktualizowalna
    laststate = swDesignTable.Updatable
    Debug.Print "Tabela projektowa aktualizowalna: " & CStr(laststate)

Height = InputBox("Proszę wskazać wysokość przenośnika.... ")
'swModel.GetEquationMgr.Value("Wysokość") = Wysokość
    Ustaw swDesTable = swModel.GetDesignTable
    bRet = swDesTable.Dołącz
    
'Debug.Assert bRet           'punkt przerwania, jeśli tabela nie otwiera się, jeśli bret ma wartość false   
    swDesTable.UpdateTable 2, prawda
    swDesTable.Detach
    swModel.ForceRebuild        ', aby przebudować obiekt Part.ForceRebuild
    
   Ustaw swApp = Application.SldWorks
   
  
Koniec subwoofera
 

Witam

To samo dla mnie, Excel zamyka się dobrze i znika z listy procesów na końcu makra, ale jest krótki okres czasu, zanim to zostanie zrobione, przedział czasowy, który jest krótszy przez usunięcie ostatniego wiersza "Set swApp = Application.SldWorks", który jest bezużyteczny, ponieważ ta zmienna swApp jest już zdefiniowana na początku makra.

Zauważyłem już, że czasami proces Excela ma problemy z zamknięciem podczas pisania makr i że często przechodzimy w tryb debugowania, zwłaszcza gdy makro zawiesza się podczas wykonywania...

Pozdrowienia

Dziękuję Roger. Czy masz przynajmniej jedną sztuczkę, aby wyświetlić aktywne okno Solidworks, ponieważ mam to cholerne okno Excela, które przejmuje kontrolę.... Chciałbym po prostu zakończyć moje makro, wyświetlając okno Sldworks... Dziękuję

Na kodzie nie widzę nic szczególnego, ze swojej strony nadal nie mam śladu Excela na końcu makra.

Aby umieścić SW z powrotem na pierwszym planie, o ile się nie mylę, jest to

bret = swapp.visible

Po samym problemie, albo jest to awaria programu Excel, albo jest to błąd w wersji Solidworks.

Czy rodzina pokoi jest otwarta w innym oknie, czy jest otwarta w SW?

Innym nieco barbarzyńskim rozwiązaniem są polecenia powłoki, które zabijają proces Excela:

Shell "taskkill /f /im excel.exe", vbHide

 

W przeciwnym razie inny pomysł, może to wynikać z automatycznej aktualizacji tabeli podczas otwierania, może SW czeka na coś w tle (okno, które przełączyłoby się na tło) i nagle blokuje zamknięcie Excela.

Powinieneś przetestować kod z dezaktywacją automatycznej aktualizacji tabeli, z pamięci znajduje się on w jednym z dwóch kodów pomocy mojej pierwszej odpowiedzi.

1 polubienie

Witaj Cyrylu,

Spróbowałem 1. opcji... To nie zadziałało. Tak więc wypróbowałem 2. i działa idealnie

Wielkie podziękowania dla Ciebie

Miłego tygodnia

Witam
przekopywanie tematu,
Postaram się postawić sprawę jasno.
To makro działa świetnie, z wyjątkiem tego, że...
1- Modyfikacja szkicu
2- Uruchamiam makro (które idzie dobrze), ale na końcu blokuje wszystkie wymiary szkiców, więc od czasu SW nie jest już możliwe modyfikowanie wartości.
3- Ponownie uruchamiam makro i tam mam dostęp do ponownego modyfikowania szkiców z SW.
Reasumując, jeśli uruchamiam makro po modyfikacji szkicu, to muszę uruchomić je po raz drugi, aby móc ponownie zmodyfikować wartość.
Bez względu na to, jak bardzo majsterkuję, nie znajduję dlaczego.
jeśli ktoś może mnie oświecić.
Niech moc będzie z wami.

1 polubienie

Witam
Nie jestem pewien, czy dobrze zrozumiałem problem.
Mogę być w szkicu lub edytować bezpośrednio, klikając dwukrotnie funkcję, ale nie mam żadnej blokady wymiarów.
Z drugiej strony, ponieważ mamy do czynienia z silną przebudową, nieuchronnie znajdujemy się poza szkicem.

Witam
Oto film instruktażowy.
Wyjaśniam, co się dzieje.
1-Widzisz, że mogę dowolnie modyfikować wartość.
2-Uruchamiam makro, aby zaktualizować część
3- Chcę ponownie zmodyfikować tę samą wartość, ale nie można jej zmodyfikować
4-Ponownie uruchamiam makro i tam znowu mam dostęp do edycji.
Dlaczego muszę ponownie uruchomić makro, aby mieć dostęp do edycji???
Niech Moc będzie z tobą

Witam
Po prostu zrozumiałem.
W rzeczywistości musisz usunąć tę część kodu, która zmienia zachowanie aktualizacji tabeli.

    Set swDesignTable = swModel.GetDesignTable()
    ' Allow changes to the characteristics of the
    ' design table
    swDesignTable.EditFeature
    ' Get whether design table is updatable
    laststate = swDesignTable.Updatable
    Debug.Print "Design table updatable: " & CStr(laststate)
    ' If design table is updatable, then set it
    ' to not updatable or vice versa
    swDesignTable.Updatable = Not laststate
    ' Update this characteristic of the design table
    boolstatus = swDesignTable.UpdateFeature()
    ' Get whether design table is updatable
    laststate = swDesignTable.Updatable
    Debug.Print "Design table updatable: " & CStr(laststate)

Przełącza się z opcji "Zezwalaj na aktualizowanie rodziny części przez zmiany modelu" na "Nie zezwalaj na zmiany modelu, które mogłyby zaktualizować rodzinę części".
Tak więc za pierwszym razem przełącza się w drugi tryb, przy drugim uruchomieniu robi odwrotnie.

2 polubienia

@Cyril_f
Jesteś mistrzem, moim mistrzem.
To nikel wielkie podziękowania za to skuteczne rozwiązanie.
Niech Moc będzie z wami.

2 polubienia