Macro per interagire con proprietà personalizzate (senza aprire i file)

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
Ciao a tutti.
Dovendo inserire e valorizzare una nuova proprità personalizzata in un numero considerevole di file ed avendo in Excel la lista dei file su cui intervenire e i corrispondenti valori da dare alla nuova proprietà, mi sono scritto una breve macro in vba per automatizzare il processo.

Codice:
Public Sub Scrivi_proprietà()

Dim objApp As SolidEdgeFramework.Application
Dim objDoc As SolidEdgeDocument
Dim docname As String
Dim valore As String
Dim wk As Workbook
Dim sh As Worksheet
Dim i As Integer

' identifica l'applicazione Solid Edge
Set objApp = GetObject(, "SolidEdge.Application")

' cicla per ciascuna riga del foglio excel corrente
For i = 2 To 5000 Step 1
         ' legge il nome file e la descrizione corrispondente
    docname = Foglio1.Cells(i, 1).Value
    valore = Foglio1.Cells(i, 2).Value
         ' apre il file in Solid Edge
    Set objDoc = objApp.Documents.Open(docname)
         ' aggiunge la proprietà personalizzata e la valorizza
    objDoc.Properties("Custom").Add "Nome_Nuova_Proprietà", valore
         ' chiude il file salvando
    Call objApp.Documents.CloseDocument(objDoc.FullName, True, objDoc.FullName, False, True)
Next

End Sub

Così funziona.
Però mi chiedevo se la stessa cosa potesse essere fatta anche non aprendo i file in Solid Edge. Sarebbe molto più veloce e si eviterebbero possibili impuntamenti credo.
Penso debba essere possibile (visto che le proprietà personalizzate sono visibili ed editabili anche dall'explorer di windows) perà non so come si fa.

Qualche idea?

Grazie.
Ape
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
Invece di collegarti a SolidEdge.Application puoi collegarti direttamente alle proprietà di un file (che non deve essere aperto in SolidEdge)

Codice:
Dim objPropertySets As SolidEdgeFileProperties.PropertySets = Nothing
Dim objProperties As SolidEdgeFileProperties.Properties = Nothing

objPropertySets = New SolidEdgeFileProperties.PropertySets
objPropertySets.Open(docname, False)
objProperties = objPropertySets.Item("Custom")
objProperties.Add "Nome nuova proprietà", valore
objPropertySets.Save()
objPropertySets.Close()
 

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
Ho provato il codice ma non funziona, Excel rileva alcuni errori di sintassi.
Le righe 1, 2, 4, 7 e 8 non le riconosce (le scrive in rosso).

La 1 e la 2 togliendo "= Nothing" sembra che vadano, ma le altre non so.
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
Ho fatto un misto di VBA e VB.NET

Ecco la versione VBA

Codice:
Sub main()

Dim objPropertySets As SolidEdgeFileProperties.PropertySets
Dim objProperties As SolidEdgeFileProperties.Properties

Set objPropertySets = New SolidEdgeFileProperties.PropertySets
Call objPropertySets.Open(docname, False)
Set objProperties = objPropertySets.Item("Custom")
Call objProperties.Add("Nome nuova proprietà", valore)
Call objPropertySets.Save
Call objPropertySets.Close

End Sub
 

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
Ho trasformato la macro come segue, ma non va.
Codice:
Sub Scrivi_proprietà_senza_aprire()

Dim docname As String
Dim descITA As String
Dim descENG As String
Dim descESP As String
Dim descFRA As String
Dim descDEU As String
Dim i As Integer
Dim objPropertySets As SolidEdgeFileProperties.PropertySets
Dim objProperties As SolidEdgeFileProperties.Properties

objPropertySets = New SolidEdgeFileProperties.PropertySets

' cicla per ciascuna riga del foglio excel corrente
For i = 2 To 4
    ' legge il nome file e le descrizioni corrispondenti
    docname = Foglio1.Cells(i, 1).Value
    descITA = Foglio1.Cells(i, 2).Value
    descENG = Foglio1.Cells(i, 3).Value
    descESP = Foglio1.Cells(i, 4).Value
    descFRA = Foglio1.Cells(i, 5).Value
    descDEU = Foglio1.Cells(i, 6).Value
    ' si collega alle proprietà personalizzate del file Solid Edge (senza aprirlo)
    Call objPropertySets.Open(docname, False)
    objProperties = objPropertySets.Item("Custom")
    ' aggiunge le proprietà personalizzata e le valorizza
    objProperties.Add "Descr. Ricambi ITA", descITA
    objProperties.Add "Descr. Ricambi ENG", descENG
    objProperties.Add "Descr. Ricambi ESP", descESP
    objProperties.Add "Descr. Ricambi FRA", descFRA
    objProperties.Add "Descr. Ricambi DEU", descDEU
    ' rilegge la proprietà appena aggiunta e la scrive sulla colonna 3 del foglio excel (per verifica in caso qualcosa non funzionasse)
    Foglio1.Cells(i, 7).Select
    Foglio1.Cells(i, 7).Value = objProperties.Item("Descr. Ricambi ITA").Value
    ' chiude il file salvando
    Call objPropertySets.Save
    Call objPropertySets.Close
Next

End Sub

Mi dice: Errore di compilazione: Utilizzo non valido di Property

L'errore è segnalato nella riga "
objPropertySets = New SolidEdgeFileProperties.PropertySets"
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
Manca "Set" davanti all'istruzione e temo manchino anche diversi "Call" nelle righe in cui vai a creare le proprietà.

Rivedi il mio codice.
 

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
Manca "Set" davanti all'istruzione e temo manchino anche diversi "Call" nelle righe in cui vai a creare le proprietà.

Rivedi il mio codice.

Scusami...
Evidentemente sono proprio rincoglionito o_O
....ero sicuro di aver fatto copia/incolla.

Ok, adesso va che è un amore
 

mark-gagnon

Utente Junior
Professione: disegnatore/progettista
Software: solid edge
Regione: lombardia
ciao, mi aggancio a questa discussione per chiedere se cè la possibilita di mofiifcare massivamente le proprieta di un file tipo densità/materiale/unita di misura.
mi spiego: ho file part molto vecchi dove sono stati crati con unita di misura della densità in kg/mm^3 e facevano riferimento alla tabella materiali delle prime versioni di solid edge.

oggi vorrei allineare tutti questi file facendoli puntare tutti alla tabella materiali "Materials.mtl" ed eventualmente aggiornare anche l'unita di misura (tutti in kg/m^3)

avete suggerimenti?;):giggle::giggle:
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
ciao, mi aggancio a questa discussione per chiedere se cè la possibilita di mofiifcare massivamente le proprieta di un file tipo densità/materiale/unita di misura.
mi spiego: ho file part molto vecchi dove sono stati crati con unita di misura della densità in kg/mm^3 e facevano riferimento alla tabella materiali delle prime versioni di solid edge.

