Het openen en verversen van de deelfamilie via een macro

Hallo

Ik heb een macro die een dimensie vereist. Ik wil dan automatisch mijn deelfamilie openen en de waarden met deze dimensie bijwerken.

Zou u weten hoe u een deelfamilie kunt openen en de inhoud van een cel met een waarde kunt wijzigen?

Bedankt voor je feedback

1 like

Hallo

Met deze twee links naar API-hulp denk ik dat je de oplossing zult vinden.

http://help.solidworks.com/2020/english/api/sldworksapi/get_or_set_whether_edits_update_design_table_example_vb.htm

http://help.solidworks.com/2020/english/api/sldworksapi/get_design_table_example_vb.htm

Vanaf de tweede link hoeft u alleen maar een opdracht toe te voegen, zoals swDesTable.SetEntryValue die de kolom en de rij heeft gericht die moeten worden gewijzigd.

1 like

Hallo Cyril

Hartelijk dank. Macro 1 is geweldig om te verifiëren dat de deelfamilie bestaat.

Ik heb de code van macro 2 gebruikt om de kamerfamilie te openen. Het Excell-bestand  opent goed, de aangegeven waarden zijn correct maar de 3D wordt niet bijgewerkt. Het wordt opnieuw bijgewerkt als ik de deelfamilie opnieuw open.

 

Hier is de code van macro 2 die ik heb aangegeven:

 

Stel swDesTable in = swModel.GetDesignTable
bRet = swDesTable.Attach
Debug.Assert bRet
swDesTable.Loskoppelen
Deel.ForceHerbouwen

Ik geef toe dat ik niet echt begrijp waar deze regels voor zijn.... Als je het weet, ben ik geïnteresseerd in de info

Kunt u mij vertellen hoe ik de reconstructie kan forceren zonder terug te hoeven gaan naar de handleiding in de familie van onderdelen?

Bij voorbaat een grote dank

Hallo

In het stukje code dat je geeft krijg je de tabel van het object "swModel", maar je vraagt om een reconstructie op het object "Part", probeer door "swModel.ForceRebuild" in te stellen in plaats van "Part.ForceRebuild".

Vriendelijke groeten

1 like

Hallo

Voor swDesTable.Detach geef ik toe dat ik niet precies weet waar het voor is, maar in de help: Maak de ontwerptabel los van het Microsoft Excel-blad.

In het geval van het gevraagde gebruik denk ik niet dat het nodig is.

swDesTable.Attach daarentegen wordt gebruikt om de tabel te activeren.

Debug.assert is een voorwaardelijk breekpunt als ik geen fout maak als de booleaanse bret onwaar is, stopt de macro op deze regel (in principe als de tabel niet opent).

Als u de sjabloon wilt bijwerken, moet u swDesTable 2, True gebruiken 

Voor meer info over de methode: 

Leden van de IDesignTable-interface - 2020 - SOLIDWORKS API Help

swDesignTableUpdateOptions_e Opsomming - 2020 - SOLIDWORKS API Help

1 like

Dank aan u beiden voor uw antwoorden. Het werkt. Ik heb nog steeds de excell applicatie (ik denk vanwege de familie van onderdelen) die open blijft. Zou het mogelijk zijn om het te sluiten en terug te keren naar de 3D aan het einde van de macro? Alvast bedankt voor uw feedback

Normaal gesproken sluit de regel swDesTable.UpdateTable 2, True de artikelfamilie af en dus Excel in theorie.

 

Ik bevestig dat deze functie het artikelfamiliebestand sluit, maar niet de Excel-toepassing...

 

Er moet iets anders in de macro zijn dat het sluiten van Excel blokkeert. Van mijn kant heb ik Excel dat uit de actieve processen verdwijnt zodra de macro eindigt (maar ik heb alleen een stukje code dat de tabel opent, een waarde bijwerkt, de tabel sluit en de 3D bijwerkt).

Er zou de volledige code nodig zijn om te zien of er een andere functie is die blokkeert.

1 like

Hier zijn de regels...

Ik heb een mix gemaakt met de verzonden modellen....

Bedankt voor je expertise!

Dim swApp als object

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

Sub hoofd()

Stel swApp = Toepassing.SldWorks in

Deel instellen = swApp.ActiveDoc
myModelView dimmen als object
Stel myModelView = Deel.ActiveView in

myModelView.FrameState = swWindowState_e.swWindowMaximized


'-----------------------------------
' Randvoorwaarden:
' 1. Open een deeldocument dat een ontwerptabel bevat.
' 2. Controleer of het onderdeeldocument een ontwerp bevat
   ' door Tabellen in de ConfigurationManager uit te vouwen.
' 3. Open het venster Onmiddellijk.
'
' Postvoorwaarden:
' 1. Geeft aan of de ontwerptabel eerder kan worden bijgewerkt
   ' de macro uit te voeren.
' 2. Hiermee stelt u de ontwerptabel in op niet bij te werken als dit het geval is
   ' kan worden geüpdatet of omgekeerd.
' 3. Bestudeer het venster Onmiddellijk.
'-----------------------------------
Expliciete optie
'Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim swDesignTable als SldWorks.DesignTable
Dim boolstatus als Booleaanse
Dim laststate als variant
 Dim swDesTable              als SldWorks.DesignTable
 Dim dubbele hoogte
 
 

    Stel swApp = Toepassing.SldWorks in
    Stel swModel = swApp.ActiveDoc in
    Stel swDesignTable in = swModel.GetDesignTable()
    " Wijzigingen in de kenmerken van de
    ' design tafel
    swDesignTable.EditFeature
    ' Krijg of de ontwerptafel kan worden bijgewerkt
    laststate = swDesignTable.Updatebaar
    Debug.Print "Tabel ontwerpen bijwerkend: " & CStr(laststate)
    ' Als de ontwerptabel kan worden bijgewerkt, stelt u deze in
    " niet te kunnen worden bijgewerkt of vice versa
    swDesignTable.Updatable = Niet laatste staat
    ' Update deze eigenschap van de ontwerptabel
    boolstatus = swDesignTable.UpdateFeature()
    ' Krijg of de ontwerptafel kan worden bijgewerkt
    laststate = swDesignTable.Updatebaar
    Debug.Print "Tabel ontwerpen bijwerkend: " & CStr(laststate)

Hoogte = InputBox ("Geef de hoogte van de transportband aan.... ")
'swModel.GetEquationMgr.Value("Hoogte") = Hoogte
    Stel swDesTable in = swModel.GetDesignTable
    bRet = swDesTable.Attach
    
'Debug.Assert bRet           'breekpunt als de tafel niet opent, als bret onwaar is   
    swDesTable.UpdateTabel 2, waar
    swDesTable.Loskoppelen
    swModel.ForceRebuild        ' om een onderdeel opnieuw op te bouwen.ForceRebuild
    
   Stel swApp = Toepassing.SldWorks in
   
  
Einde Sub
 

Hallo

Hetzelfde geldt voor mij, Excel sluit goed af en verdwijnt uit de lijst met processen aan het einde van de macro, maar er is een korte periode voordat dit is gedaan, een tijdsbestek dat korter is door de laatste regel "Set swApp = Application.SldWorks" te verwijderen, wat nutteloos is omdat deze swApp-variabele al aan het begin van uw macro is gedefinieerd.

Ik heb al gemerkt dat het Excel-proces soms moeite heeft met sluiten bij het schrijven van macro's en dat we vaak in de debug-modus gaan, vooral wanneer de macro vastloopt tijdens de uitvoering...

Vriendelijke groeten

Dank je wel Roger. Heb je ten minste één truc om het actieve Solidworks-venster weer te geven, want ik heb dit verdomde Excel-venster dat het overneemt.... Ik wil gewoon op zijn minst mijn macro af te maken door het Sldworks-venster weer te geven ... Bedankt

Op de code zie ik niets bijzonders, van mijn kant heb ik nog steeds geen spoor van Excel aan het einde van de macro.

Om SW weer op de voorgrond te zetten, tenzij ik me vergis, is het 

bret = swapp.visible

Na het probleem zelf, het is ofwel een crash van Excel of het is een bug in de Solidworks-versie.

Is de kamerfamilie open in een ander raam of is het open in SW?

Een andere enigszins barbaarse oplossing zijn de shell-commando's om het Excel-proces te doden:

Shell "taskkill /f /im excel.exe", vbHide

 

Anders een ander idee, het kan komen van de automatische update van de tabel bij het openen, misschien wacht SW op iets op de achtergrond (venster dat naar de achtergrond zou zijn overgeschakeld) en blokkeert plotseling de sluiting van Excel.

Je moet de code testen met de deactivering van de automatische update van de tabel, uit het geheugen zit het in een van de twee codes van de hulp van mijn eerste antwoord.

1 like

Hallo Cyril,

Ik heb de 1e optie geprobeerd... Het werkte niet. Dus ik heb de 2e geprobeerd en het werkt perfect

Een grote dank aan u

Fijne week

Hallo
het opgraven van het onderwerp,
Ik zal proberen duidelijk te zijn.
Deze macro werkt geweldig, behalve dat...
1- Ik wijzig een schets
2- Ik voer de macro uit (wat goed gaat), maar aan het einde vergrendelt het alle afmetingen van de schetsen, dus het is niet langer mogelijk sinds SW om een waarde te wijzigen.
3- Ik voer de macro opnieuw uit en daar heb ik toegang om de schetsen opnieuw vanuit SW te wijzigen.
Kortom, als ik de macro start nadat ik een schets heb gewijzigd, moet ik deze een tweede keer uitvoeren om een waarde opnieuw te kunnen wijzigen.
Hoeveel ik ook knutsel, ik vind niet waarom.
als iemand me kan verlichten.
Moge de kracht met je zijn.

1 like

Hallo
Ik weet niet zeker of ik het probleem goed heb begrepen.
Ik kan in een schets zijn of direct bewerken door op de functie te dubbelklikken, maar ik heb geen dimensievergrendeling.
Aan de andere kant, aangezien er een sterke verbouwing is, bevinden we ons onvermijdelijk uit de schets.

Hallo
Hier is een verklarende video.
Ik leg uit wat er aan de hand is.
1-Je kunt zien dat ik een waarde naar believen kan wijzigen.
2-Ik voer de macro uit om het onderdeel bij te werken
3- Ik wil dezelfde waarde opnieuw wijzigen, maar het is onmogelijk om deze te wijzigen
4-Ik voer de macro opnieuw uit en daar heb ik weer bewerkingsrechten.
Waarom moet ik de macro opnieuw uitvoeren om toegang te krijgen tot bewerken???
Moge de Kracht met je zijn

Hallo
Ik begreep het net.
In feite moet u dit deel van de code verwijderen dat het updategedrag van de tabel wijzigt.

    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)

Er wordt geschakeld tussen 'Toestaan dat onderdeelfamilie wordt bijgewerkt door modelwijzigingen' naar 'Modelwijzigingen niet toestaan die de onderdeelfamilie zouden bijwerken'.
Dus de eerste keer dat het overschakelt naar de tweede modus, doet het bij de tweede lancering het tegenovergestelde.

2 likes

@Cyril_f
Je bent een kampioen, mijn kampioen.
Het is nikkel een grote dank voor deze effectieve oplossing.
Moge de kracht met je zijn.

2 likes