Maakt een tweede Solidworks-instantie in vba

Hallo, ik moet een code uitvoeren vanuit Excel en ik zou graag willen dat deze code wordt uitgevoerd op een solidworks-sessie die de gebruiker niet kan zien en vooral dat als een solidworks-sessie al open is voordat deze deze niet aanraakt en dat de gebruiker er nog steeds aan kan werken, de uitvoeringstijd van de code

 

op dit moment gebruik ik deze code om Solidworks te openen, maar er wordt geen nieuwe instantie geopend

    Dim swApp As SldWorks.SldWorks
    Set swApp = CreateObject("SldWorks.Application")

 

Heeft iemand het geval gehad dat ik de enige ben met deze behoefte?

Hallo

Het is niet per se aan te raden om meerdere Solidworks-sessies op dezelfde pc te openen, dit kan leiden tot conflicten, te beginnen met het bericht dat verschijnt bij het starten van een 2e sessie:

Vriendelijke groeten

Hallo

Ik gebruik de standaard PDM, het start een instantie van SW voor het automatisch maken van PDF's van gevalideerde tekeningen.
Er kan enige nuttige informatie over deze kant zijn (zie bij Visiativ)

2 likes

Hallo

 

d.roger het is al een aantal jaren dat we allemaal met verschillende exemplaren van Solidworks hebben gedraaid gezien de set die we hebben zonder een bepaald probleem te veroorzaken

 

Todesco , helaas, Visiativ bewaart deze geheimen goed ^^

1 like

Hallo

Als Solidworks niet wordt gestart, dan maak je met de functie "CreateObject" een nieuw object aan, anders houd je vast aan het object dat wel is gestart. U zou in staat moeten zijn om de functie "Shellexecute" te gebruiken om een nieuw exemplaar van het programma te starten.

Vriendelijke groeten

Hallo d.roger,

 

Het is inderdaad op dit spoor dat ik op dit moment vastloop, geen probleem om een nieuwe instantie met shell te starten, maar aan de andere kant om mezelf aan deze te hechten en niet aan de eerste instantie die is gemaakt, is het een ander verhaal  :/

Hallo

Dit andere verhaal is al geschreven, maar in C#, laten we eens kijken of het mogelijk is om dit allemaal te vertalen naar vba en dat is waar het misschien grappig is, kijk naar het gevalideerde antwoord dat hier is, en dan voor het bericht  over het logbestand bij het openen van de tweede instantie moet je HIER kijken. En, nog steeds in C#, als je het begin van de tweede instantie van Solidworks niet wilt zien,  dan moet je "StartInfo.Arguments = "-m"" in de eigenschappen zetten om door te geven aan de "Start"-methode van de instantie van de "Process"-klasse.

Ik heb getest (in C#), behalve het logbestandbericht, en het werkt redelijk goed ...

[BEWERKEN]

Na het testen werkt de voorgestelde oplossing voor het logbestand bericht ook erg goed. Je hoeft dus alleen maar de 2 voorgestelde links van de vertaling van C# naar VBA te doen en de wijziging om het opstarten en het venster van dit nieuwe exemplaar van Solidworks onzichtbaar te maken. En natuurlijk moet je nadenken over het vrijmaken van alle bronnen en het sluiten van dit exemplaar van Solidworks aan het einde van je macro, anders blijft het proces draaien.

[EINDE BEWERKEN]

Vriendelijke groeten

3 likes

Bedankt voor deze volledige feedback d.roger Ik hoef alleen maar alles om te zetten naar VB en dat ik de C # begrijp door de manier waarop ik de VB-code posten zodra deze is geconverteerd voor degenen die mogelijk geïnteresseerd zijn

Hallo

Ik heb een SolidWorks-macro (niet van Excel) en ik heb de mogelijkheid om een andere instantie te openen door rechtstreeks naar de installatiemap te gaan met:

Shell "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\SLDWORKS.exe"

 

Het is aan jou om te zien of je het kunt aanpassen aan je behoeften

 Hallo rpicard

 

Het werkt inderdaad goed, ik was in het begin op deze weg gegaan , het probleem is dat ik me niet kon hechten aan de nieuw gemaakte instantie en niet aan de eerste instantie.

 

Maar ik blijf :)

Hallo

Ja, er zijn verschillende manieren om een tweede exemplaar van Solidworks te starten:

Dim objShell As Object
Set objShell = CreateObject("shell.application")
objShell.ShellExecute "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\SLDWORKS.exe", "", "", "open", vbNormalFocus
Set objShell = Nothing

Of:

Shell "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\SLDWORKS.exe", vbNormalFocus

Maar de primaire zorg is om dit tweede exemplaar van Solidworks aan te sluiten en te beheren zonder de gebruiker te storen die aan het eerste exemplaar van Solidworks werkt. Ik zie echter het tweede probleem aankomen, namelijk dat als de gebruiker een Solidworks-bestand opent door erop te dubbelklikken, het bestand in dit tweede exemplaar van Solidworks wordt geopend in plaats van in eerste instantie.

Vriendelijke groeten