oggi vorrei allineare tutti questi file facendoli puntare tutti alla tabella materiali "Materials.mtl" ed eventualmente aggiornare anche l'unita di misura (tutti in kg/m^3)

avete suggerimenti?;):giggle::giggle:

Puoi proseguire con la strada che già conosci, ovvero usare excel come interfaccio su cui eseguire operazioni su elenchi di file. Dovrai di volta in volta implementare le funzioni che ti interessano.

Oppure potresti dare un'occhiata al programma "OpenSave" che trovi nella cartella Custom di Solid Edge e personalizzartelo.

O ancora meglio, scarichi il pogramma OpenSave dall'archivio Solid Edge Community da GitHub e vai ad inserire le funzioni che ti servono

https://github.com/SolidEdgeCommunity/Samples/tree/master/General/OpenSave/vb

Ciao

P.S.: Per nuove richieste è sempre bene aprire nuovi post
 

mark-gagnon

Utente Junior
Professione: disegnatore/progettista
Software: solid edge
Regione: lombardia
ciao,
non sono molto abile a creare macro e/o modificarle..e non sono molto esperto nemmeno con open/save.
ho visto che si possono fare molte cose interesssanti ma non saprei da dove cominciare..
non esiste una miniguida o qlc per inizare a macinarci?

magari se ci fosse un esempio semplice da cui partire :giggle::giggle:
 

Statistiche forum

Discussioni
58,572
Messaggi
499,505
Utenti registrati
104,297
Ultimo utente registrato
seb18

Utenti online

Nessun utente è online al momento.

Top