Newsgroup: it.comp.appl.access
Titolo: modificare campo hyperlink

ciao a tutti, (access 2016)
in un campo hyperlink ho dei percorsi lunghi alla fine dei quali ho
il nome del file. 
Come  posso mantenere il lnk visualizzando però solo il nome del file
 
es.
..\GUIDE E FILE WORD\ESEMPI EXCEL\Simulazione.xls
 
vorrei far vedere nel campo solo
Simulazione.xls
grazie


se apri Word o Excel senza editare HTML c'e' la voce modifica collegamento impertestuale e hai le 2 voci: Testo visualizzato e LINK
nella prima lo riduci come vuoi


Non hai capito cosa devo fare
devo fare una cosa in automatico su una maschera di access

Sei certo che sia una idea utile usare il campo Hyperlink se poi
 il valore ti serve pulito...?
 
Perché non fai il contrario, usi come fanno in molti, un campo
 testo e poibse vuoi attivare la chiamata al link, sfrutti la
 funzione FollowHyperlink.
 
Altrimenti usa mid$ individuando la posizione del # 
-- 
@Alex
 
 
----Android NewsGroup Reader----
https://piaohong.s3-us-west-2.amazonaws.com/usenet/index.html
 


si alex, ok
l'operatore in magazzino sceglie il file da linkare con la API quindi access crea il percorso hyperlink
altrimenti come faccio a fargli inserire solo il nome del file attraverso l'API?
non so se mi sono spiegato
ripeto in altre parole:
operatore fa doppio click sul campo, si apre la finestra per la selezione del file, sceglie il file e access aggiunge il percorso al campo
in via diversa come si potrebbe fare?
grazie Alex

 Il giorno venerdì 20 novembre 2020 alle 19:08:26 UTC+1 @Alex ha scritto:> Sei certo che sia una idea utile usare il campo Hyperlink se poi > il valore ti serve pulito...? > > Perché non fai il contrario, usi come fanno in molti, un campo > testo e poibse vuoi attivare la chiamata al link, sfrutti la > funzione FollowHyperlink. > > Altrimenti usa mid$ individuando la posizione del # > -- > @Alex > > > ----Android NewsGroup Reader---- > 
https://piaohong.s3-us-west-2.amazonaws.com/usenet/index.htmlsi
 alex, okl'operatore in magazzino sceglie il file da linkare con la API quindi access crea il percorso hyperlinkaltrimenti come faccio a fargli inserire solo il nome del file attraverso l'API?non so se mi sono spiegatoripeto in altre parole:operatore fa doppio click sul campo, si apre la finestra per la selezione del file, sceglie il file e access aggiunge il percorso al campoin via diversa come si potrebbe fare?grazie Alex
 
No le API non generano alcun percorso Hyperlink ma solo il
 percorso completo di PATH + NOMEFILE.
Poi siccome il tuo campo è di tipo HYPERLINK viene formattato:
displaytext#address#subaddress#screentip
 
Quindi il campo non deve essere di tipo Hyperlink ma TESTO.
Le API non servono basta il nativo Filedialog sono 3 righe di codice.
Se poi vuoi visualizzare il solo nome file:
 
