Materiale Inventor su combobox

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Ciao, in VBA sto provando (per ora senza esito) a far selezionare il materiale della parte da una combobox messa in un form per avere tutto raggruppato e risparmiare tempo e click.

I materiali sono in una libreria personalizzata, ma dubito sia questa la problematica.

Codice:
Public Sub ComboMat_Change()

    ' Set a reference to the materials collection.
    Dim oMaterials As Materials
    Set oMaterials = oDoc.Materials
        
    Dim oMaterial As Material
    
    ' Get the selected item
    Dim oMaterialName As String
    oMaterialName = ComboMat.ListItem(ComboMat.ListIndex)
    
    ' Set a reference to the active part document
    Dim oDoc As PartDocument
    Set oDoc = ThisApplication.ActiveDocument
    
    Dim oPartCompDef As PartComponentDefinition
    Set oPartCompDef = oDoc.ComponentDefinition
    
    ' Get the selected material
    Dim oMaterial As Material
    Set oMaterial = oDoc.Materials.Item(oMaterialName)
    
    ' Change the part material
    oPartCompDef.Material = oMaterial

End Sub
Grazie a chi saprà aiutarmi
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2020
Regione: Veneto
Qualche modifica banale e a me funziona, sei sulla strada giusta ;)
Ovviamente occhio a cosa c'è scritto nel combobox...

Codice:
Public Sub ComboMat_Change()

    ' Set a reference to the active part document
    Dim oDoc As PartDocument
    Set oDoc = ThisApplication.ActiveDocument

    ' Set a reference to the materials collection.
    Dim oMaterials As Materials
    Set oMaterials = oDoc.Materials
        
    
    ' Get the selected item
    Dim oMaterialName As String
    'oMaterialName = ComboMat.ListItem(ComboMat.ListIndex)
    oMaterialName = "C40"
    
    Dim oPartCompDef As PartComponentDefinition
    Set oPartCompDef = oDoc.ComponentDefinition
    
    ' Get the selected material
    Dim oMaterial As Material
    Set oMaterial = oDoc.Materials.Item(oMaterialName)
    
    ' Change the part material
    oPartCompDef.Material = oMaterial

End Sub
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Qualche modifica banale e a me funziona, sei sulla strada giusta ;)
Ovviamente occhio a cosa c'è scritto nel combobox...

Codice:
Public Sub ComboMat_Change()

    ' Set a reference to the active part document
    Dim oDoc As PartDocument
    Set oDoc = ThisApplication.ActiveDocument

    ' Set a reference to the materials collection.
    Dim oMaterials As Materials
    Set oMaterials = oDoc.Materials
       
   
    ' Get the selected item
    Dim oMaterialName As String
    'oMaterialName = ComboMat.ListItem(ComboMat.ListIndex)
    oMaterialName = "C40"
   
    Dim oPartCompDef As PartComponentDefinition
    Set oPartCompDef = oDoc.ComponentDefinition
   
    ' Get the selected material
    Dim oMaterial As Material
    Set oMaterial = oDoc.Materials.Item(oMaterialName)
   
    ' Change the part material
    oPartCompDef.Material = oMaterial

End Sub
Ciao Catafratto,
ho provato il tuo codice, ma non funziona (o almeno non come volevo io).
Effettivamente rileggendo il post si capisce anche poco quello che volevo ottenere, provo a speigarmi meglio.
Nella combobox che ipotizzavo, volevo in buona sostanza duplicare il menu' dei materiali di Inventor, quindi avrei bisogno che prima mi leggesse il materiale della parte che è inserito e cliccandoci sopra si possa scegliere uno dei materiali della libreria.
Leggere il materiale della parte, non sarà un grosso problema, ma popolare la combobox coi materiali della libreria, là mi grippo e non riesco più a far nulla.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2020
Regione: Veneto
' oPart è già definita da qualche parte a monte....
' MyForm.cmbMateriale è il combobox definito nel tuo form MyForm (nomi da aggiustare )

Dim oMaterials As Materials
Set oMaterials = oPart.Materials

Dim oMaterial As Material
For Each oMaterial In oMaterials
MyForm.cmbMateriale.AddItem (oMaterial.Name)
Next oMaterial
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Spetta che (dando la colpa all'influenza forse nessuno se ne accorge) colpa dell'influenza son rintronato, roba, base base.
Form: UserForm1
Combobox: Combobox1

Codice:
Public Sub ComboBox1_Change()

    Dim oPart As PartDocument
    Set oPart = kPartDocumentObject

    Dim oMaterials As Materials
    Set oMaterials = oPart.Materials

    Dim oMaterial As Material
    For Each oMaterial In oMaterials
    UserForm1.ComboBox1.AddItem (oMaterial.Name)
    Next oMaterial

End Sub
1579018142369.png

Ovviamente form lanciato con documento parte aperto sotto.

Son convito che stia sbagliando una qualche stupidata, ma non riesco a capire
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2020
Regione: Veneto
Codice:
Private Sub Userform_Initialize()

    Dim oPart As PartDocument
    Set oPart = ThisApplication.ActiveEditDocument

    Dim oMaterials As Materials
    Set oMaterials = oPart.Materials

    Dim oMaterial As Material
    For Each oMaterial In oMaterials
    UserForm1.ComboBox1.AddItem (oMaterial.Name)
    Next oMaterial

End Sub
Metti il codice per popolare il combobox dentro a UserForm_Initialize() così si attiva quando parte il form;
il
Set oPart = kPartDocumentObject
è l'influenza che attacca, immagino ;-)
Il codice come l'avevi fatto partiva solo al cambiamento del combobox

Puoi mettere queste righe un po' dove vuoi, anche attivarle con la pressione di un tasto alla bisogna; nell'userform_initialize girano automaticamente all'apertura del form
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Codice:
Private Sub Userform_Initialize()

    Dim oPart As PartDocument
    Set oPart = ThisApplication.ActiveEditDocument

    Dim oMaterials As Materials
    Set oMaterials = oPart.Materials

    Dim oMaterial As Material
    For Each oMaterial In oMaterials
    UserForm1.ComboBox1.AddItem (oMaterial.Name)
    Next oMaterial

End Sub
Metti il codice per popolare il combobox dentro a UserForm_Initialize() così si attiva quando parte il form;
il
Set oPart = kPartDocumentObject
è l'influenza che attacca, immagino ;-)
Il codice come l'avevi fatto partiva solo al cambiamento del combobox

Puoi mettere queste righe un po' dove vuoi, anche attivarle con la pressione di un tasto alla bisogna; nell'userform_initialize girano automaticamente all'apertura del form
Grazie! Era proprio il problema di lanciare il form!


Codice:
Set oPart = kPartDocumentObject
Era per farlo funzionare solo con le parti e non con gli assiemi, altrimenti si inxxzza, ho risolto col classicissimo

Codice:
On Error Resume Next
Prima di tutto e via alla grande!