Macro VBA - Separatore Decimale

Mithas

Utente Junior
professione: Disegnatore/Progettista
software: SolidWorks, AutoCAD, Inventor, DraftSight
regione: Veneto
Buon giorno a tutti.
Vi espongo un problema che mi sta facendo perdere un sacco di tempo.

Ho creato un modello parametrico in Solid che possa essere governato da una Macro in VBA tramite delle UserForm con delle caselle di testo da compilare. La macro funzione e fa il suo lavoro ma da dei problemi con i separatori decimali che proprio non li piaciono.

Nel sistema (Windows) è impostata la virgola come separatore, in Solid è impostato l'utilizzo del separatore di sistema, quindi la virgola. Nella Macro in VBA puoi scrivere valori decimali solo con il punto, la virgola da errore di compilazione.

Cambiando l'impostazione del sistema funziona tutto. Ovvero vede i decimali dopo il punto come fa VBA.
Davo quindi il mio problema risolto.

Al lavoro però, abbiamo un PDM esterno ed un gestionale che si incasinano con il punto. Esempio: ora ho delle boccole che pesano 600Kg e non 600g.

Avete qualche idea sul come fare? C'è un modo per dire a VBA, nella macro, di formattare i numeri spediti al modello con la virgola e non con il punto?
 

jenuary

Utente Senior
professione: Progettista e Programmatore VB.Net
software: Solidworks
regione: Veneto
Ciao,
è un problema comune (sinceramente io utilizzo il punto come separatore decimale di Windows).
Credo tu abbia più strade:
- Prova a cambiare il separatore decimale nelle impostazioni di SolidWorks (Vedi immagine allegata
- Nel caso questa non vada bene potresti utilizzare la funzione Replace covertendo in String il tuo Double e sostituendo il separatore decimale come vuoi e poi riconvertirlo in Double
- Se poi deve girare in pc diversi dove non è detto che il separatore decimale sia impostato uguale per tutti,
potresti cambiare il punto 1 da codice a seconda di quello che ti serve e poi reimpostarlo.

Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Set swApp = Application.SldWorks
'Ad inizio codice
swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swUseSystemSeparatorForDims, False
boolstatus = swApp.SetUserPreferenceStringValue(swUserPreferenceStringValue_e.swSeparatorCharacterForDims, ",")
'''' Il mio codice
''''
''''
'Poi a fine codice
swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swUseSystemSeparatorForDims, True
boolstatus = swApp.SetUserPreferenceStringValue(swUserPreferenceStringValue_e.swSeparatorCharacterForDims, ".")

End Sub


Prova il prima possibile, nel caso avessi bisogno io ci sono fino a domani, poi se Dio vuole me ne vado in ferie anch'io.


Cattura.PNG)
 

Mithas

Utente Junior
professione: Disegnatore/Progettista
software: SolidWorks, AutoCAD, Inventor, DraftSight
regione: Veneto
Ciao jenuary,

grazie mille per la risposta immediata.
Adesso provo i tuoi consigli e ti so dire.

Il problema credo sia nel passaggio di dati da VBA a Solid.

Uso l'equation manger per passare dei dati incapsulati dalle textbox tramite stringa tipo:

swEM = swModel.GetEquationMgr()
swEM.Equation(57) = """SPI1""=" & mSPI1

Se la variabile mSPI1 ha dei decimali, non riesce a scriverla.

La cosa che non riesco a capire è:

- nel gestione equazioni di Solid i valori hanno il punto
- all'interno del codice VBA i valori delle "librerie" memorrizzate a cui mi riferisco hanno il punto
- nelle textbox i valori sono visualizzati con le virgole

Infatti se provo a riscrivere nelle textbox i valori con il punto e passarli a Solid funziona tutto.
 

Mithas

Utente Junior
professione: Disegnatore/Progettista
software: SolidWorks, AutoCAD, Inventor, DraftSight
regione: Veneto
Fatto...

mSPI1 = Replace(mSPI1, ",", ".")

Essendo dei valori memorizzati come stringa che poi vengono passati al equation manager basta fargli rimpiazzare la virgola con il punto, prima della scrittura in Solid.

Sembra la soluzione migliore.

Grazie del consiglio. Avevo in mente qualcosa di più difficile.
 

jenuary

Utente Senior
professione: Progettista e Programmatore VB.Net
software: Solidworks
regione: Veneto
Ciao,
in realtà quando tu passi un numero proveniente da una textbox (quindi una stringa) dovresti passarla in questo modo se ha delle virgole:

Dim Numero_Decimale as Double
Numero_Decimale= textbox .value

Dove textbox è la casella dove hai scritto il numero
 

Mithas

Utente Junior
professione: Disegnatore/Progettista
software: SolidWorks, AutoCAD, Inventor, DraftSight
regione: Veneto
Non posso fare così a causa di come ho costruito il modello.

In pratica la macro funziona così:

-Legge i valori delle variabili globali del modello SW, con una funzione simile a quella che hai scritto tu ma collegata al valore dell'equazione globale.
-Assegna i valori alle textbox di nome appropriato e le fa vedere nella UserForm.
-Sostituisce le variabili globali di SW con quelle nuove, come scritto sopra.

Solid poi accetta solo valori stringa completi (formattati come sopra) come equazione globale.

Diciamo comunque che posso andare in vacanza contento adesso che son riuscito a farlo funzionare...

:)
 

Statistiche forum

Discussioni
59,354
Messaggi
506,859
Utenti registrati
111,696
Ultimo utente registrato
jcmc

Utenti online

Nessun utente è online al momento.
Top