Domanda MACRO APERTURA FILE

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Salve a tutti.
Sto realizzando una sorta di database per facilitare la ricerca di documenti.

Ad ogni argomento verranno collegati diversi tipi di documenti ( PDF, Word ed anche Excel ).

Per fare questo volevo comandare la richiesta di apertura di ognuno di questi documenti, cliccando su di un "button" che lanci una macro, la quale altro non faccia che aprire quel determinato documento.

Bene, io questa cosa non riesco a farla se non utilizzando il sistema dei collegamenti ipertestuali che però vorrei non utilizzare perchè troppo facilmente perdono il collegamento ed ogni volta tocca rifarlo.

Qualcuno di voi mi può aiutare?

Ringrazio anticipatamente chi vorrà farlo.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Buongiorno R @riccardo1960 , guarda qui :
Buon lavoro.
Ciao Davide e grazie per il tuo intervento.

No, quei video non mi sono di aiuto per ciò che voglio fare io.
Cerco di spiegarmi meglio.

Dunque....su di una riga io elenco la commessa, l'ordine, la data dell'ordine ed il cliente, quindi 4 colonne. Dalla quinta colonna in poi io voglio inserire dei "button" contenenti delle macro i quali, una volta premuti, mi andranno ad aprire appunto l'ordine ( che generalmente è in PDF, un altro "button" mi apre l'offerta che avevo fatto, un'altro ancora mi apre un altro documento legato a quella commessa, ecc. ecc.

Questa cosa qui la potrei fare agevolmente con dei collegamenti ipertestuali ma per esperienza personale so che spesso i collegamenti tendono a perdersi costringendo ogni volta a rifarli. Inoltre, i file che devo visualizzare si trovano sul cloud per cui con i collegamenti ipertestuali, il file in questione me lo apre sul browser invece che con l'applicazione specifica quindi è tutto più lento.

Ti ringrazio e spero di essere stato più chiaro per tutti.
 

Zer0Kelvin

VBA Expert
Staff
19 Novembre 2016
1.945
115
60
Teramo (Provincia)
2010
159
Ciao a tutti.
Non mi sembra una buona idea perchè ti costringerebbe, se i file sono parecchi come sospetto, ad un lavoro enorme per inserire i buttons e scrivere il relativo codice.
Sarebbe meglio scrivere una macro da attivare a scelta con: dippio click, combinazione di tasti, o pulsante, che apra il file basandosi sulla cella selezionata o cliccata.
Dovresti allegare un file di esempio con pochi dati di fantasia e le informazioni necessarie a determinare il percorso del file.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Ciao a tutti.
Non mi sembra una buona idea perchè ti costringerebbe, se i file sono parecchi come sospetto, ad un lavoro enorme per inserire i buttons e scrivere il relativo codice.
Sarebbe meglio scrivere una macro da attivare a scelta con: dippio click, combinazione di tasti, o pulsante, che apra il file basandosi sulla cella selezionata o cliccata.
Dovresti allegare un file di esempio con pochi dati di fantasia e le informazioni necessarie a determinare il percorso del file.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Allego il file di esempio.

Cosi come per i collegamenti ipertestuali, con una macro, vorrei far si che al click su ognuno di quei button, mi si aprisse il documento relativo.
Vorrei usare le macro per due motivi:
1) i collegamenti ipertestuali, per esperienza avuta con altri file, tendono a scollegarsi e poi tocca rifare i collegamenti;
2) siccome i file da aprirsi sono sul cloud, farlo mediante collegamenti ipertestuali fa si che vengano visualizzati con il browser anzichè con l'applicazione specifica per cui, per l'apertura, occorrono svariati secondi mentre direttamente l'apertura è quasi immediata.
Ho provando a generare la macro con il registratore di macro ma non registra l'apertura del file....insomma si può fare solo digitando un codice VBA che non dovrebbe neppure essere troppo lungo.
E non è un lavoro lungo...o meglio, ora avrò un pò da fare perchè ho già una trentina di commesse da inserire nel database ma una volta fatto, si tratterà di farlo al momento dell'apertura di una nuova commessa.
Quindi se tu o qualcun'altro sa come fare, chiedo gentilmente di spiegarmelo.

