Condividi tramite

Apertura link cartella esterna

Anonimo
2019-07-17T16:40:38+00:00

Buongiorno a tutti.

Caso: tramite pulsante in una sottomaschera vorrei aprire una cartella esterna che consenta l'archiviazione di un file.

Soluzione: creato pulsante e relativo codice

Private Sub P_salva_rapporto_Click()

On Error GoTo Err_cartella_server_Click

            Application.FollowHyperlink "\dir1\dir2\etc" & Forms!M_generatori!padiglione.Value

Exit_P_salva_rapporto_Click:

    Exit Sub

Err_cartella_server_Click:

MsgBox "Non esiste una cartella file relativa al GE, oppure è stata spostata o modificata." & vbCrLf & "Verificare la situazione sul server accedendo alla cartella GE_X_db." & vbCrLf & "(pulsante di sotto)." & vbCrLf & "GRAZIE"

    Resume Exit_P_salva_rapporto_Click

End Sub

La cartella esterna presenta un nome esteso (ad es.: PAD12) che è lo stesso che visualizzo nella casella combinata della mia maschera principale, ma il comando mi restituisce un errore; io credo perché dovrei nella parte di istruzione  Forms!M_generatori!padiglione.Value  indicare qualcosa del tipo "Column2". 

In rete non ho trovato esempi o altro (o non ho capito), qualcuno potrebbe cortesemente indicarmi come scrivere correttamente il riferimento?

Grazie

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-07-18T14:39:37+00:00

ciao Alberto,

[…]

Come puoi vedere dal codice che posto sotto, a parte alcune modifiche cosmetiche alla MsgBox, l'indirizzo esterno a cui punto è solo in parte una costante, provo a spiegare meglio:

[…]

cosmetiche mi e' piaciuto :-))!.

[…]

parte una costante, provo a spiegare meglio:

\dir1\dir2\etc*nome prelevato dalla combo*\esito_prove

quindi ho utilizzato la costante, ed accodato alla parte variabile il folder: \esito_prove.

[…]

….mmmm….beh, non vorrei interpretare male, la costante nel mio modo di vedere la cosa, ha senso per farsi che nella tabella risieda solo la cartella oggetto di apertura o la cartella madre nel caso in cui il percorso sia piu' complesso perche' 

[…]

VBA.MsgBox Prompt:="La cartella selezionata:" & vbNewLine & .Column(1) & " \ " & "esito_prove"

[…]

esito prove nel caso in cui il folder non esista viene sempre visualizzato….ma ripeto, lo scenario completo lo conosci per bene tu, mi esprimo solo per quanto all'aspetto logico/tecnico.

[…]

Scusa l'ignoranza, ma vorrei capire meglio, oltre a migliorare la leggibilità del codice, la modifica che mi suggerisci quali vantaggi porta? Provo a buttarne una li: il comando resta vincolato alla subform e non va a interagire con altre parti?

[…]

preferisco non utilizzare mai la verbosa modalita' di riferimento form/subForms/oggetto con forms!....ect ove possibile ovviamente e appoggiarmi ad altre proprieta' come quella parent nel caso sopra citato.

Per il blocco with, oltre che a rendere il codice maggiormente leggibile ed elegante, eviti di richiamare nel codice sempre gli stessi oggetti, indicandolo solo una volta nel blocco with.

Questo, aiuta il codice ad essere eseguito più rapidamente.

[…]

Grazie ancora per la disponibilità

Ciao

Alberto

Prego!

HTH.

Ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-07-18T06:38:58+00:00

ciao Aberto,

definisci una costante per la parte fissa del path e concatenala con il resto del percorso :

Const strPath As String = "\dir1\dir2\etc"

e valuta anche la proprieta' parent per fare riferimento alla main form, wrappando il tutto in un blocco with...end with.

Private Sub P_salva_rapporto_Click()

Const strPath As String = "\dir1\dir2\etc"

With Me.Parent!padiglione

