scrivo per la prima volta su questo forum dopo averne usufruito in lungo e in largo.
Ieri avevo un problema, ho trovato una soluzione, funziona... ma non capisco perché
Problema: Ho scritto una macro che mi esporta un foglio in pdf. Per necessità il nome del pdf è fisso, così come il percorso: ogni volta che avvio la macro il pdf DEVE essere sovrascritto. Ma se il file pdf risultato è aperto ciò non è possibile, per cui mi viene dato un errore e la macro si pianta.
Soluzione: inserire ad inizio macro una verifica dell'apertura del file. In questo caso ->Exit Sub
La soluzione l'ho trovata qui: https://support.microsoft.com/it-it/kb/291295, l'ho modificata minimamente secondo le mie esigenze (e scarse conoscenze) e tutto funziona perfettamente, ma non so perché... e quindi se in futuro dovrò rimetterci mano sono fregato.
Qualcuno di voi può spiegarmi per favore la logica di questa funzione? I commenti non mi sono molto di aiuto...
- Codice: Seleziona tutto
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer
On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.
' Check to see which error occurred.
Select Case errnum
' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False
' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True
' Another error occurred.
Case Else
Error errnum
End Select
End Function
La funzione viene usata in questo if:
- Codice: Seleziona tutto
' Check se il file pdf è aperto, nel caso uscire dalla sub
If IsFileOpen("C:\Windows\Temp\foglio.pdf") Then
MsgBox "Chiudere il file PDF del Report per proseguire."
Exit Sub
End If
N.B.: sono autodidatta del tipo "devo fare questo, vado a cercare come si fa" e le mie basi di programmazione risalgono a fortran77.. per cui per favore siate pazienti.
N.B.: magari esiste un modo MOLTO più semplice di risolvere il problema e io non lo so... ben vengano altre soluzioni.
Grazie in anticipo.