Ik heb een klein probleem met het maken van een macro waarmee ik hoopte een globale variabele te gebruiken die was gedefinieerd toen het onderdeelbestand werd gemaakt. Mijn teleurstelling was groot. Ik voeg een beschrijving van het probleem bij dat in het bijgevoegde document wordt gevonden. pb macro.pdf (138,3 Kb) Ik probeerde te biasen zoals bij geparametriseerde curves, door eerst een schets te maken waarvan de dimensie de globale variabele als waarde had en vervolgens de macro te vragen deze dimensie te nemen. Ik kwam leeg aan.
Waarom een macro gebruiken? Dit doe ik via een formulier. Ik voer al mijn afmetingen in en het onderdeel genereert en wijzigt het dienovereenkomstig. Ik zal je een voorbeeld geven van een stuk als ik achter de computer zit.
Goedenavond ac_cobra _427, Dank u voor uw antwoord. Ik ben mij terdege bewust van uw voorstel, dat ik op grote schaal gebruik maak omdat het zeer relevant is. In mijn geval, als ik een macro wil, is dat omdat het me veel klikken zou besparen. Ik doe lasersnijden van multiplex. Dus ik heb een sjabloon (*.dot) met een multiplextextuur en een globale variabele die de dikte aangeeft. Ik teken mijn onderdelen om ze in dxf-formaat naar de snijtafel te sturen. Ik kon tevreden zijn met het maken van alleen de schetsen, maar om een globaal overzicht van het product te hebben en de assemblage (montage, kinetische simulatie, enz.) te garanderen, modelleer ik ze in 3D. Deze modellering is alleen gebaseerd op extrusies in het middenvlak, met de dikte als waarde, vandaar het belang dat het een globale variabele is en dus toegankelijk voor de vergelijkingen. Als ik deze extrusies met één klik zou kunnen doen, zou het voor mij comfortabeler zijn omdat het snel repetitief wordt. Dus ik zou graag een macro willen hebben met het pictogram dat ik in de functiebanner zal plaatsen, en hop klik klik het is voorbij.
Ik heb het waarschijnlijk verkeerd begrepen, maar als je een globale variabele hebt en de waarde 4 is in overeenstemming met de extrusiewaarde, waarom dan een globale variabele??
Als het doel is om deze diktewaarde later te kunnen wijzigen, is het sneller om de afmeting direct te wijzigen met: " klik op de extrusie in de as + klik op de afmeting + 4 + enter ", Om een variabele te wijzigen, moet u: " Open de vergelijkingen + klik op de variabele + 4 + voer in om de variabele te valideren + voer in of klik om het vergelijkingsvenster te valideren en te sluiten".
Een variabele kost 1 klik meer dan via de offerte.
Het probleem voor de macro is het feit dat je de extrusie niet kunt koppelen aan de diktevariabele buiten een plaatwerkfunctie. Misschien proberen door de waarde van de diktedimensie te krijgen en een tekst van het type " = Dikte " te plaatsen
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSketch As SldWorks.SketchManager
Dim swFeature As SldWorks.Feature
Dim swDimension As SldWorks.Dimension
Dim userInput As String
Dim newLength As Double
Dim newWidth As Double
Dim newHeight As Double
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "Aucune pièce ouverte.", vbExclamation, "Erreur"
Exit Sub
End If
' Demande les nouvelles dimensions
userInput = InputBox("Entrez la longueur (en mm) :", "Modification de la pièce")
If IsNumeric(userInput) Then newLength = CDbl(userInput) / 1000 Else Exit Sub
userInput = InputBox("Entrez la largeur (en mm) :", "Modification de la pièce")
If IsNumeric(userInput) Then newWidth = CDbl(userInput) / 1000 Else Exit Sub
userInput = InputBox("Entrez la hauteur (en mm) :", "Modification de la pièce")
If IsNumeric(userInput) Then newHeight = CDbl(userInput) / 1000 Else Exit Sub
' Sélection de l'esquisse "Esquisse1"
Set swFeature = swModel.FeatureByName("Esquisse1")
If swFeature Is Nothing Then
MsgBox "L'esquisse 'Esquisse1' n'a pas été trouvée.", vbExclamation, "Erreur"
Exit Sub
End If
swFeature.Select2 False, 0
swModel.EditSketch
' Mise à jour des dimensions
Set swDimension = swModel.Parameter("D1@Esquisse1")
If Not swDimension Is Nothing Then swDimension.SystemValue = newLength
Set swDimension = swModel.Parameter("D2@Esquisse1")
If Not swDimension Is Nothing Then swDimension.SystemValue = newWidth
Set swDimension = swModel.Parameter("D1@Boss.-Extru.1")
If Not swDimension Is Nothing Then swDimension.SystemValue = newHeight
' Validation de l'esquisse et mise à jour
swModel.EditRebuild3
swModel.SetSaveFlag
swModel.EditSketch
MsgBox "Dimensions mises à jour avec succès.", vbInformation, "Succès"
End Sub
Met de bijgevoegde macro, extrusie in twee muisklikken van een bestaande schets, door midplane en dikte beheerd door een globale variabele:
de eerste klik om de schets te selecteren;
de tweede om de macro uit te voeren (als er een knop bestaat).
De globale variabele wordt in de macro gedefinieerd door een constante met de naam " Thick ". Het moet natuurlijk wel in het document (of beter, in het sjabloon) staan. PRTDOT). De classificatie van de extrusiedikte verwijst wel naar de algemene variabele.
Opmerking: Pogingen om de notatie " Dikte " te gebruiken, resulteren in fouten in de vergelijkingsmanager. Misschien is het een woord dat is gereserveerd voor plaatwerk.
Ja, het heeft te maken met het plaatwerk, maar in " normaal " bedrijf wanneer u link naar dikte op een extrusiefunctie selecteert, wordt er nog steeds rekening gehouden met deze globale variabele. Aan de andere kant kan het niet worden gewijzigd, het kan alleen worden gewijzigd door een plaatwerkfunctie in te stellen. Vandaar, denk ik, het feit dat deze functie niet toegankelijk is via macro buiten een plaatwerk.
Dank aan jullie allemaal. Ik ga kijken naar de macro voorgesteld door ac_cobra_427. Ik werk veel met globale variabelen die worden aangestuurd door een extern bestand. Hierdoor kan ik een assemblage maken met N-onderdelen, allemaal lasergesneden in een multiplex van gangbare dikte, om alle overlappingen in één keer te wijzigen. Fijne dag