FileName = Right(FullFileName, Len(FullFileName) -
 InStrRev(FullFileName, "\"))
 
Semplificati le cose altrimenti basta un bicchiere d'acqua..
 
@Alex



infatti Alex a me serve che l'operatore veda per semplificazione solo il nome del file
allora ho provato così
 
Dim strNomeFile As String
strNomeFile = Right(Me.percorso, Len(Me.percorso) - InStrRev(Me.percorso, "\"))
strNomeFile = Left(strNomeFile, Len(strNomeFile) - 1) ' per togliere il carattere #
MsgBox strNomeFile
Me.percorso.ControlTipText = strNomeFile
 
DOMANDA 
msgbox visualizza correttamente  il nome del file ma mi obbliga a rispondere al popup
ControlTipText non mi visualizza nel tooltip il contenuto della variabile strNomeFile bensì tutto il percorso completo
che faccio? mi tengo msgbox??
grazie
 
 

Hai capito che devi modificare il campo...?
Di conseguenza pulire il contenuto dell'attuale con una query
 update poi puoi usare questo metodo...


 -- 
 
si ok passo all'opera e poi ti dico se puoi però rispondimi a:


Vito Fanciullo <:
 
DOMANDAmsgbox visualizza correttamente il nome del file ma mi
 obbliga a rispondere al popupControlTipText non mi visualizza nel
 tooltip il contenuto della variabile strNomeFile bensì tutto il
 percorso completoche faccio? mi tengo msgbox??
 
No non ti rispondo finché non hai fatto quello che ti ho
 suggerito... perché non serve rispondere a questa
 cosa.
 
Poi riprovi e vedi cosa succede.



ok ci provo intanto vediamo se ho capito
carico il percorso del file nel campo testo con il filedialog
poi pulisco il campo lasciando solo nomeFile
poi con la funzione (evento doppio click) FollowHyperlink apro il file, giusto?
ma il percorso completo dove lo trovo se nel campo salvo solo il nome del file?

Temo tu non abbia compreso bene...
 
Il campo da Hyperlink a Testo
Però poi se lo osservi ti accorginche contiene dei pezzi tra ##
 che devi rimuovere.
Nella sostanza devi rimanere con il percorso completo:
C:\nomefolder\nomefile.xls
 
Fatto questo ti basta inserire in una query la chiamata al codice
 che ripulisce il PATH, ma questo solo ai fini di visualizzazione
 non devi farlo sul campo della tabella altrimenti perdi il
 percorso del file...
 
Secondo me devi mettere in fila mentalmente le cose in quanto hai
 molta confusione.


 -- 
ho capito alex, tu hai una forma mentis logico matematica più performante della mia, capisco fino ad un certo punto.
Adesso mi hai creato un dubbio procedurale
ok, con un campo query calcolato ripulisco il codice e lo faccio vedere all'operatore. Ma gli devo anche far vedere il campo con il link completo perché con il doppio click deve vedere le fatture scannerizzate (file pdf)
e questo è un problema che devo risolvere senza fare confusione
poi devo risolvere il filedialog per inserire il percorso del file nel campo ....per dimostrarti che ti seguo da 15 anni oramai giuro che ci provo a fare esattamente come hai detto tu
ciao


 ecco, ho risolto come hai detto tu Alex nella sostanza
ho cambiato il campo ipertesto in campo testo
ho ripulito il percorso lasciando solo  (c:\cartella\nomefile.pdf)
 
su evento doppio click del controllo relativo al campo testo:
If IsNull(Me.link_DDT) Then
Me.link_DDT= cmdlg_file()
Else
Me.Application.FollowHyperlink Me.link_DDT
End If
 
che succede?
se il campo è vuoto mi parte la funzione che inserisce il percorso file completo
 
altrimenti
mi apre il file indicato nel percorso esistente.
 
 inoltre per non far vedere all'operatore tutto il lungo percorso su evento mouseMove:
strNomeFile = Right(Me.link_DDT, Len(Me.link_DDT) - InStrRev(Me.link_DDT, "\"))
Me.link_DDT.ControlTipText = strNomeFile  
 
'******************************** 
Incollo il codice di Stefano Bettini per caricare il percorso file nel campo
 'Dichiarazioni
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
 
'Funzione da richamare
Public Function cmdlg_file()
'Autore: Stefano Bettini
'Restituisce: il percorso completo del file selezionato
Dim OpenFile As OPENFILENAME
Dim lReturn As Long
Dim sFilter As String
OpenFile.lStructSize = Len(OpenFile)
sFilter = "Ogni files (*.*)" & Chr(0) & "*.*" & Chr(0)
OpenFile.lpstrFilter = sFilter
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = String(257, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.lpstrFileTitle = OpenFile.lpstrFile
OpenFile.nMaxFileTitle = OpenFile.nMaxFile
OpenFile.lpstrInitialDir = "C:\"
OpenFile.lpstrTitle = "Selezione"
OpenFile.flags = 0
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
cmdlg_file = ""
Else
cmdlg_file = Left(OpenFile.lpstrFile, InStr(OpenFile.lpstrFile, Chr$(0)) - 1)
End If
End Function 
 
grazie che mi hai spinto al cambio radicale
ciao Vito

 
Se invece di usare le API che in questo caso proprio non servono... tu usassi una cosa simile...?
 
    Dim fDialog As Object
    Dim sRetFile  As String
    With fDialog
        ' Allow user to make multiple selections in dialog box
        .AllowMultiSelect = True
        ' Set the title of the dialog box.
        .Title = "Please select one or more files"
        ' Clear out the current filters, and add our own.
        .Filters.Clear
        .Filters.Add "All Files", "*.*"
        ' Show the dialog box. If the .Show method returns True, the
        ' user picked at least one file. If the .Show method returns
        ' False, the user clicked Cancel.
        If .Show = True Then
             'Loop through each file selected and add it to our list box.
             Me.lstFiles.Visible = .SelectedItems.Count > 0
             If .SelectedItems.Count = 1 Then
                sRetFile = .SelectedItems(1)
             Else
                For Each varFile In .SelectedItems
                   sRetFile = sRetFile  & varFile & ";"
                Next
                If Len(sRetFile)>0 Then sRetFile = Mid$(sRetFile,1,len(sRetFile)-1)
            End If
        Else
            MsgBox "You clicked Cancel in the file dialog box."
        End If
    End With
    ' nella Variabile [sRetFile] hai il File o i Files selezionato/i
 
Ciao
@Alex

Avevo mancato qualche pezzo... in particolare la definizione dell'Oggetto, in modalità LateBinding in modo da non renderlo legato alla Versione di OFFICE:
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
Essendo [msoFileDialogFilePicker=3], inserisco il valore esplicito che altrimenti senza i Riferimenti non verrebbe letto.
 
Function getFiles() As String
    Dim fDialog     As Object
    Dim sRetFile    As String
    Dim varFile     As Variant
 
    Set fDialog = Application.FileDialog(3)
    With fDialog
        ' Allow user to make multiple selections in dialog box
        .AllowMultiSelect = True ' False
        ' Set the title of the dialog box.
        .Title = "Please select one or more files"
        ' Clear out the current filters, and add our own.
        .Filters.Clear
        .Filters.Add "All Files", "*.*"
        ' Show the dialog box. If the .Show method returns True, the
        ' user picked at least one file. If the .Show method returns
        ' False, the user clicked Cancel.
        If .Show = True Then
            'Loop through each file selected and add it to our list box.
            Select Case .SelectedItems.Count
                Case Is = 0:    MsgBox "No selection done."
                Case Is = 1:    sRetFile = .SelectedItems(1)
                Case Else
                    For Each varFile In .SelectedItems
                        sRetFile = sRetFile & varFile & ";"
                    Next
                    If Len(sRetFile) > 0 Then sRetFile = Mid$(sRetFile, 1, Len(sRetFile) - 1)
            End Select
        Else
            MsgBox "You clicked Cancel in the file dialog box."
        End If
    End With
    getFiles = sRetFile
End Function
 
Ciao
@Alex