Rijen/kolommen van de SW Vba-deelfamilie verbergen/weergeven

Hoi allemaal

Om een tabel weer te geven zoals ik wil op een tekening, moet ik het Excel-bestand opmaken waar het zich bevindt. Dit gaat door het verbergen en in sommige gevallen het tonen van kolommen/rijen en ik zou het graag automatisch doen, dus via macro, maar ik kan het niet.

Ik heb een macro opgenomen in Excel om te zien hoe het eruit kan zien:
Sub Cacher_ligne_colonne()
'
'Macro om de rijen en kolommen te verbergen die ik wil
    Kolommen ("B:E"). Selecteren
    Selectie.GeheleKolom.Verborgen = Waar
    Kolommen ("I:K"). Selecteren
    Selectie.GeheleKolom.Verborgen = Waar
    Rijen ("35:36"). Selecteren
    Bereik ("A36"). Activeren
    Selectie.GeheleRij.Verborgen = Waar
    Rijen ("2:8"). Selecteren
    Bereik ("A8"). Activeren
    Selectie.GeheleRij.Verborgen = Waar
Einde Sub

Maar ik denk dat het onder SW niet hetzelfde is, misschien moet je gewoon ergens xlSW toevoegen? 
En door de manipulatie onder SW op te slaan, registreert het alleen de beweging van het venster, niet de "maskerende" actie:

Dim swApp als object

Deel dimmen als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long

Sub hoofd()

Stel swApp in = _
Toepassing.SldWorks

Deel instellen = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Onderdelen Familie", "DESIGNTABLE", 0, 0, 0, False, 0, Nothing, 0)
Deel.InsertFamilyTableEdit
myModelView dimmen als object
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Stel myModelView = Deel.ActiveView in
myModelView.FrameState = swWindowState_e.swWindowMaximized
Deel.ClearSelection2 Waar
Deel.CloseFamilyTable
Einde Sub

Bedankt voor je hulp!


 

Ik ben op zoek geweest, maar nog steeds geen oplossing, iemand alstublieft?

Hallo

Ik denk dat je je tafel al moet openen met deze methode: http://help.solidworks.com/2016/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDoc2~InsertFamilyTableEdit.html

Vervolgens maak je een Excel-macro en roep je deze aan vanuit SW.

1 like

Dank u voor uw antwoord, inderdaad ben ik al het openen van mijn kamer familie. Ik heb al een goed ontwikkelde code om configuraties te kiezen via een SW-formulier, dus ik gebruik al dit soort syntaxis.

Omdat ik vrij nieuw was in het programmeren van Vba, wist ik niet dat het mogelijk was om Excel-macro* aan te roepen vanuit SW. Het idee zou zijn om een macro te maken die in Excel is geschreven, maar vanuit SW te bellen of het zou de hele tijd draaien? 
Heeft u een voorbeeld van het code-aanroepen van een Excel-functie vanuit SW stp?

Je hebt jezelf het antwoord helemaal zelf gegeven.

Als u toegang wilt krijgen tot de methoden en eigenschappen van een cel, rij of kolom in Excel, moet u een werkbladobject gebruiken. 

In de macro die u hebt gemaakt, haalt u het blad van de onderdeelfamilie op en voert u het volgende uit:

mysheet.column("de kolomindex"). Verborgen= Waar

1 like

Hoi allemaal

Ik kom terug op dit onderwerp omdat ik wat onderzoek heb gedaan, maar ik zit weer vast. Ik heb een code geschreven die werkt in Excel om alle rijen en kolommen in een tabel weer te geven:

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

Dit werkt heel goed vanuit de Vba module van Excel maar zodra ik overstap naar SW heb ik een foutmelding van de eerste regel: 

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

Ik denk dat het in de syntaxis van de functie "Zoeken" zit dat het vastloopt, maar ik heb geen hulp gevonden die al bestaat, daarom neem ik de vrijheid om hier te posten.

Dank u voor uw hulp.

 

Hallo

Heeft u een Excel-referentie aan uw project toegevoegd?

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

 

1 like

Gebruik trouwens de nieuwe codetag met deze knop:

Dit geeft veel leesbaarheid aan de code in de berichten.

Bedankt

1 like

Bedankt voor de truc code remrem tag.
En ja, ik heb de Excel-referentie toegevoegd:

Geef ons dan je volledige code. Omdat we niet naar de fout kunnen zoeken zonder te zien hoe u uw variabelen instantiëert...

Ik moest mijn code inkorten omdat de rest in aanbouw was, dus hoogstwaarschijnlijk onbegrijpelijk voor je en ik veranderde het aantal van 2-3 variabelen.

Bedankt 


code_lynkoa.txt

Als u een stap-voor-stap foutopsporing uitvoert.

Zijn de beschikbare xlWS en  xlWB anders dan Nothing?

 

Nee, ze zijn gelijk aan Niets.

Daarom is het disfunctioneel!

Dit is de uitdaging van het herstellen van de werkmap en de Excel-sheet in wording.

Bewerken:

Ik heb verschillende wegen geprobeerd, maar op dit moment zonder overtuigende resultaten....

Ik begrijp niet echt wat je bedoelt, want voor mij krijg ik al het actieve blad en het werkboek omdat ik erin schrijf. Sterker nog, dankzij mijn macro open ik het 3D-bestand, open ik de bijbehorende familie, schrijf ik de keuze van de gebruiker in een cel, sluit ik de familie, werk ik de familie bij, bouw ik opnieuw op en daar wordt mijn configuratie geactiveerd. 

En hierin zou ik kolommen willen verbergen/tonen volgens de keuze van de gebruiker.

Ik zag net dat xlWB  nutteloos is.

Als je xlWS variabele gelijk is aan Niets na deze regel:

Set xlWS = swDesignTable.EditTable2(False)

Dan krijg je het laken niet goed op.

Ja, het is op dit moment nutteloos, want zoals ik al zei, mijn code is nog in aanbouw, dus ik heb deze variabele gemaakt voor een toekomstig doel :).

Inderdaad, ik zag dat xlWS gelijk was aan niets, maar plotseling zie ik niet meer hoe ik het moet doen.

Hallo

Na wat onderzoek moet u de eigenschap Werkblad gebruiken.

Zoals vermeld in dit voorbeeld.

Dus je moet doen:

Set xlWS = swDesignTable.Worksheet

En controleer dan wat anders is dan Niets:

If Not xlWS Is Nothing Then

End if