Zeilen/Spalten der SW Vba-Teilefamilie ein-/ausblenden

Hallo ihr alle

Um eine Tabelle in einer Zeichnung so anzuzeigen, wie ich es möchte, muss ich die Excel-Datei dort formatieren, wo sie sich befindet. Dies geschieht durch das Ausblenden und in einigen Fällen durch das Anzeigen von Spalten/Zeilen und ich würde es gerne automatisch per Makro tun, aber ich kann es nicht tun.

Ich habe ein Makro in Excel aufgenommen, um zu sehen, wie es aussehen kann:
Unternummer Cacher_ligne_colonne()
'
'Makro zum Ausblenden der Zeilen und Spalten, die ich möchte
    columns("B:E"). Auswählen
    Selection.EntireColumn.Hidden = Wahr
    Spalten ("I:K"). Auswählen
    Selection.EntireColumn.Hidden = Wahr
    Rows("35:36"). Auswählen
    Bereich ("A36"). Aktivieren
    Selection.EntireRow.Hidden = Wahr
    Rows("2:8"). Auswählen
    Bereich ("A8"). Aktivieren
    Selection.EntireRow.Hidden = Wahr
Ende Sub

Aber ich denke, unter SW ist es nicht dasselbe, vielleicht müssen Sie einfach irgendwo xlSW hinzufügen? 
Und indem die Manipulation unter SW gespeichert wird, wird nur die Bewegung des Fensters aufgezeichnet, nicht die "Maskierungs"-Aktion:

Dimmen swApp als Objekt

Teil als Objekt dimmen
Dim boolstatus als boolescher Wert
Dim longstatus As Long, longwarnings As Long

Sub main()

swApp = _ setzen
Anwendung.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Bauteilfamilie", "DESIGNTABLE", 0, 0, 0, Falsch, 0, Nichts, 0)
Part.InsertFamilyTableBearbeiten
myModelView als Objekt dimmen
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Part.ClearSelection2 Wahr
Part.CloseFamilyTable
Ende Sub

Danke für Ihre Hilfe!


 

Ich habe gesucht, aber immer noch keine Lösung, bitte jemand?

Hallo

Ich denke, du solltest deinen Tisch bereits mit dieser Methode öffnen: http://help.solidworks.com/2016/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDoc2~InsertFamilyTableEdit.html

Dann erstellen Sie ein Excel-Makro und rufen es aus SW auf.

1 „Gefällt mir“

Vielen Dank für Ihre Antwort, in der Tat öffne ich bereits meine Zimmerfamilie. Ich habe bereits einen gut entwickelten Code, um Konfigurationen über ein SW-Formular auszuwählen, daher verwende ich bereits diese Art von Syntax.

Da ich noch recht neu in der Vba-Programmierung bin, wusste ich nicht, dass es möglich ist, Excel-Makro* aus SW aufzurufen. Die Idee wäre, ein in Excel geschriebenes Makro zu erstellen, aber von SW aus aufzurufen, oder es würde die ganze Zeit laufen? 
Haben Sie ein Beispiel für Code, der eine Excel-Funktion aus SW stp aufruft?

Du hast dir die Antwort ganz alleine gegeben.

Um auf die Methoden und Eigenschaften einer Zelle, Zeile oder Spalte in Excel zuzugreifen, müssen Sie ein WorkSheet-Objekt verwenden. 

Rufen Sie in dem von Ihnen erstellten Makro das Blatt der Komponentenfamilie ab, und führen Sie dann die folgenden Schritte aus:

mysheet.column("Der Spaltenindex"). Versteckt= Wahr

1 „Gefällt mir“

Hallo ihr alle

Ich komme auf dieses Thema zurück, weil ich etwas recherchiert habe, aber ich stecke wieder fest. Ich habe einen Code geschrieben, der in Excel funktioniert, um alle Zeilen und Spalten in einer Tabelle anzuzeigen:

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

Dies funktioniert sehr gut mit dem Vba-Modul von Excel, aber sobald ich zu SW wechsle, habe ich einen Fehler in der ersten Zeile: 

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

Ich vermute, es liegt an der Syntax der "Find"-Funktion, dass es hängen bleibt, aber ich habe keine Hilfe gefunden, die bereits existiert, deshalb nehme ich mir die Freiheit, hier zu posten.

Danke für Ihre Hilfe.

 

Hallo

Haben Sie Ihrem Projekt einen Excel-Bezug hinzugefügt?

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

 

1 „Gefällt mir“

Übrigens, verwenden Sie das neue Code-Tag mit diesem Button:

Dies verleiht dem Code in den Nachrichten eine hohe Lesbarkeit.

Vielen Dank

1 „Gefällt mir“

Danke für den Trickcode  remrem Tag.
Und ja, ich habe die Excel-Referenz hinzugefügt:

Dann geben Sie uns Ihren vollständigen Code. Denn wir können nicht nach dem Fehler suchen, ohne zu sehen, wie Sie Ihre Variablen instanziieren...

Ich musste meinen Code kürzen, weil der Rest im Aufbau war, also höchstwahrscheinlich unverständlich für Sie, und ich habe die Anzahl von 2-3 Variablen geändert.

Vielen Dank 


code_lynkoa.txt

Wenn Sie eine Schritt-für-Schritt-Anleitung zum Debuggen durchführen.

Unterscheiden sich die Verfügbarkeiten xlWS und  xlWB von Nothing?

 

Nein, sie sind gleich Nichts.

Deshalb ist es dysfunktional!

Dies ist die Herausforderung bei der Wiederherstellung der Arbeitsmappe und der Excel-Tabelle, die gerade ausgeführt wird.

Redigieren:

Ich habe mehrere Wege ausprobiert, aber im Moment ohne überzeugende Ergebnisse....

Ich verstehe nicht wirklich, was du meinst, denn für mich bekomme ich bereits das aktive Blatt und die Arbeitsmappe, da ich darin schreibe. Dank meines Makros öffne ich die 3D-Datei, ich öffne die zugehörige Familie, ich schreibe die Wahl des Benutzers in eine Zelle, ich schließe die Familie, ich aktualisiere die Familie, ich baue neu auf und dort wird meine Konfiguration aktiviert. 

Und in diesem möchte ich Spalten entsprechend der Wahl des Benutzers ein- und ausblenden.

Ich habe gerade gesehen, dass xlWB  nutzlos ist.

Wenn Ihre xlWS-Variable nach dieser Zeile gleich Nothing ist:

Set xlWS = swDesignTable.EditTable2(False)

Dann bekommst du das Blatt nicht richtig hin.

Ja, es ist im Moment nutzlos, denn wie gesagt, mein Code befindet sich noch im Aufbau, also habe ich diese Variable für einen zukünftigen Zweck :) erstellt.

In der Tat habe ich gesehen, dass xlWS gleich Nichts ist, aber plötzlich sehe ich nicht, wie ich es machen soll.

Hallo

Nach ein wenig Recherche müssen Sie die Worksheet-Eigenschaft verwenden.

Wie in diesem Beispiel erwähnt.

Sie müssen also Folgendes tun:

Set xlWS = swDesignTable.Worksheet

Überprüfen Sie dann, was sich von Nothing unterscheidet:

If Not xlWS Is Nothing Then

End if