Condividi:        

[VBA Autocad]Macro per salvare un file

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

[VBA Autocad]Macro per salvare un file

Postdi 3olo » 19/06/15 01:09

Salve,
faccio progettazione meccanica e uso una macro in vba per automatizzare un processo del programma di progettazione. Spero di riuscire a spiegarmi bene.
Tale macro da in automatico un comando per creare alcuni componenti ad uno ad uno(migliaia),tali componenti poi vengono inseriti in un file che ha estensione *.iam e poi grazie a questo vengono convertiti sempre automaticamente in un ormato cad di interscambio, *.stp . il mio problema è che funziona perfettamente ma attualmente la macro si blocca al momento della creazione del file *.iam , mi chiede posizione e nome per il salvataggio, poi riparte . volevo chiedervi se riuscite a far sì che la macro la salvi con un nome in una certa posizione in automatico (tanto poi una volta finito questo processo non serve più questo file *.iam, serve appunto solamente alla macro per poter convertire tutti i file creati, di solito poi lo cancello). In questo modo potrei fare partire la macro e il pc farebbe tutto in automatico dall'inizio alla fine.
Posto il codice ed evidenzio il punto di salvataggio in cui vorrei che il file *.iam venisse nominato e salvato in automatico.

Vi ringrazio in anticipo
Codice: Seleziona tutto
Public Sub AddiPartOccurrence2()
    ' Open the factory document invisible.
    Dim oFactoryDoc As PartDocument
    Set oFactoryDoc = ThisApplication.Documents.Open("D:\chiavetta 21-12\disegni inventor\2\000progetto\parti\tra.ipt", False)

    ' Set a reference to the component definition.
    Dim oCompDef As PartComponentDefinition
    Set oCompDef = oFactoryDoc.ComponentDefinition

    ' Make sure we have an iPart factory.
    If oCompDef.IsiPartFactory = False Then
        MsgBox "Chosen document is not a factory.", vbExclamation
        Exit Sub
    End If

    ' Set a reference to the factory.
    Dim oiPartFactory As iPartFactory
    Set oiPartFactory = oCompDef.iPartFactory

    ' Get the number of rows in the factory.
    Dim iNumRows As Integer
    iNumRows = oiPartFactory.TableRows.Count

    ' Create a new assembly document
    Dim oDoc As AssemblyDocument
    Set oDoc = ThisApplication.Documents.Add(kAssemblyDocumentObject, , True)

    Dim oOccs As ComponentOccurrences
    Set oOccs = oDoc.ComponentDefinition.Occurrences

    Dim oPos As Matrix
    Set oPos = ThisApplication.TransientGeometry.CreateMatrix

    Dim oStep As Double
    oStep = 0#
    Dim iRow As Long

    ' Add an occurrence for each member in the factory.
    For iRow = 1 To iNumRows

        oStep = oStep + 10

        ' Add a translation along X axis
        oPos.SetTranslation ThisApplication.TransientGeometry.CreateVector(oStep, oStep, 0)

        Dim oOcc As ComponentOccurrence
        Set oOcc = oOccs.AddiPartMember("D:\chiavetta 21-12\disegni inventor\2\000progetto\parti\tra.ipt", oPos, iRow)
       
    Next
   
    oDoc.Save        '----------------E' questo il passo dove mi chiede di nominare e salvare il file *.iam!!!
    Dim oRefDoc As Document
    For Each oRefDoc In oDoc.ReferencedDocuments
       Call ExportToSTEP2(oRefDoc)
    Next
       
   
End Sub

