+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 6 su 6

Discussione: errore 5152

  1. #1
    fabietto10 non è in linea Scolaretto
    Post
    92

    errore 5152

    Ciao a tutti,
    ho sviluppato applicazione che serve per generare e salvare automaticamente dei file word a partire da dei modelli.
    ho una tabella template dove salvo il nome del modello, path che serve ad aprirlo, path con cui deve essere salvato.

    attraverso il codice (è solo un parte) recupero il modello selezionato nella form, apro il modello, lo compilo e lo salvo.

    non ho avuto alcun problema a farlo funzionare sul mio pc (office 2016) ma su atri pc con la stessa versione di office
    ottengo "errore 5152 il nome del file non è valido. assicurarsi che il percorso sia stato digitato correttamente"
    la cosa più strana è che l'errore viene generato solo per alcuni modelli.

    Word viene correttamente aperto (lo vedo dal task manager) ma quando deve cercare di aprire il file DOTX evidentemente succede qualcosa.
    codice:
    Private Sub open_Click()
    'MsgBox Me.elenco_template
    
    Dim strXLT, strXLS, strDOT, strDOC, sql As String
    Dim replsel     As Boolean
    'Dim objword     As Word.Application
    Dim objword     As Object
    Dim objdoc      As Object
    Dim objexc      As Object
    Dim objwkb      As Object
    Dim sheet       As Object
    'Dim objsel      As Word.Selection
    Dim objrange    As Object
    'Dim tabword     As Word.Table
    Dim database    As dao.database
    Dim rst         As dao.Recordset
    Dim tabella     As dao.Recordset
    Dim i           As Integer
    Dim IDNormaUNI, IDJob As Integer
    Dim pathtoopen  As String
    Dim cartella_azienda  As Variant
    Dim tipo_audit  As String
    Dim IDUO        As Integer
    Dim strUO, strTELUO, strEMAUO As String
    Dim intselection As Integer
    Dim auditor, firma_auditor   As String
    Dim numeroazienda, MailAzienda, IndirizzoAzienda, ReferenteAzienda, settoriIAF, certification_scope_local As String
    Dim annostr, strAltriJob, strAltreNorme, firma    As String
    Set database = CurrentDb
    
    On Error GoTo error_handler
    
    
    '===============TEMPLATE E PATH DI SALVATAGGIO ================
    
    'IL PATH DI SALVATAGGIO DEVE ESSERE dirpath &"\" & "2-audit\"& annostr &"\" &nomefile
        sql = "SELECT * FROM tbl_template where IDTemplate=" & Me.elenco_template
        Set rst = database.OpenRecordset(sql)
        pathtoopen = Nz(rst.Fields(3), "")
        pathtosave = Nz(rst.Fields(4), "")
        'DLookup("[nomeauditor]", "tbl_auditor", "[IDAuditor]=" & Me.IDAuditor)
        tipo_audit = DLookup("[tipoaudit]", "tbl_tipiaudit", "[idtipoaudit]=" & Me.IDTipoAudit)
       
        strDOT = CurrentProject.Path & pathtoopen
       debug.print strDOT
        annostr = Format(Me.DataAudit, "yyyy")
    
        'devo controllare se esiste la cartella 2-audit
       
        
        If Len(Dir(cartella_azienda & "\02-audit", vbDirectory)) = 0 Then
        ' cosi non esiste 2-audit creo audit e anno
            MkDir (cartella_azienda & "\02-audit")
            MkDir (cartella_azienda & "\02-audit\" & annostr & "-" & tipo_audit)
            strDOC = cartella_azienda & "\02-audit\" & annostr & "-" & tipo_audit & "\" & pathtosave
         
        Else
        'esiste 2-audit,devo controllare anno
            If Len(Dir(cartella_azienda & "\02-audit\" & annostr & "-" & tipo_audit, vbDirectory)) = 0 Then
            'non esiste anno
                MkDir (cartella_azienda & "\02-audit\" & annostr & "-" & tipo_audit)
                strDOC = cartella_azienda & "\02-audit\" & annostr & "-" & tipo_audit & "\" & pathtosave
            Else
            'esiste anche anno
                strDOC = cartella_azienda & "\02-audit\" & annostr & "-" & tipo_audit & "\" & pathtosave
            End If
        End If
        rst.close
        Set rst = Nothing
        '==================FINE TEMPLATE E PATH DI SALVATAGGIO==============
        
    
    ...............................
        
        '===============COMPILAZIONE DEL TEMPLATE==============
        Screen.MousePointer = 11
        
            Set objword = CreateObject("Word.Application")
            'objword.Visible = True
            Set objdoc = objword.Documents.Add(strDOT) //CREDO CHE SI BLOCCHI QUI
            Set objrange = objdoc.range
            'Debug.Print Me.elenco_template
        
        
            replsel = objword.Options.ReplaceSelection
            objword.Options.ReplaceSelection = True
        
            If objword.activedocument.bookmarks.exists("nomeazienda") Then
                objword.activedocument.bookmarks("nomeazienda").Select
                objword.selection.Text = Me.nomeazienda
        ..........................
        '=========ATTIVO E SALVO IL FILE =============
            objword.Visible = True
            objword.Activate
            objword.WindowState = wdWindowStateMaximize
            objword.Application.activedocument.SaveAs2 strDOC
            Screen.MousePointer = 0
            
            End If
        
         '===============AGGIUNGO IL MODELLO SCELTO TRA QUELLI CREATI ============
        Set tabella = database.OpenRecordset("tbl_auditdoc", dbOpenDynaset)
        tabella.AddNew
        tabella.Fields("IDAudit") = Me.IDAudit
        tabella.Fields("IDTemplate") = Me.elenco_template.Value
        tabella.Fields("Path") = strDOC
        tabella.Fields("Ismultijob") = Me.checkmultijob
        tabella.Update
        tabella.close
        database.close
        Set database = Nothing
    
    
    'DoCmd.RunCommand acCmdSaveRecord
    Me.elenco_template.Requery
    Form.Refresh
    Set objword = Nothing
    Set objodoc = Nothing
    Exit Sub
    error_handler:
        MsgBox Err.Number & Err.Description & Err.Source, vbExclamation, "Errore"
        Screen.MousePointer = 0
        Exit Sub
        
    End Sub
    chiaramente i percorsi che puntano ai file sono corretti ed esistenti. l'errore viene chiamato da Word e non da Access.
    è come se alcuni nomi di file non piacciano a word. ma non è una cosa normale.
    qualche suggerimento?
    grazie a tutti

  2. #2
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,660
    Immagino tu abbia fatto un copia-incolla del codice che usi. Partendo da questo assunto, hai fatto modifiche manuali al codice qui sul forum?
    Alcune cose, per come sono scritte, sono "strane"
    codice:
    Dim database    As dao.database
    Tutti gli oggetti Dao sono scritti con le lettere iniziali minuscole. Solitamente entra in campo l'intellisense o altro che non so che li "trasforma" in Dao.Database. Qui è una pessima idea dare ad una variabile lo stesso nome di una classe.
    Sostituisci in nome della variabile con db o datab... non so, qualcosa che non sia database.
    Cosa che seppur non dovrebbe avere a che fare con il tuo problema (forse) è comunque una abitudine da abbandonare
    codice:
    Dim strXLT, strXLS, strDOT, strDOC, sql As String
    magari fondata sulla diffusa ma errata convinzione che in questo modo tutte le variabili siano di tipo String. No, solo l'ultima, per la quale è specificato il tipo è String, le altre sono tutte Variant. Per ogni variabile devi indicare il tipo
    codice:
    Dim strXLT As String, strXLS As String, strDOT As String, strDOC As String, sql As String
    Le variabili Variant possono essere Null, cosa impossibile per il tipo String. Un Null da qualche parte e il disastro è fatto
    Hai Option Explicit allìinizio di ogni modulo?

    Ti chiedo una cortesia che è solo una mia curiosità: prova a sistemare la variabile database, cambiandole il nome e guarda se dao.(classe) diventa Dao.(Classe) per tutti gli oggetti Dao. Prova quindi a vedere se il problema si ripresenta.

    Se anche risolvessi con il passo precedente, sistema "As String" su tutte le variabili giuste. C'è anche una riga con Integer che ha lo stesso problema. Se il problema persisteva forse con questa sistemazione qualcosa spunta.

    In questo momento di analisi, sulle postazioni incriminate potrebbe essere più utile usare l'earlybinding per l'automazione di Word. Poi, come stai già facendo, torni al latebinding

    Intanto prova con questo, nel frattempo leggo il resto del codice e vedo se c'è altro di sospetto

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091
    Se non mostri un PATH completo, possiamo solo ipotizzare che abbia caratteri speciali non ammessi... esempio:
    codice:
    \/|?*<>"":
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  4. #4
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,660
    Quote Originariamente inviato da fabietto10 Visualizza il messaggio
    [CODE]...
    Set objdoc = objword.Documents.Add(strDOT) //CREDO CHE SI BLOCCHI QUI
    Disabilità temporaneamente la gestione degli errori, lascia che si blocchi evidenziando la riga che dà problemi e guarda con il mouse sulle variabili oppure nella finestra delle variabili locali o con Debug.Print cosa contengono le variabili interessate da quella riga.

    Ho visto che molte variabili non sono usate nel codice che hai pubblicato. C'è dell'altro? altrimenti toglile dalle dichiarazioni che fan solo confusione.

  5. #5
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,073
    Non si può credere un qualcosa, occorre averne la certezza!

    Devi gestire l'errore, modifica così:

    codice:
    error_handler:
        MsgBox Err.Number & Err.Description & Err.Source, vbExclamation, "Errore"
        Screen.MousePointer = 0
        Stop ' premere [F8]
        Resume
    End Sub
    N.B. l'istruzione Exit Sub è assolutamente inutile, prima di End Sub

    e quando si ferma premi [F8] per andare alla riga che ha generato l'errore, ed ora che sei in DEBUG puoi valutare il contenuto delle variabili.

  6. #6
    Ferrari_and non è in linea Scolaretto
    Post
    108
    Prova pure a controllare i permessi impostati sui singoli file in modo che tutti gli utenti abbiano possibilità di aprirli (in modalità non protetta) e soprattutto riscriverli.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi