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

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
#1
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
#2
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
#4
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
#5
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
#7
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
#8
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
#9
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