Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    10

    [VBA/OFFICE] collegamento a file, "relativo"

    Ciao a tutti,
    ho inserito in Access un pulsante che mi apre un file del disco rigido facendo così:

    Option Compare Database
    Option Explicit

    Const PATH = "C:\temp\"

    Private Const SW_SHOWNORMAL As Long = 1

    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _

    etc, etc........

    il problema è come faccio a creare il percorso predefinito relativo?
    cioè se il file sta su un server come modifico il C: in qualcosa di generico?
    avevo provato ..\ ma non va.

    grazie mille

  2. #2
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Una soluzione, se per "relativo" intendi relativo al path dell'applicazione, è usare l'inganno: puoi creare un percorso assoluto ma calcolato in base al percorso dell'applicazione (se per "relativo" intendi questo). Se ad esempio il tuo file è nella sottocartella TEMP, la riga
    codice:
    percorso = App.Path + "\TEMP\" + nomeFile
    ti restituisce il suo percorso assoluto dal punto di vista della macchina, ma relativo da quello del programmatore, che non è costretto a riscriverlo ogni volta che sposta l'applicazione in altre cartelle.
    Sono ovviamente possibili navigazioni più complicate, usando nel path codici come il ".." per risalire di una o più cartelle.

    Svegliati, Neo. Matrix ti possiede...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    10
    ...capito, ma l'istruzione che mi hai indicato la inserisco nelle costanti?
    cioè così:

    Option Compare Database
    Option Explicit

    Const percorso = App.Path + "\TEMP\" + nomeFile
    'Const PATH = "C:\temp\"

    Private Const SW_SHOWNORMAL As Long = 1

    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _

    etc, etc........


    Grazie

  4. #4
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Originariamente inviato da pinzerik
    ...capito, ma l'istruzione che mi hai indicato la inserisco nelle costanti?
    cioè così:

    Option Compare Database
    Option Explicit

    Const percorso = App.Path + "\TEMP\" + nomeFile
    'Const PATH = "C:\temp\"

    Private Const SW_SHOWNORMAL As Long = 1

    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _

    etc, etc........

    Grazie
    Dato che l'espressione App.Path (o Application.Path) non è costante, è impossibile inserirla nelle costanti; puoi però inserire tra le costanti la parte invariabile del percorso (che se ho capito bene nel tuo caso è "\temp\", e poi concatenarla ad App.Path dove serve all'interno delle procedure in cui la usi.
    Svegliati, Neo. Matrix ti possiede...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    10
    ...ti ringrazio, ma sono debole in VB, ho riadattato parti trovate in rete.....
    ti allego tutto il codice:

    Option Compare Database
    Option Explicit

    Const PATH = "I:\dati\Digi\"

    Private Const SW_SHOWNORMAL As Long = 1

    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

    Private Sub AprireMappa(ByVal strPath As String)
    Call ShellExecute(Me.hwnd, "Open", strPath, vbNullString, vbNullString, SW_SHOWNORMAL)
    End Sub


    Private Sub btnOpen_Click()
    Call AprireMappa(PATH & Me.codice.Value)
    End Sub

    Private Sub Comando90_Click()
    On Error GoTo Err_Comando90_Click


    Screen.PreviousControl.SetFocus
    DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

    Exit_Comando90_Click:
    Exit Sub

    Err_Comando90_Click:
    MsgBox Err.Description
    Resume Exit_Comando90_Click

    End Sub
    Private Sub Comando93_Click()
    On Error GoTo Err_Comando93_Click


    Screen.PreviousControl.SetFocus
    DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

    Exit_Comando93_Click:
    Exit Sub

    Err_Comando93_Click:
    MsgBox Err.Description
    Resume Exit_Comando93_Click

    End Sub





    ...in problema è far diventare relativo il I:
    in Const PATH = "I:\dati\Digi\"


    GRAZIE MILLE

  6. #6
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Supponendo che la parte relativa sia "\dati\DIGI\", basta sostituire le righe
    codice:
    Const PATH = "I:\dati\Digi\"
    
    Call AprireMappa(PATH & Me.codice.Value)
    con

    codice:
    Const PATH_RELATIVA = "\dati\Digi\"
    
    Call AprireMappa(Application.Path & PATH_RELATIVA & Me.codice.Value)
    Svegliati, Neo. Matrix ti possiede...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    10
    no, scusami, mi sono spiegato male;
    l'archivio sta sul server e quindi è I:\ che deve essere relativo alla connessione di rete dell'utente che potrà essere W:\ o X:\ etc;
    la parte fissa è invece "\dati\Digi\"


    grazie mille

  8. #8
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Originariamente inviato da pinzerik
    no, scusami, mi sono spiegato male;
    l'archivio sta sul server e quindi è I:\ che deve essere relativo alla connessione di rete dell'utente che potrà essere W:\ o X:\ etc;
    la parte fissa è invece "\dati\Digi\"


    grazie mille
    Quindi basterebbe sostituire ad Application.Path la connessione di rete corrente?
    Svegliati, Neo. Matrix ti possiede...

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.