Public Sub ExportToSTEP2(oDoc As Document)
   
    Dim exportPath As String
    exportPath = "D:\chiavetta 21-12\disegni inventor\"

    ' Get the STEP translator Add-In.
    Dim oSTEPTranslator As TranslatorAddIn
    Set oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")

    If oSTEPTranslator Is Nothing Then
        MsgBox "Could not access STEP translator."
        Exit Sub
    End If

    Dim oContext As TranslationContext
    Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap
    If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then
        ' Set application protocol.
        ' 2 = AP 203 - Configuration Controlled Design
        ' 3 = AP 214 - Automotive Design
        oOptions.Value("ApplicationProtocolType") = 3

        ' Other options...
        'oOptions.Value("Author") = ""
        'oOptions.Value("Authorization") = ""
        'oOptions.Value("Description") = ""
       
        oOptions.Value("Organization") = "Boeing SPA"

        oContext.Type = kFileBrowseIOMechanism

        Dim oData As DataMedium
        Set oData = ThisApplication.TransientObjects.CreateDataMedium
       

        'format file name
        Dim FNamePos As Long
        'postion of last back slash
        FNamePos = InStrRev(oDoc.FullFileName, "\", -1)
        Dim docFName As String
        'file name with extension
        docFName = Strings.Right(oDoc.FullFileName, Len(oDoc.FullFileName) - FNamePos)
        'file name without extension
        Dim shortName As String
        shortName = Strings.Left(docFName, Len(docFName) - 4)

        oData.FileName = exportPath & shortName & ".stp"

        Call oSTEPTranslator.SaveCopyAs(oDoc, oContext, oOptions, oData)
    End If
End Sub
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Sponsor
 

Postdi 3olo » 19/06/15 13:12

C'è qualche buon anima che può darmi una mano? :):)
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Postdi 3olo » 19/06/15 13:53

Per completezza mi basterebbe che la macro al passo che ho evidenziato mi salvasse "oDoc" ad esempio come "C:\nuova cartella\prova.iam" ,e se ne freghi se deve sovrascrivere, tutto qui,così la macro continuerebbe fino alla fine. Ma non sono capace di farlo. Se potete darmi una dritta ve ne sarei molto grato.
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Postdi alfrimpa » 19/06/15 14:35

Ciao 3olo.

Questa sezione tratta di Applicazioni Office Windows.

A lume di naso non mi sembra che la tua macro sia stata scritta i Visual Basic for Application che è il linguaggio comune alla suite Office.

Ma spero di sbagliarmi.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Postdi 3olo » 19/06/15 14:43

Cavolo! Brutta notizia! Io ho appiccicato un po' di cose già fatte in vari forum del software di progettazione che uso ,sono riuscito a crearla per quello. In realtà io sono abbastanza indietro come programmazione. Ti ringrazio per avermelo detto, ma allora che linguaggio potrebbe essere secondo te?
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Postdi alfrimpa » 19/06/15 14:48

Purtroppo non ne ho la più pallida idea.

Ho visto che i file .stp sono file di Autocad; non è che per caso Autocad ha al suo interno un proprio linguaggio di programmazione?

Una cosa è certa: a mio parere non si tratta di Office.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Postdi 3olo » 19/06/15 14:56

Io uso autodesk inventor ,che é un po' più avanzato di autocad e ha al suo interno un editor Visual Basic ( si chiama proprio così:editor Visual Basic) in cui si possono creare delle regole come quella che ho postato . Però boh, non capisco bene perché differisce così tanto dal vb di office
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Postdi alfrimpa » 19/06/15 15:00

Ma sono programmi completamente diversi. La struttura di base può essere simile ma poi le differenze sono tantissime.

Devi pensare al Visual Basic come una lingua che può essere declinata in tante varianti (chiamiamole "dialetti") incompatibili tra loro.

Anche il VBA di Excel è diverso da quello di Word, da quello di Access etc. Eppure appartengono tutti ad Office ma ogni programma ha le sue specificità
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Postdi 3olo » 19/06/15 15:04

Ah cavolo, capito, allora mi sa proprio che in questo forum vi ho rotto le scatole e basta!!! ;);) Mi scuso e ringrazio per le delucidazioni
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Postdi alfrimpa » 19/06/15 15:12

Non devi scusarti ci mancherebbe!
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Postdi Flash30005 » 19/06/15 21:18

Ciao 3olo ma quando avvii quella macro
esiste il percorso "D:\chiavetta 21-12\disegni inventor\" ?
perché se non esiste è normale che ti chieda dove salvare il file

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Postdi Anthony47 » 20/06/15 02:02

In aggiunta al commento di Flash (vedi sopra).
Mutuando dal comando "Save" del vba penso che ci sia un parametro "filename" da indicare; quindi prova a modificare la riga in
Codice: Seleziona tutto
   oDoc.Save  filename:="C\Prova\zczc_pippo.iam"

La directory C:\Prova deve gia' esitere, mentre il nome utilizzato ("zczc_pippo.iam") ovviamente lo puoi modificare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi 3olo » 20/06/15 16:17

Ciao ,grazie per l'aiuto ,il percorso esiste già, ma proprio non capisco cosa voglia che scriva per fargli salvare un file con nome! Anthony47 ho provato la tua soluzione ma mi da errore.
Al passo oDoc.Save lui mi chiede percorso e nome file , se io provo a fare oDoc.SaveAs( lui mi suggerisce : "Saveas(File name as String, SavecopyAs as Boolean)" ... boh!

E nella guida VBA di questo modulo trovo
Saved Property


Returns a Boolean value indicating whether or not the object was edited since the last time it was saved. Read/write.

Return Values

The Saved property returns these values:

Value Description
True The object has not been edited since the last time it was saved.
False The object has been edited since the last time it was saved.

Remarks

The SaveAs method sets the Saved property to True.

Note If you set the Saved property to False in code, it returns False, and the object is marked as if it were edited since the last time it was saved.

Vabbè dai,continuo alla vecchia...Grazie per l'impegno nel cercare di aiutarmi!
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Postdi Anthony47 » 21/06/15 00:33

Hai guardato la descrizione della proprieta' "Saved" non del comando "Save".
Ultima prova:
Codice: Seleziona tutto
oDoc.Save "C\Prova\zczc_pippo.iam"

Comunque sposto nella sezione Programmazione, dove di VB ne capiscono certamente piu' di me.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi 3olo » 21/06/15 16:10

niente!
Ci abbiamo provato, ti ringrazio tantissimo!!
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Postdi 3olo » 22/06/15 12:08

Anthony47 ha scritto:Hai guardato la descrizione della proprieta' "Saved" non del comando "Save".
Ultima prova:
Codice: Seleziona tutto
oDoc.Save "C\Prova\zczc_pippo.iam"

Comunque sposto nella sezione Programmazione, dove di VB ne capiscono certamente piu' di me.

Ciao


Ciao Anthony,
Ti ringrazio di averci provato.
Alla fine sono riuscito a trovare la giusta dicitura e la posto per completezza, così il topic potrà considerarsi chiuso soddisfacentemente.
Codice: Seleziona tutto
Call odoc.SaveAs("Path&filename", True)

Mancava il "Call" praticamente.adesso va che é una meraviglia
Grazie mille ancora a tutti
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39


Torna a Programmazione


Topic correlati a "[VBA Autocad]Macro per salvare un file":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti