General |
6.131 Inviare da VBA uno o più file per fax usando FaxServer di Windows XP |
Sergio Mazza |
(D) Vorrei poter inviare dal codice VBA di Access un report attraverso il fax di Windows XP, ma senza dover scegliere la stampante fax dal menu a tendina delle stampanti e senza poi dover fare la procedura guidata di invio fax. (R) Se Windows XP ha il servizio fax puoi utilizzare quello; nel codice VBA che segue trovi come inviare per fax i file contenuti in una cartella, quindi anche il file ottenuto dal metodo OutputTo e relativo ad un report: On Error GoTo inviaFax_err '--> creo il file di log Dim nomeFileLog As String nomeFileLog = "C:\liste\logFaxInvio_" & Format(Date, "ddmmyyyy") & ".txt" Open nomeFileLog For Output As #1 '--> dichiarazione oggetti Dim oFso As Scripting.FileSystemObject, oDoc As Object Dim oFax As FaxServer, oFaxDoc As FaxDoc, JobId As Variant '--> dichiarazione variabili Dim numeroFaxDaComporre As String, posInizio As Integer '--> creazione oggetti Set oFso = CreateObject("Scripting.FileSystemObject") Set oFax = CreateObject("FaxServer.FaxServer") '--> inizio impostazione server fax Print #1, "'--> inizio impostazione server fax" With oFax .Connect "" '<-- creo una connessione (al pc), se stringa nulla é il pc locale .ArchiveDirectory = "C:\Documenti\Fax\Fax inviati" '<-- directory dove posizionare i fax inviati .ArchiveOutboundFaxes = 1 '<-- salvataggio di una copia del fax nella cartella .Branding = 1 '<-- scrivi intestazione del fax nel documento .DirtyDays = 5 '<-- giorni per ritentare l'invio se non riuscito .Retries = 1 '<-- numero ore per ritentare l'invio (del fax) non riuscito .RetryDelay = 5 '<-- numero minuti per ritentare l'invio (del fax) non riuscito .ServerCoverpage = 0 '<-- non invio la pagina di informazioni .UseDeviceTsid = 1 '<-- invio l'identificativo del fax che trasmette End With Print #1, "'--> fine impostazione server fax" '<-- fine impostazione server fax '--> ciclo per ogni documento nella cartella dei fax Print #1, "'--> ciclo per ogni documento nella cartella dei fax" For Each oDoc In oFso.GetFolder("C:\liste\FaxDaInviare\").Files '--> inizio creazione documento fax '--> creazione documento fax Set oFaxDoc = oFax.CreateDocument("C:\liste\FaxDaInviare\" & oDoc.Name) '--> inizio impostazione e invio documento fax posInizio = InStr(1, oDoc.Name, "_") + 1 '<-- posizione carattere underscore numeroFaxDaComporre = Mid(oDoc.Name, posInizio) '<-- tolgo i numeri prima del carattere underscore numeroFaxDaComporre = Left(numeroFaxDaComporre, Len(numeroFaxDaComporre) - 4) '<-- tolgo l'estensione del file e il punto With oFaxDoc .FaxNumber = "0" & numeroFaxDaComporre '<-- numero del fax Print #1, numeroFaxDaComporre & "'<-- numero del fax da comporre" On Error Resume Next '<-- verifica errore invio fax JobId = .Send '<-- invio fax Print #1, "'<-- invio fax: " & oDoc.Name If Err.Number <> 0 Then '<-- se si é verificato un errore Print #1, "Errore: " & Application.AccessError(Err.Number) & " su invio fax: " & oDoc.Name & ", JobId: " & JobId Else Print #1, "Fax: " & oDoc.Name & ", JobId: " & JobId & "...Inviato." End If End With '--> fine impostazione documento fax On Error GoTo 0 '<-- ripristino la gestione degli errori '--> fine creazione documento fax Set oFaxDoc = Nothing Next On Error GoTo 0 '<-- reimposto la gestione degli errori inviaFax_exit: Print #1, "Disconnessione dal server fax." oFax.Disconnect '<-- disconnetto il server fax Print #1, "'--> distruggo gli oggetti" '--> distruggo gli oggetti Set oFso = Nothing Set oFax = Nothing Print #1, "Invio fax terminato." Close #1 Exit Sub inviaFax_err: Print #1, "Disconnessione dal server fax." Print #1, "'--> distruggo gli oggetti" '--> distruggo gli oggetti Set oFso = Nothing Set oDoc = Nothing Set oFax = Nothing Set oFaxDoc = Nothing Set JobId = Nothing Print #1, Application.AccessError(Err.Number), vbCritical + vbOKOnly, "Routine InviaFax - Errore" Close #1La routine: 1) Invia tutti i file presenti in una cartella "C:\liste\FaxDaInviare\"; i file hanno nel nome il numero di telefono del fax, ad esempio il nome potrebbe essere 06656566_docFax.doc; 2) Utilizza un file di testo come log per le operazioni; 3) Salva una copia dei fax inviati nella cartella "C:\Documenti\Fax\Fax inviati"; Prima di utilizzare il codice si deve avviare il servizio fax… Considerazioni di Fidirico (lavoro) Ho provato questo codice VBA e funziona bene per inviare per fax dei file usando il FaxServer di Windows XP. Da questo esempio si possono trarre ottimi spunti per costruire applicazioni davvero non banali. Gli oggetti usati sono ben documentati su MSDN; ad esempio trovi decritto l'oggetto FaxServer in questo link: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fax/faxlegacyvb_836n.asp |