Newsgroup: it.comp.appl.access
Titolo: Creazione documento........

Salve a tutti!
Qualcuno, tempo fa, mi ha suggerito una routine per aprire un documento Word 
e/o crearne uno nuovo. Ebbene, per aprire non ho problemi ma quando digito 
un nome e, quindi nel crearlo, mi porta al debug su questa linea:
.Documents.Create "C:\DOCUMENTI\LAVORO\" & DOCU
EccoVi la routine:
====================================================
Private Sub Comando0_Click()
    Dim oapp As Object
    Dim DOCU As Variant
    DOCU = VERBALE.Value
    DoCmd.RunCommand acCmdSaveRecord
    Set oapp = CreateObject("Word.Application")
    With oapp
    On Error GoTo NUOVO
    .Documents.Open "C:\DOCUMENTI\LAVORO\" & DOCU
    .Visible = True
    GoTo fine
  NUOVO:
    .Documents.Create "C:\DOCUMENTI\LAVORO\" & DOCU
    .Visible = True
fine:
    End With
    Set oapp = Nothing
End Sub
===================================================
Grazie anticipatamente.
Marco.
-- 
Per rispondermi, togli domanda e risposta dall'e-mail
HaiTempo?
Con...@MaiAbbastanza.libero.it

     .Documents.Open "C:\DOCUMENTI\LAVORO\" & DOCU
        questa la scriverei cosi:
        .Documents.Open "C:\DOCUMENTI\LAVORO\" & me![verbale]


 wrote in message
news:TRZee.104128$zZ1.2...@twister1.libero.it...

Grazie per aver risposto ma il problema è che non lo crea. Qualche
suggerimento?
-grazie anticipatamente.
Marco.

 ha scritto nel messaggio
news:8k%ee.104255$zZ1.2...@twister1.libero.it...

Hai messo i riferimenti alla libreria di word?
Se guardi sul sitocomune c'è un esempio ben fatto di namor che riguarda
l'automazione access - word tramite l'utilizzo dei book marks.

 .Documents.Create "C:\DOCUMENTI\LAVORO\" & DOCU
Ma esiste il metodo create??? in word 2000 non c'e'...
...e mi sembra anche fuori standard per gli oggetti MS.
Io per creare i documenti word faccio
Dim W as Word.Application, DOC as Word.Document
Set W =createobject("word.application")
Set DOC= W.documents.add
DOC.saveas filename
cia' max

 l'automazione access - word tramite l'utilizzo dei book marks.
No, non servono i riferimenti a Word, oltretutto è MALE
farne uso.
Nel suo Codice usa la tecnica LateBinding o associazione
tardiva che svincola il programmatore da versioni differenti
che darebbero errori non gestibili.
Quello che posso notare è che manca completamente la gestione
dell'errore in caso Word sia già aperto e che io aprirei un DOC
ed eseguirei un SAVE AS così:
Private Function CreaSchedaTaratura(strDOC As String) As Boolean
   ' strDOC -------> NOME DEL DOCUMENTO
 
   Dim wordApp    As Object
   Dim wordDoc    As Object
 
   On Error GoTo gestErrori
 
   ' APRE SE ESISTE GIA' UN'OGGETTO WORD
   Set wordApp = GetObject(, "Word.Application")
   ' NEL CASO NON ESISTA VERRA' GESTITO L'ERRORE
   ' E VERRA' CREATO UN NUOVO OGGETTO WORD
 
   With wordApp
      Set wordDoc = .Documents.Open(strDOT)
      wordDoc.Activate
   End With
 
   wordDoc.SaveAs strDOC
   'wordDoc.close
 
Esci:
   Exit Function
   ' VALUTA SE DEVI LIBERARE LE RISORSE CHIUDENDO
   ' IL TUTTO O MENO, NEL CASO ABILITA LE RIGHE SOTTO
   'If Not wordDoc Is Nothing Then Set wordDoc = Nothing
   'If Not wordApp Is Nothing Then Set wordApp = Nothing
gestErrori:
   If err.Number = 429 Then
       'se c'è stato un errore è perchè Word non era già aperto:
       'aprilo adesso
       Set wordApp = CreateObject("Word.Application")
       Resume Next
 
   Else
      Msgbox Me.Name, "CreaSchedaTaratura", err.Number, err.Description
      'Call KillWord
      GoTo Esci
   End If
End Function
Saluti
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 cia' max
Personalmente non userei mai l'inserzione dei riferimenti
Word o altro prodotto all'interno del mio applicativo.
Credo che sia metodo ormai collaudato l'uso dell'associazione
Tardiva per evitare problemi.
Dim W as Object, DOC as object
Saluti.


Gentilissimi smanettoni :-))
Innanzitutto Vi ringrazio per la squisita collaborazione ma, purtroppo, 
anche con il suggerimento di Alessandro, non funge.
Ho un controllo in una maschera dove digito un nome di un documento che lo 
richiamo con un pulsante:
=========================================================
Private Sub Comando0_Click()
   Dim wordApp    As Object
   Dim wordDoc    As Object
   On Error GoTo gestErrori
   ' APRE SE ESISTE GIA' UN'OGGETTO WORD
   Set wordApp = GetObject(, "Word.Application")
   ' NEL CASO NON ESISTA VERRA' GESTITO L'ERRORE
   ' E VERRA' CREATO UN NUOVO OGGETTO WORD
   With wordApp
      Set wordDoc = .Documents.Open(strDOT)
      wordDoc.Activate
   End With
   wordDoc.SaveAs strDOC
   'wordDoc.close
Esci:
   Exit Sub
   ' VALUTA SE DEVI LIBERARE LE RISORSE CHIUDENDO
   ' IL TUTTO O MENO, NEL CASO ABILITA LE RIGHE SOTTO
   'If Not wordDoc Is Nothing Then Set wordDoc = Nothing
   'If Not wordApp Is Nothing Then Set wordApp = Nothing
gestErrori:
   If Err.Number = 429 Then
       'se c'è stato un errore è perchè Word non era già aperto:
       'aprilo adesso
       Set wordApp = CreateObject("Word.Application")
       Resume Next
   Else
      'MsgBox Me.Name, "CreaSchedaTaratura", Err.Number, Err.Description
      'Call KillWord
      GoTo Esci
   End If
End Sub
========================================================
quando cerca di crearlo, non succede nulla ma se vado a vedere nel 
taskmanager, noto che WinWord è in esecuzione senza possibilità alcuna di 
ripristinarlo se non interromperlo.
Uso Office 2003 e Access '97.
Chiedo aiuto. Grazie ancora.
Marco.

 Marco.
Che Word sia aperto nel task è un buon segnale.
Il fatto che invece non apra il Documento è da chiarire.
Il percorso che gli dai è di un Documento già essitente da aprire
oppure del Nuovo da creare...?
Nel Codice che ti ho passato è apre un DOC esistente e
lo salva con nome. 


 ha scritto nel messaggio 
news:0fd97036913d8a7a3b...@mygate.mailgate.org...

Nella vecchia routine controlla se quel nome esiste altrimenti ne crea uno 
nuovo. Mi ricordo che appena l'autore mi scrisse la routine, qualche tempo 
fa, il codice mi ha funzionato. Non vorrei che fosse la versione Word 2003 a 
farmi questi casini.
Grazie ancora dell'attenzione.
Marco.

 Tardiva per evitare problemi.
Ehm... perche'?
cia'
Max

"Roccia" Max De Poli" <rocc...@CIPPA.com> wrote in message
news:MPG.1ce871f9c...@nntpserver.tele2.it

Il motivo fondamentale è che quando programmi sulla tua Macchina
hai un determinato tipo di Aggiornamento dei Riferimenti, ti
basta pensare a versioni di Office non uguali.
Sulle macchine dei Clienti si trova di tutto e se hai sviluppato
inserendo nei Riferimenti Word 10.0 ed un Cliente in una rete
ha ancora Word8.0 non funziona più nulla.
Se usi l'associazione tardiva non c'è nessun problema poichè
è l'interprete locale ad inserire Runtime il riferimento.
Questa tecnica è la migliore, e non è discutibile questo concetto.
C'è un però da sapere:
Con l'associazione tardiva non si ha la possibilità di dichiarare
oggetti sfruttando l'ereditarietà degli eventi(With Events) pertanto
occorre che il programmatore abbia le idee ben chiare di cosa deve fare
ed in che ambito si muove.
Questi concetti sono applicabili a tutti i riferimenti esterni
come WbScript Office Runtime per l'uso dell'oggetto CommandBar
ecc......!


 Marco.
Sinceramente non saprei, č certo che la gestione di Word
va fatta per non aprirlo in MultiSessione(non serve).
Il codice che ti ho postato gira regolarmente su 30 macchine
di piů non saprei cosa dire...!