Grazie ancora.
 

Allegati

Zer0Kelvin

VBA Expert
Staff
19 Novembre 2016
1.945
115
60
Teramo (Provincia)
2010
159
Il modo più semplice è usare l'evento BeforeDoubleClick del foglio.
Inserisci questo codice nel modulo del foglio interessato
Visual Basic:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   
    Dim Spl
    Dim FExt As String, Command As String
   
    With Target
        If .Column > 4 And .Column < 8 And .Value <> "" Then
            Spl = Split(.Value, ".")
            FExt = LCase(Spl(UBound(Spl)))
            If FExt = "pdf" Then
               Command = """" & "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" & """" <=== Modificare se necessario
            ElseIf FExt Like "xl??" Then
                Command = "Excel.Exe"
            ElseIf FExt Like "doc?" Then
                Command = "WinWord.exe"
            End If
            Shell Command & " " & """" & .Value & """"
            Cancel = True
        End If
    End With
   
End Sub
Ho ipotizzato che gli indirizzi dei files siamo contenuti nelle colonne E, F e G; se non è così, modifica i valori di Column nella riga
Visual Basic:
If .Column > 4 And .Column < 8 And .Value <> "" Then
Potrebbe essere necessario modificare anche il percorso di Acrobat Reader o altro programma che usi per aprire i pdf.
Il codice funziona su files contenuti nel PC, ma dovrebbe funzionare allo stesso modo con files in cloud.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Il modo più semplice è usare l'evento BeforeDoubleClick del foglio.
Inserisci questo codice nel modulo del foglio interessato
Visual Basic:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  
    Dim Spl
    Dim FExt As String, Command As String
  
    With Target
        If .Column > 4 And .Column < 8 And .Value <> "" Then
            Spl = Split(.Value, ".")
            FExt = LCase(Spl(UBound(Spl)))
            If FExt = "pdf" Then
               Command = """" & "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" & """" <=== Modificare se necessario
            ElseIf FExt Like "xl??" Then
                Command = "Excel.Exe"
            ElseIf FExt Like "doc?" Then
                Command = "WinWord.exe"
            End If
            Shell Command & " " & """" & .Value & """"
            Cancel = True
        End If
    End With
  
End Sub
Ho ipotizzato che gli indirizzi dei files siamo contenuti nelle colonne E, F e G; se non è così, modifica i valori di Column nella riga
Visual Basic:
If .Column > 4 And .Column < 8 And .Value <> "" Then
Potrebbe essere necessario modificare anche il percorso di Acrobat Reader o altro programma che usi per aprire i pdf.
Il codice funziona su files contenuti nel PC, ma dovrebbe funzionare allo stesso modo con files in cloud.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Ti ringrazio Zerokelvin per la tua risposta...si vede che sei un esperto di VBA..
Io pensavo ad una semplice routine da inserire su ciascun button cambiando solo il file da puntare di volta in volta ma evidentement,e non si può e cosi, per me, è trrrroppo complicato.

Ti ringrazio tantissimo ancora....abbandonerò il progetto .....Buon proseguimento di giornata.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Ma non ci sono celle che contengono il percorso dei vari file.
Quei rettangoli con su scritto Ordine, Offerta, ecc. ecc. che si vedono nel file di esempio che ho postato, dovrebbero essere dei button che una volta cliccati attivano una macro che, a sua volta, mi va ad aprire quell'ordine, quell'offerta o altro.
Ti giuro ma non capisco la storia del doppio click....ma sono io l'ignorante e ti chiedo scusa.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Un altra persona mi aveva suggerito di attivare questa macro premendo il button:

