Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    30

    [VBA] salvare con nome da access

    Ciao ragazzi, ho la necessità, su un evento click, di salvare un file di word al termine di ciascun ciclo for in modo che abbia il nome dei campi [cognome] [nome] presi da una tabella.

    Ho il codice che segue, ma mi salva solo il primo file al termine del primo ciclo di for. Come posso risolvere il problema e salvare anche gli altri?

    codice:
    Private Sub Comando20_Click() 
    Dim i As Integer 
    'Aggiungo il contatore - MODIFICA LIMITE A SECONDA DEI RECORD' 
    For i = 1 To 3 Dim myApp As Word.Application, myDoc As Word.Document 
    Set myApp = CreateObject("Word.Application") 
    Set myDoc = myApp.Documents.Add(Template:="scheda2.dot") 
    Dim myData As DAO.Database, myRec As DAO.Recordset 
    Set myData = CurrentDb      
    'Compila il documento con i rispettivi campi' 
    Set myRec = myData.OpenRecordset("SELECT [cognome] FROM [esponenti] where ID like '" & i & "' ") myDoc.FormFields("cognome").Result = myRec![cognome] 
    Set myRec = myData.OpenRecordset("SELECT nome FROM esponenti where ID like '" & i & "' ") myDoc.FormFields("nome").Result = myRec![nome] 
    Set myRec = myData.OpenRecordset("SELECT cf FROM esponenti where ID like '" & i & "' ") myDoc.FormFields("cf").Result = myRec![cf] 
    Set myRec = myData.OpenRecordset("SELECT data FROM esponenti where ID like '" & i & "' ") myDoc.FormFields("data").Result = myRec![data] 
    ActiveDocument.SaveAs ("C:\Sound\" & cognome & " " & nome & ".doc")   
    myApp.Visible = True   
    
    Next  
    
    End Sub

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non sono pratico di VBA e DAO, ma dal codice che vedo mi sorge spontanea la domanda:

    perchè aprire 4 volte lo stesso recordset per leggere 4 campi?
    Puoi aprirlo 1 volta sola, elencando tutti i campi

    SELECT cognome, nome, cf, data FROM esponenti...

    Per il tuo problema, mi pare che questa riga salvi OGNI documento con lo stesso nome, infatti l'istruzione che usi è:
    ActiveDocument.SaveAs ("C:\Sound\" & cognome & " " & nome & ".doc")

    ma cognome e nome non vengono mai valorizzati con i dati reali.
    Prova a valorizzarli, PRIMA:
    cognome = myRec![cognome]
    nome = myRec![nome]

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    30
    Gibra, in effetti aprire il recordset una volta sola funziona... Grazie
    (ho appena iniziato, capisco che sono errori da principiante...)

    per quanto riguarda invece la valorizzazione del nome e del cogome nel nome del file, ho modificato il codice in questo modo:


    codice:
    Set myRec = myData.OpenRecordset("SELECT cognome, nome, cf, data FROM [esponenti] where ID like '" & i & "' ") 
    myDoc.FormFields("cognome").Result = myRec![cognome] 
    myDoc.FormFields("nome").Result = myRec![nome] 
    myDoc.FormFields("cf").Result = myRec![cf] 
    myDoc.FormFields("data").Result = myRec![data] 
    cognome = myRec![cognome] 
    nome = myRec![nome] 
    ActiveDocument.SaveAs ("C:\Sound\" & cognome & " " & nome & ".doc")

    cognome = myRec![cognome]
    nome = myRec![nome]

    li valorizzo poco prima di salvarlo, ma il file viene sempre salvato con il nome dell'ultimo record a cui si ferma il ciclo for, e non salva ciascun file (come dovrebbe essere).

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    30
    Ho anche provato anticipando le due stringhe sotto ai "set" in questo modo

    codice:
    Private Sub Comando20_Click() 
    Dim i As Integer 
    'Aggiungo il contatore - MODIFICA LIMITE A SECONDA DEI RECORD' 
    For i = 1 To 3 Dim myApp As Word.Application, 
    myDoc As Word.Document Set myApp = CreateObject("Word.Application") 
    Set myDoc = myApp.Documents.Add(Template:="scheda2.dot") 
    Dim myData As DAO.Database, myRec As DAO.Recordset 
    Set myData = CurrentDb 
    Dim cognome as long
    Dim nome as long
    Set cognome = myRec![cognome] 
    Set nome = myRec![nome]     
    'Compila il documento con i rispettivi campi' 
    Set myRec = myData.OpenRecordset("SELECT cognome, nome, cf, data FROM [esponenti] where ID like '" & i & "' ") 
    myDoc.FormFields("cognome").Result = myRec![cognome] myDoc.FormFields("nome").Result = myRec![nome] myDoc.FormFields("cf").Result = myRec![cf] myDoc.FormFields("data").Result = myRec![data]  
    ActiveDocument.SaveAs ("C:\Sound\" & cognome & " " & nome & ".doc")   
    myApp.Visible = True  
    Next   'myApp.Quit Set myApp = Nothing '  End Sub
    ma restituisce l'errore run time 91 "variabile oggetto o variabile del blocco with non impostata"

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    L'errore è ovvio, stai tentando di usare un oggetto prima ancora di averlo creato.

    Direi che la cosa migliore è fare un po' debug....

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    30
    Smanettandoci sopra sono fiero di mostrarvi il codice che funziona: questa routine permette, con un ciclo for, di salvare una serie di file word con il nome e il cognome della persona a cui si riferiscono.

    Viene risolto anche il problema dell'errore di run-time 462, e la soluzione la si trova qui

    Molto bene, avanti così

    codice:
    Private Sub Comando20_Click() 
    Dim i As Integer 
    'Aggiungo il contatore - MODIFICA LIMITE A SECONDA DEI RECORD' 
    For i = 1 To 3 
    'Late binding 
    Dim myApp As Word.Application 
    Set myApp = CreateObject("Word.Application")  
      
    Dim myDoc As Word.Document 
    Set myDoc = myApp.Documents.Add(Template:="scheda2.dot") 
    Dim myData As DAO.Database, myRec As DAO.Recordset 
    Set myData = CurrentDb 
    Dim cognome As String 
    Dim nome As String  
    'Compila il documento con i rispettivi campi' 
    Set myRec = myData.OpenRecordset("SELECT cognome, nome, cf, data FROM [esponenti] where ID like '" & i & "' ") 
    myDoc.FormFields("cognome").Result = myRec![cognome] 
    myDoc.FormFields("nome").Result = myRec![nome] 
    myDoc.FormFields("cf").Result = myRec![cf] 
    myDoc.FormFields("data").Result = myRec![data] cognome = myRec![cognome] nome = myRec![nome]  
    myDoc.SaveAs ("C:\Sound\" & cognome & " " & nome & ".doc")  
    myApp.Visible = True  myDoc.Saved = True  
    Set myDoc = Nothing  myApp.Quit  
    Set myApp = Nothing  Next  End Sub

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.