Ukrywanie/pokazywanie wierszy/kolumn rodziny części SW Vba

Cze wszystkim

Aby wyświetlić tabelę na rysunku tak, jak chcę, muszę sformatować plik programu Excel w miejscu, w którym się znajduje. Przechodzi to przez ukrywanie, aw niektórych przypadkach pokazywanie kolumn/wierszy i chciałbym to zrobić automatycznie, tak za pomocą makra, ale nie mogę tego zrobić.

Nagrałem makro w programie Excel, aby zobaczyć, jaki może mieć wygląd:
Sub Cacher_ligne_colonne()
'
'Makro do ukrywania żądanych wierszy i kolumn
    Kolumny("B:E"). Wybrać
    Selection.EntireColumn.Hidden = Prawda
    Kolumny("I:K"). Wybrać
    Selection.EntireColumn.Hidden = Prawda
    Wiersze("35:36"). Wybrać
    Zakres("A36"). Aktywować
    Selection.EntireRow.Hidden = Prawda
    Wiersze("2:8"). Wybrać
    Zakres("A8"). Aktywować
    Selection.EntireRow.Hidden = Prawda
Koniec subwoofera

Ale domyślam się, że pod SW to nie to samo, może po prostu trzeba gdzieś dodać xlSW?
A zapisując manipulację pod oprogramowaniem, rejestruje tylko ruch okna, a nie akcję "maskującą":

Dim swApp As Object

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

Sub main()

Ustaw swApp = _
Aplikacja.SldWorks

Ustaw część = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Rodzina części", "TABELA ZNAMIONOWA", 0, 0, 0, Fałsz, 0, Nic, 0)
Part.InsertFamilyTableEdit
Przyciemnij myModelView jako obiekt
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Part.ClearSelection2 Prawda
Part.CloseFamilyTable
Koniec subwoofera

Dziękuję za pomoc!


 

Szukałem, ale nadal nie ma rozwiązania, ktoś proszę?

Witam

Myślę, że powinieneś już otworzyć swój stół tą metodą: http://help.solidworks.com/2016/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDoc2~InsertFamilyTableEdit.html

Następnie tworzysz makro Excela i wywołujesz je z oprogramowania.

1 polubienie

Dziękuję za odpowiedź, rzeczywiście już otwieram moją rodzinę pokojową. Mam już dobrze opracowany kod do wybierania konfiguracji za pomocą formularza SW, więc już używam tego rodzaju składni.

Będąc całkiem nowym w programowaniu Vba, nie wiedziałem, że możliwe jest wywołanie makra Excela* z oprogramowania. Pomysł byłby taki, żeby zrobić makro napisane w Excelu, ale wywołane z SW czy to by działało cały czas? 
Czy masz przykład kodu wywołującego funkcję Excela z SW stp?

Sam udzieliłeś sobie odpowiedzi.

Aby uzyskać dostęp do metod i właściwości komórki, wiersza lub kolumny w programie Excel, musisz użyć obiektu Arkusz roboczy. 

W utworzonym makrze pobierz arkusz rodziny części, a następnie wykonaj następujące czynności:

mojaArkusz.kolumna("Indeks kolumny"). Ukryty = Prawda

1 polubienie

Cze wszystkim

Wracam do tego tematu, bo zrobiłem trochę researchu, ale znowu utknąłem. Napisałem kod, który działa w Excelu w celu wyświetlenia wszystkich wierszy i kolumn w tabeli:

Dim ShowAllLines As Integer
Dim ShowAllColumns As Integer
                 
ShowAllLines = Columns(1).Find("", after:=[A1]).Row
Range("A1:A" & ShowAllLines).Select
Selection.EntireRow.Hidden = False

ShowAllColumns = Rows(1).Find("", after:=[A1]).Column
Range("A1:" & Chr(64 + ShowAllColumns) & "1").Select
Selection.EntireColumn.Hidden = False

Działa to bardzo dobrze z modułu Vba Excela, ale jak tylko przełączę się na SW, mam błąd z pierwszej linii: 

Dim ShowAllLines As Integer
Dim ShowAllColumns As Integer
                 
ShowAllLines = xlWS.Columns(1).Find("", after:=[A1]).Row
xlWS.Range("A1:A" & ShowAllLines).Select
Selection.EntireRow.Hidden = False
                 
ShowAllColumns = xlWS.Rows(1).Find("", after:=[A1]).Column
xlWS.Range("A1:" & Chr(64 + ShowAllColumns) & "1").Select
Selection.EntireColumn.Hidden = False

Domyślam się, że to w składni funkcji "Znajdź" zacina się, ale nie znalazłem żadnej pomocy, która już istnieje, dlatego pozwalam sobie opublikować tutaj.

Dziękuję za pomoc.

 

Witam

Czy do projektu dodano odwołanie do programu Excel?

W przeciwnym razie: https://excel.developpez.com/faq/index.php?page=Automation#ActiverReference

 

1 polubienie

Nawiasem mówiąc, użyj nowego tagu kodu z tym przyciskiem:

Daje to dużą czytelność kodu w wiadomościach.

Dziękuję

1 polubienie

Dzięki za znacznik remrem kodu sztuczki .
I tak, dodałem odniesienie do Excela:

Następnie podaj nam swój pełny kod. Ponieważ nie możemy szukać błędu, nie widząc, w jaki sposób tworzysz instancje zmiennych...

Musiałem skrócić swój kod, ponieważ reszta była w budowie, więc najprawdopodobniej niezrozumiała dla Ciebie i zmieniłem liczbę 2-3 zmiennych.

Dziękuję 


code_lynkoa.txt

Jeśli wykonujesz debugowanie krok po kroku.

Czy vaiables xlWS i  xlWB różnią się od Nothing?

 

Nie, są one równe Nicości.

Dlatego jest dysfunkcyjny!

Jest to wyzwanie polegające na odzyskaniu skoroszytu i arkusza Excela w toku.

Redagować:

Próbowałem kilku sposobów, ale na razie bez przekonujących wyników....

Nie bardzo rozumiem, co masz na myśli, ponieważ dla mnie już dostaję aktywny arkusz i zeszyt ćwiczeń, odkąd w nim piszę. Tak naprawdę dzięki mojemu makrowi otwieram plik 3D, otwieram powiązaną rodzinę, wpisuję wybór użytkownika w komórce, zamykam rodzinę, aktualizuję rodzinę, odbudowuję i tam moja konfiguracja jest aktywowana. 

I w tym chciałbym ukryć/pokazać kolumny zgodnie z wyborem użytkownika.

Właśnie zobaczyłem, że xlWB  jest bezużyteczny.

Jeśli zmienna xlWS jest równa Nothing po tym wierszu:

Set xlWS = swDesignTable.EditTable2(False)

Wtedy nie otrzymasz prawidłowo arkusza.

Tak, w tej chwili jest to bezużyteczne, ponieważ, jak powiedziałem, mój kod jest nadal w budowie, więc stworzyłem tę zmienną na przyszły cel :).

Rzeczywiście, widziałem, że xlWS był równy Nic, ale nagle nie widzę, jak to zrobić.

Witam

Po odrobinie badań musisz użyć właściwości Arkusz roboczy.

Jak stwierdzono w tym przykładzie.

Więc musisz zrobić:

Set xlWS = swDesignTable.Worksheet

A potem sprawdź, co różni się od Nothing:

If Not xlWS Is Nothing Then

End if