Z drugiego linku wystarczy dodać polecenie, takie jak swDesTable.SetEntryValue, które jest przeznaczone dla kolumny i wiersza, które mają zostać zmodyfikowane.
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.
We fragmencie kodu, który podajesz, otrzymasz tabelę obiektu "swModel", ale prosisz o rekonstrukcję obiektu "Part", spróbuj wpisać "swModel.ForceRebuild" zamiast "Part.ForceRebuild".
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
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ę
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.
'----------------------------------- ' 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
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...
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.
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.
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.