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.
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:
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".
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
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
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.
'----------------------------------- ' 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
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...
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.
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.
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.