Sub ApriFile()
strPath = "F:\Download\NomeFile.pdf"
ThisWorkbook.FollowHyperlink strPath
End Sub

e funziona.
Ma quando la copio in un altro button cambiando il percorso del file, mi da quest'errore:

errore di run time " 2147221014(800401ea)' Non è possibile aprire il file specificato " e mi evidenzia l'ultimo comando della routine ( ThisWorkbook.FollowHyperlink strPath).
 

davideb

Utente abituale
26 Luglio 2019
560
30
office 2016
50
Buongiorno R @riccardo1960 , la macro va bene , ma come detto da Zer0Kelvin @Zer0Kelvin cappello_saluta
Non mi sembra una buona idea perchè ti costringerebbe, se i file sono parecchi come sospetto, ad un lavoro enorme per inserire i buttons e scrivere il relativo codice. .
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Buongiorno R @riccardo1960 , la macro va bene , ma come detto da Zer0Kelvin @Zer0Kelvin cappello_saluta
Non mi sembra una buona idea perchè ti costringerebbe, se i file sono parecchi come sospetto, ad un lavoro enorme per inserire i buttons e scrivere il relativo codice. .
Buongiorno R @riccardo1960 , la macro va bene , ma come detto da Zer0Kelvin @Zer0Kelvin cappello_saluta
Non mi sembra una buona idea perchè ti costringerebbe, se i file sono parecchi come sospetto, ad un lavoro enorme per inserire i buttons e scrivere il relativo codice. .
Se la macro va bene, perchè mi da quell'errore?
Si può correggerla in modo che non lo dia più?
E come ho detto non c'è poi tutto questo lavoro.
Basta cambiare il puntamento del file e copiare la macro di button in button.
E questo solo ora perchè ho in arretrato una trentina di commesse.
Quando sarò in pari sarà il male di impiegare due minuti per farlo, di volta in volta

Grazie
 

davideb

Utente abituale
26 Luglio 2019
560
30
office 2016
50
Buongiorno R @riccardo1960 , procedi nel seguente modo , inserisci in un modulo del tuo file il relativo codice VBA che hai postato, tante volte quanti sono il numero dei pulsanti che andrai a creare relativamente ai file che dovrai aprire :

Visual Basic:
Sub Pulsante1_Click()
strPath = "C:\Users\xxx\yyyy\file1.pdf"
ThisWorkbook.FollowHyperlink strPath
End Sub

Sub Pulsante2_Click()
strPath = "C:\Users\xxxx\yyyy\file2.xlsx"
ThisWorkbook.FollowHyperlink strPath
End Sub
Buon lavoro.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Buongiorno R @riccardo1960 , procedi nel seguente modo , inserisci in un modulo del tuo file il relativo codice VBA che hai postato, tante volte quanti sono il numero dei pulsanti che andrai a creare relativamente ai file che dovrai aprire :

Visual Basic:
Sub Pulsante1_Click()
strPath = "C:\Users\xxx\yyyy\file1.pdf"
ThisWorkbook.FollowHyperlink strPath
End Sub

Sub Pulsante2_Click()
strPath = "C:\Users\xxxx\yyyy\file2.xlsx"
ThisWorkbook.FollowHyperlink strPath
End Sub
Buon lavoro.
Proverò senza meno.
Nel frattempo ti ringrazio.
Appena fatto ti farò sapere.
 

riccardo1960

Utente junior
19 Maggio 2017
59
6
la spezia
2010
1
Si, perfetto.
Funziona benissimo.
Ora come da voi predetto ho un pò di lavoro ma quando avrò finito e dovrò aggiungere una nuova commessa sarà il male di impiegare 3 o 4 minuti per aggiungere button e routine, di volta in volta.
Grazie tante a tutti voi
 

davideb

Utente abituale
26 Luglio 2019
560
30
office 2016
50
Ok allora provvedi a chiudere la discussione come risolta per come fare guarda qui :
Buon lavoro.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!