Macro om een assemblage te openen

Hallo

 

Ik probeer een macro te maken om een assemblage te openen. Ik werd geïnspireerd door het document dat door Dassault werd voorgesteld, maar ik kan het niet...

Ik krijg een Run Time Error type 13 (type komt niet overeen). Op het niveau van mijn lijn:

swModel = swApp.OpenDoc6(assemblyFile, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", fouten, waarschuwingen)

Ik ben het bijvoegen van mijn macro .... Kun je me vertellen wat ik verkeerd doe?

Bij voorbaat dank voor uw hulp

LSE

 

 

Sub hoofd()

Dim swModel als ModelDoc2
Dim swModelDocExt als ModelDocExtension
Zon swSelMgr Als SelectieMgr
Dim partFile als tekenreeks
AssemblyFile dimmen als tekenreeks
Tekening dimmenBestand als tekenreeks
Dim fouten als geheel getal
Waarschuwingen dimmen als geheel getal


Stel swApp = Toepassing.SldWorks in

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


' Open een assemblagedocument en selecteer alle componenten in de assemblage

assemblyFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\introsw\bolt-assembly.sldasm"
Stel swApp = CreateObject("SldWorks.Application") in
Stel swModel = swApp.GetOpenDocumentByName(assemblyFile) in

swModel = swApp.OpenDoc6(assemblyFile, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", fouten, waarschuwingen)
swModelDocExt = swModel.Extensie
swSelMgr = swModel.SelectionManager


Einde Sub

Verschillende fouten in uw macro:

geen aangifte voor swApp:

Dim swApp als SldWorks.SldWorks

Hetzelfde geldt voor een deel (u krijgt het actieve document, maar u stelt het niet bloot in het volgende)

Daarnaast zijn er nog andere fouten dan weet ik niet met welk model je bent begonnen, maar het is niet de schoonste.

Probeer dit en pas het later aan:

https://help.solidworks.com/2020/English/api/sldworksapi/Open_Assembly_Document_Example_VB.htm?verRedirect=1

1 like

Ik weet niet zeker of uw link de gemakkelijkste is.

De eenvoudige versie, solidworks, is open. Het opent het bestand dat u wilt (hard-written pad, PART-versie en niet SLDASM

Zie hier: https://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.ISldWorks~OpenDoc6.html

Optie Expliciete

Dim swApp als SldWorks.SldWorks
Dim doc als SldWorks.ModelDoc2
Dim fileerror zo lang
Dim filewarning zo lang

Sub hoofd()

    Stel swApp = Toepassing in. SldWorks (Nederlands)
    swApp.Visible = Waar
   

    ' Haal de huidige werkmap op voordat u het document opent
    Debug.Print "Huidige werkdirectory is " & swApp. GetCurrentWorkingDirectory (Engelstalig)
   

    Stel doc = swApp in. OpenDoc6("C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\api\chair.sldprt", swDocPART, swOpenDocOptions_Silent, "", fileerror, filewarning)

Einde Sub

2 likes

Ik heb voor deze versie gekozen omdat hij in de zijne de assemblages opende in gemaskerd (option_silent)

Maar inderdaad, de jouwe is eenvoudiger @mandragore .

Hallo

Ik heb de macro niet geprobeerd, maar op de opmerking: "Ik krijg een Run Time Error type 13 (typ mismatch)", zou het me niet verbazen als het komt van het typen van de variabelen "Dim errors As Integer" en "Dim warnings As Integer" die normaal gesproken "Long" zou moeten zijn. Natuurlijk moet u ook controleren of het bestand dat in de variabele "assemblyFile" is gedefinieerd, bestaat.

Voor de vraag "Kun je me vertellen wat ik verkeerd doe?" Ik zal niet bij mezelf stilstaan, want mijn aanstaande collega's Sbadenis en Mandrake zijn al begonnen te reageren... Maar ik ben het eens, of zelfs meer, met de opmerking "maar het is niet de schoonste" van Sbadenis.

Vriendelijke groeten

1 like

Hartelijk dank voor uw antwoorden en uw reactievermogen!

 Ik heb net de 2 voorstellen  getest, maar ik begrijp het niet omdat er niets gebeurt.

Ik krijg geen foutmelding meer, maar de gevraagde assemblage wordt niet geopend...

Heb je een idee...

Bedankt

 

Zorg er in beide gevallen voor dat de link naar een assembly verwijst. Anders opent het niets.

Ik nodig je uit om te vervangen door de link van een van je assemblages.

Als de mijne niet werkt, is het normaal, het is gespecificeerd 'Deel' en niet ASM. Ik heb het net herschreven met je variabele en mijn fout gecorrigeerd. 

 

Optie Expliciete

Dim swApp als SldWorks.SldWorks
Dim doc als SldWorks.ModelDoc2
Dim fileerror zo lang
Dim filewarning zo lang

AssemblyFile dimmen als tekenreeks

Sub hoofd()

    Stel swApp = Toepassing.SldWorks in
    swApp.Visible = Waar
   

assemblyFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\introsw\bolt-assembly.sldasm"

 

    Set doc = swApp.OpenDoc6(assemblyFile , 2, 1, "", fileerror, filewarning)

Einde Sub

 

daar zou het moeten werken, ik heb 'swDocPART' vervangen door 2 wat overeenkomt met 'swDocASSEMBLY'

Hallo jullie 2, 

Het werkt. Hartelijk dank.

Het systeem aanvaardt de opening van een onafhankelijke vergadering, maar niet die van een vergadering die bestaat uit ...

Laat het me uitleggen

Ik ben in 130100 die bestaat uit 130101, 130102... 

Ik kan 110101 openen, maar niet 130101 jaar met de macro sinds 130100 ... Is dit normaal?

Dank u voor uw verlichting

In theorie is de assemblage al open, dus solidworks gaat deze niet heropenen.

 

Je moet met andere functies spelen denk ik, zet je 130101 verlichten en activeer je macro, kijken of het gaat oplossen.

 

 Het is informatica, software kan heel 'dom' zijn. Er zijn veel verschillende functies voor elke functie, ik zag een '

swApp. CreateNewWindow' die u zeker kan helpen dwong de software om uw 130101 in een nieuw venster te openen.

 

Daarna hebben we veel mensen die hier api doen als je ons wat meer informeert over wat je wilt doen en waarom iemand het al kan doen of we kunnen je sneller begeleiden.

Uh... Ik ben helemaal geen specialist...

dus, wat moeten we gebruiken in plaats van  "Set doc = swApp.OpenDoc6  .... "?

Als je subassemblage al open is in SW, dan moet je de functie "ActivateDoc3" gebruiken om het te openen (in werkelijkheid is het activeren dat je moet zeggen omdat het al open is) in een nieuw SW-venster.

Vriendelijke groeten

1 like

@mandragore: Ik ben het niet helemaal eens met de opmerking "Het is informatica, software kan heel 'dom' zijn.   Er zijn veel verschillende functies voor elke functie", vind ik dat API's juist vrij logisch zijn. In dit geval is er een verschil tussen "open" en "activeren"...

Vriendelijke groeten

Ik heb net getest. Het werkt feilloos. Het was dus een kwestie van woordenschat. Nogmaals heel erg bedankt. Ik ga verder...