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
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.
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?
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.
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.
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.
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.