Condividi tramite

Access VBA: Come inserire un Documento Word come oggetto OLE nel campo di un record di un Dynaset tramite codice

Anonimo
2023-05-01T07:15:17+00:00

Salve a tutti,

nel campo di una tabella ho l'indirizzo di documenti Word "*.docx", ma non l'oggetto stesso come OLE (non posso e non voglio avere l'oggetto OLE), nel momento in cui la maschera che mostrerà sia i metadati sui file Word, sia il file word stesso (BoundObjectFrame control) deve avvenire:

  1. lo spostamento dei file da una cartella remota ad una cartella temporanea locale
  2. l'inserimento dei file come oggetti OLE o in un campo lasciato vuoto (non richiesto) della tabella iniziale o di una query apposita.

Sto cercando di realizzare il mio obiettivo, inserendo nell'evento onLoad della mia maschera il codice seguente:

Me.Recordset.MoveFirst
Do While Not Me.Recordset.EOF
FileCopy VecchiaPosizione & "" & Me.Recordset!NomeFile & ".docx", NuovaTempPosizione & "" & Me.Recordset!NomeFile & ".docx"
Me.Recordset.MoveNext
Loop

Il trasferimento avviene correttamente. Non riesco però ad aggiungere dopo l'istruzione di spostamento, il codice per inserire il file come oggetto OLE.

Avete qualche suggerimento?

Grazie Lauro

Microsoft 365 e Office | Accesso | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2023-05-01T15:00:40+00:00

    Prova il seguente codice:

    Dim objWord come oggetto Dim objDoc come oggetto Dim objControl come oggetto

    Open the Word document Set objWord = CreateObject("Word.Application") Set objDoc = objWord.Documents.Open(NewTempLocation & "" & Me.Recordset! Nome file & ".docx")

    Set the Bound Object Frame control source to the Word document Set objControl = Me.YourBoundObjectFrameControlName.Object objControl.Caption = Me.Recordset! Filename objControl.Class = "Word.Document" objControl.OLETypeAllowed = acOLEEmbedded objControl.SourceDoc = objDoc.FullName objControl.Action = acOLEActivate

    ' Pulisci objDoc.Chiudi Set objDoc = Niente objWord.Quit Set objWord = Niente

    Si noti che sarà necessario sostituire "YourBoundObjectFrameControlName" con il nome effettivo del controllo Bound Object Frame nel form.

    È possibile aggiungere questo codice all'evento OnLoad del form per visualizzare automaticamente i documenti di Word nel controllo Frame oggetto associato quando viene caricato il form.

    Se hai altre domande o hai bisogno di assistenza con qualsiasi cosa, non esitare a farmelo sapere. Sarà mio piacere assistervi.

    Migliori saluti Sneha

    Restituisci alla comunità. Aiuta la persona successiva con questo problema indicando se questa risposta ha risolto il tuo problema. Fare clic su Sì o No nella parte inferiore.

    Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2023-05-01T18:16:42+00:00

    Ciao Sneha ho trovatol'errore.

    Non avevo capito bene la struttura del campo Allegato. Quel campo in realtà è un piccolo database e ha a sua volta tre campi e in uno di quelli ("FileData") bisogna caricare il file.

    Ho modificato la mia routine nel modo seguente:

    Private Sub Form_Load()
    Me.Recordset.Edit
    Me.Recordset.MoveFirst
    Do While Not Me.Recordset.EOF
    FileCopy CurrentProject.Path & "" & Me.Recordset!NomeFile & ".docx", GetTemp & "" & Me.Recordset!NomeFile & ".docx"
    Me.Recordset.Edit
    With Me.Recordset..Fields("Doc").Value
    .AddNew
    .Fields("FileData").LoadFromFile (GetTemp & "" & rs!NomeFile & ".docx")
    .Update
    End With
    Me.Recordset..Update
    Me.Recordset.MoveNext
    Loop
    End Sub

    Ora il mio problema è come collegare un allegato ad un BoundFrameObject control e non ad un Attachment control

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-05-01T16:37:33+00:00

    Grazie anche per questo suggerimento.

    Al mio codice precedente, dopo il terferimento che funziona bene, ho aggiunto le linee in grassetto

    Me.Recordset.MoveFirst
    Do While Not Me.Recordset.EOF
    FileCopy VecchiaPosizione & "" & Me.Recordset!NomeFile & ".docx", NuovaTempPosizione & "" & Me.Recordset!NomeFile & ".docx"

      **Set objControl = Me.OLE      objControl.Class = "Word.Document"      objControl.OLETypeAllowed = acOLEEmbedded      objControl.SourceDoc = GetTemp & "\" & Me.Recordset!NomeFile & ".docx"      objControl.Action = acOLEActivate**  
    

    Me.Recordset.MoveNext
    Loop

    Ricevo all'istruzione Action:

    Uasare acOLELinked o spastare Set objControl = Me.OLE prima del loop non aiuta

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-05-01T16:20:32+00:00

    Hi Sneha, grazie per il suggerimento di usare un attachment field.

    Ho aggiunto un campo "Doc" come Attachment/Allegato nella mia tabella.

    Nell'evento onLoad della mia maschera ho inserito il codice seguente:

    Private Sub Form_Load()

    Me.Recordset.Edit
    Me.Recordset.MoveFirst
    Do While Not Me.Recordset.EOF
    FileCopy CurrentProject.Path & "" & Me.Recordset!NomeFile & ".docx", GetTemp & "" & Me.Recordset!NomeFile & ".docx"
    Me.Recordset("Doc").LoadFromFile GetTemp & "" & Me.Recordset!NomeFile & ".docx"
    Me.Recordset.MoveNext
    Loop

    End Sub

    Ma la linea con LoadFromFile genera l'errore "3259" (Tipo di dati del campo non valido).

    Ho pravato un nuovo Database più semplice con una tabella "tblFiles" con due campi "nome" e "file".

    In una routine inserisco:

     Set db = CurrentDb  
    Set rs = db.OpenRecordset("tblFiles")  
    

    rs.Edit
    rs.AddNew
    rs("Nome").Value = "Lauro"
    rs("file").LoadFromFile ("D:\OneDrive\Documenti\correttore\Office\2023\prove\Carica\Rivoluzione francese e Napoleone.docx")
    rs.Update
    rs.Close

    E anche qui ricevo lo stesso errore.

    Quale pensi possa essere il problema?

    Grazie. Ora leggo l'altro suggerimento

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-05-01T08:44:30+00:00

    Ciao

    Sono Sneha e sarei felice di aiutarti con la tua domanda. Ci scusiamo per l'inconveniente causato.

    È possibile utilizzare il codice seguente:

    Dim objWord come oggetto Dim objDoc come oggetto Dim objField come oggetto

    Open the Word document Set objWord = CreateObject("Word.Application") Set objDoc = objWord.Documents.Open(NewTempLocation & "" & Me.Recordset! Nome file & ".docx")

    Insert the Word document as an OLE object in the record field Set objField = Me.Recordset.Fields("YourFieldName") objField.Type = dbAttachment objField.LoadFromFile NewTempLocation & "" & Me.Recordset! Nome file e ".docx"

    ' Pulisci objDoc.Chiudi Set objDoc = Niente objWord.Quit Set objWord = Niente

    È possibile aggiungere questo codice all'evento OnLoad del modulo per inserire automaticamente i documenti di Word come oggetti OLE quando viene caricato il modulo. È sufficiente sostituire "YourFieldName" con il nome effettivo del campo nella tabella in cui si desidera inserire l'oggetto OLE.

    Assicurarsi di aggiungere il codice di gestione degli errori per gestire eventuali errori che possono verificarsi durante i processi di copia dei file o di inserimento OLE.

    Per ulteriori informazioni, fare riferimento alla seguente risorsa: -

    Come importare un documento di Word come OLEObject in una tabella di MS Access / campo oggetto OLE - https://answers.microsoft.com/thread/9ff614de-4e64-4dcc-b14a-a0473eab6fda

    Se hai altre domande o hai bisogno di assistenza con qualsiasi cosa, non esitare a farmelo sapere. Sarà mio piacere assistervi.

    Migliori saluti Sneha

    Restituisci alla comunità. Aiuta la persona successiva con questo problema indicando se questa risposta ha risolto il tuo problema. Fare clic su Sì o No nella parte inferiore.

    Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

    La risposta è stata utile?

    0 commenti Nessun commento