@Alex
in conclusione, vorrei ottenere un controllo dove posso inserire un nome di 
un documento e poi un pulsante che mi attivi la routine di apertura 
documento Word che, nel caso non esista con quel nome, me ne crea uno 
automaticamente.
Purtroppo sto provando la tua routine ma c'è qualcosa che, magari, non ho 
fatto.
Illuminami.
Grazie anticipatamente.
Marco.

 wrote in message
news:JPwfe.1350387$
35.50...@news4.tin.it

Sinceramente la cosa mi pare così banale che non capisco dove sia
il tuo problema.
IN fase di sviluppo l'inserimento delle Libreire di Word ti
rende disponibile il modello ad oggetti dello stesso ed è utile
sia per l'intellisense che per l'HELP, alla fine li togli...!
Questo codice ti assicuro che da me funziona l'ho provato ora.
Private Function CreaSchedaTaratura(strDOC As String) As Boolean
   ' strDOC -------> NOME DEL DOCUMENTO
 
   Dim wordApp    As Object
   Dim wordDoc    As Object
 
   On Error GoTo gestErrori
 
   ' APRE SE ESISTE GIA' UN'OGGETTO WORD
   Set wordApp = GetObject(, "Word.Application")
   ' NEL CASO NON ESISTA VERRA' GESTITO L'ERRORE
   ' E VERRA' CREATO UN NUOVO OGGETTO WORD
 
   With wordApp
      If Len(Dir(stPath, lngType)) > 0 then
         ' ESISTE
         Set wordDoc = .Documents.Open(strDOC)
      Else
         ' NON ESISTE LO CREO
         Set wordDoc = .Documents.Add
         WorDoc.SaveAs strDOC
      End If
      .visible=true  
      wordDoc.Activate
   End With
   ' ORA DEVE ESSERE APERTO WORD CON IL DOC PASSATO(se esiste)
   ' OPPURE HA CREATO UN DOC CON IL NOME PASSATO
   ' ORA VEDI TU COSA INSERIRE QUI'
 
Esci:
   Exit Function
   ' VALUTA SE DEVI LIBERARE LE RISORSE CHIUDENDO
   ' IL TUTTO O MENO, NEL CASO ABILITA LE RIGHE SOTTO
   'If Not wordDoc Is Nothing Then Set wordDoc = Nothing
   'If Not wordApp Is Nothing Then Set wordApp = Nothing
gestErrori:
   If err.Number = 429 Then
       'se c'è stato un errore è perchè Word non era già aperto:
       'aprilo adesso
       Set wordApp = CreateObject("Word.Application")
       Resume Next
 
   Else
      Msgbox Me.Name, "CreaSchedaTaratura", err.Number, err.Description
      'Call KillWord
      GoTo Esci
   End If
End Function
Ciao



e mettere Privat Sub comandoX_click() ???
Grazie ancora per la gentile attenzione.
Marco.

 wrote in message
news:hsPfe.1356313$
35.50...@news4.tin.it

Il fatto è che si vogliono spesso fare cose complesse senza
avere un minimo di basi, questo è un grosso problema anche
per chi cerca di suggerire, poichè dà per scontato un determinato 
grado di preparazione, che invece è frutto quasi sempre di
COPIA/INCOLLA e questo non fà altro che alimentare dubbi
ed incomprensioni ovvie.
Speriamo funzioni...!
Privat Sub comandoX_click() 
  call CreaSchedaTaratura("C:\File.Doc")
End Sub


 ha scritto nel messaggio 
news:8ca130fa07c9049947...@mygate.mailgate.org...

Ciao Alessandro,
sicuramente avrai un diavolo per capello ma, per dovere di cronaca :-), devo 
dirti che il codice funge, a parte l'errore della gestione errori in quanto 
la stringa non viene riconosciuta, word si carica ma resta solo in 
esecuzione del task manager.
Siccome ci rinuncio, per l'ultima volta mi spiego meglio cosa voglio 
ottenere:
in una maschera ho inserito un controllo chiamato verbale e dove va inserito 
il nome di un documento esistente e se non esiste lo crea con quel nome che 
ho immesso. Poi sotto ho creato un pulsante per far eseguire la routine 
nella quale il nome del controllo verbale è una variabile ed il tuo codice. 
So di non essere ben ferrato nel codice ma qualcosa ne capisco e studiandolo 
ben bene e facendo le dovute sostituzioni necessarie alle mie esigenze, 
purtroppo, c'è qualcos'altro che mi/ci sfugge.
Grazie ancora per la squisita pazienza ed attenzione.
Marco.