If Len(.Column(1) & vbNullString) = 0 Then

        VBA.MsgBox Prompt:="non hai selezionato alcun path!", _

               buttons:=vbCritical + vbOKOnly, _

               title:="Warning"

        Exit Sub

    End If

    If Not FolderExists(strPath & .Column(1)) Then

            VBA.MsgBox Prompt:="Il folder selezionato:" & vbNewLine & .Column(1) & vbNewLine & " ? insistente!", _

                   buttons:=vbCritical + vbOKOnly, _

                   title:="Warning"

        Exit Sub

    End If

    'Application.FollowHyperlink "\dir1\dir2\etc\ " & Forms!M_generatori!padiglione.Column(1)

    VBA.Shell "explorer.exe " & strPath & .Column(1), vbNormalFocus

End With

end sub

ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-07-17T18:36:17+00:00

ciao Alberto,

come hai impostato l'orgine riga della combo padiglione?

controlla quale colonna hai impostato come colonna associata, deve essere quella che contiene il path tieni, conto che il conteggio delle colonne parte da zero la proprietà column ha base zero.

Supponengo sia la seconda, la colonna che contiene il path da aprire, io rivedrei il codice che hai mostrato come segue.

Se vuoi gestire l'errore va bene, ma dovresti essere maggiormente preciso in modo da intercettare il codice di errore corretto quando il folder non esiste.

Vedi questa soluzione, fossi io procederei come segue, assumo che la combo sia nella stessa form in cui hai il command button che scatena il tutto.

Private Sub P_salva_rapporto_Click()

With Me

    If Len(.padiglione & vbNullString) = 0 Then

        VBA.MsgBox Prompt:="non hai selezionato alcun path!", _

               buttons:=vbCritical + vbOKOnly, _

               title:="Warning"

        Exit Sub

    End If

    If Not FolderExists(.padiglione.Column(1)) Then

            VBA.MsgBox Prompt:="Il folder selezionato:" & vbNewLine & .padiglione.Column(1) & vbNewLine & " ? insistente!", _

                   buttons:=vbCritical + vbOKOnly, _

                   title:="Warning"

        Exit Sub

    End If

    'Application.FollowHyperlink .padiglione.Column(1)

    VBA.Shell "explorer.exe " & .padiglione.Column(1), vbNormalFocus

End With

End Sub

Private Function FolderExists(strPathFolder As String) As Boolean

      On Error Resume Next

      FolderExists = ((GetAttr(strPathFolder) And vbDirectory) = 16)

End Function

ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-07-18T06:18:33+00:00

    Ciao Sandro.

    Grazie per la risposta, effettivamente sbagliavo il puntamento alla combo.

    Decisamente migliore e più elegante la tua soluzione (sono un apprendista) quindi...:

    Il commad button è in una subform, conseguentemente ho modificato il tuo codice per puntare alla form principale, il risultato è questo e funziona:

    Private Sub P_salva_rapporto_Click()

    If Len(Forms!M_generatori!padiglione.Column(1) & vbNullString) = 0 Then

            VBA.MsgBox Prompt:="non hai selezionato alcun path!", _

                   buttons:=vbCritical + vbOKOnly, _

                   title:="Warning"

            Exit Sub

        End If

        If Not FolderExists("\dir1\dir2\etc\ " & Forms!M_generatori!padiglione.Column(1)) Then

                VBA.MsgBox Prompt:="Il folder selezionato:" & vbNewLine & Forms!M_generatori!padiglione.Column(1) & vbNewLine & " ? insistente!", _

                       buttons:=vbCritical + vbOKOnly, _

                       title:="Warning"

            Exit Sub

        End If

        'Application.FollowHyperlink "\dir1\dir2\etc\ " & Forms!M_generatori!padiglione.Column(1)

        VBA.Shell "explorer.exe " & \dir1\dir2\etc\ " & Forms!M_generatori!padiglione.Column(1), vbNormalFocus

    End Sub

    Private Function FolderExists(strPathFolder As String) As Boolean

          On Error Resume Next

          FolderExists = ((GetAttr(strPathFolder) And vbDirectory) = 16)

    End Function

    Metto la spunta su risolto.

    Grazie ancora e buona giornata

    Alberto

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni