Newsgroup: it.comp.appl.access
Titolo: Aprire un file in base all'estensione

In una form cliccando su un campo "Nome" mi estraggo il valore di un altro
campo nascosto che corrisponde al percorso di un file ,leggo l'estensione
del file
e con la funzione Shell vorrei aprire questo file.Il problema č che access
mi ritorna l'errore 53 "Impossibile trovare il file" .Ora il file esiste.
Qualcuno sarebbe cosě gentile da provare questa routine?Basta sostituire
alla riga
strPath = Me.Path.Value
la riga
strPath = InputBox("Pippo")
e dargli in pasto il percorso di un file esistente.Per il tipo di file
guardate il Select Case.
Private Sub Nome_DblClick(Cancel As Integer)
Dim strPath As String
Dim strExtention As String
Dim strCartella As String
Dim Const intX = 4
Dim RetVal
On Error GoTo ErrHandle
'strPath = Me.Path.Value
strPath = InputBox("Pippo")
intX = 4
strExtention = Right(strPath, intX)
Select Case strExtention
 Case ".doc"
strCartella = "C:\Programmi\Microsoft Office\Office\Word.exe"
Case ".pdf"
strCartella = "C:\Programmi\Adobe\Acrobat 6.0\Reader\AcroRd32.exe"
Case ".rtf"
strCartella = "C:\Programmi\Microsoft Office\Office\Word.exe"
Case ".exe"
strCartella = "C:\Programmi\Microsoft Office\Office\Excel.exe"
Case ".mdb"
strCartella = "C:\Programmi\Microsoft Office\Office\Access.exe"
End Select
RetVal = Shell(strCartella & strPath, vbNormalNoFocus)
ErrHandle:
MsgBox "Errore " & Err.Number & " " & Err.Description & Err.Source
End Sub

 End Sub
Non ho avuto il tempo di provarlo, perň mi accorgo che il caso Excel viene
indicato come estensione .exe.
??
--
rgrds
Sc
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Sc
Manca lo spazio finale nella stringa che ti restituisce la cartella.
Pertanto -strCartella & strPath- ti restituisce ad esempio per il caso
doc:
-ProgrammiMicrosoft OfficeOfficeWord.exePippo.doc- invece di
-ProgrammiMicrosoft OfficeOfficeWord.exe Pippo.doc-
--
rgrds
SC


 ha scritto nel messaggio
news:d8uogf$fh2$1...@news.newsland.it...

Hai ragione ma sostituento con
RetVal = Shell(strCartella & " " & strPath, vbNormalNoFocus)
il risultato non cambia.
P.S.
Copiando ed incollando mi si sono perse le \ tra le cartelle ma nel codice
ci sono.
SunRex
SunRex

 SunRex
Ho creato un piccolo esempio e funziona perfettamente.
Ti riposto il codice con qualche piccolo aggiustamento:
********
Inizia
Dim strPath As String
Dim strExtention As String
Dim strCartella As String
Dim intX As Integer
Dim RetVal As Variant
On Error GoTo ErrHandle
'strPath = Me.Path.Value
strPath = InputBox("Pippo")
intX = 4
strExtention = Right(strPath, intX)
Select Case strExtention
Case ".doc"
 strCartella = "C:\Programmi\Microsoft Office\Office\WinWord.exe"
Case ".pdf"
 strCartella = "C:\Programmi\Adobe\Acrobat 6.0\Reader\AcroRd32.exe"
Case ".rtf"
 strCartella = "C:\Programmi\Microsoft Office\Office\WinWord.exe"
Case ".exe"
 strCartella = "C:\Programmi\Microsoft Office\Office\Excel.exe"
Case ".mdb"
 strCartella = "C:\Programmi\Microsoft Office\Office\MSAccess.exe"
End Select
 RetVal = Shell(strCartella & " " & strPath, vbNormalNoFocus)
ErrHandle:
MsgBox "Errore " & Err.Number & " " & Err.Description & Err.Source
End Sub
Finisce
********
Ti faccio notare che l'eseguibile di Word, nel mio Office 2000  è
WinWord.exe, e quello di Access è MSAccess.exe.


 ha scritto nel messaggio
news:I4Bse.35627$75.19...@news4.tin.it...

Sinceramente non capisco il motivo di questa complicazione.
Windows nei suoi registri associa ad un'estensione un File EXE.
Quindi ci sarebbero un le strade per ricavare l'Exe associato
a partire dalle API FindExecutable, ma in questo caso ritengo
che lasciare a Win il lavoro sia la cosa piů semplice:
Prova questa funzione e passa il File da aprire, qualsiasi estensione
tu abbia.
Public Sub ExecuteFile(FilePath As String)
'Esegue file
On Error GoTo error
Dim ret As Integer
ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & (FilePath))
Exit Sub
error:  MsgBox Err.Description, vbExclamation, "Error"
End Sub
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 wrote in message
news:I4Bse.35627$
75.19...@news4.tin.it
Sinceramente non capisco il motivo di questa complicazione.
Windows nei suoi registri associa ad un'estensione un File EXE.
Quindi ci sarebbero un le strade per ricavare l'Exe associato
a partire dalle API FindExecutable, ma in questo caso ritengo
che lasciare a Win il lavoro sia la cosa più semplice:
Prova questa funzione e passa il File da aprire, qualsiasi estensione
tu abbia.
Public Sub ExecuteFile(FilePath As String)
'Esegue file
On Error GoTo error
Dim ret As Integer
ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & (FilePath))
Exit Sub
error:  MsgBox Err.Description, vbExclamation, "Error"
End Sub
Ciao
-- 
@Alex (Alessandro Baraldi)
-----------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
-----------------------------------------------
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


La guida in linea ce l'ho anche io......la funzione Shell la conosco ed
infatti l'ho usata.
Forse non hai seguito la discussione.
SunRex

 @Alex (Alessandro Baraldi)
Funziona perfettamente, ma non ne avevo dubbi.
Però adesso mi potresti spiegare cosa fa
ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & (FilePath))
in particolare "FileProtocolHandler"?
SunRex

 ha scritto nel messaggio
news:pbFse.13990$b5.6...@news3.tin.it...

Quel comando non fa altro che sfruttare il programma Esegui che attiveresti
dall'icona "START---ESEGUI" di WIN e sfruttare la urd.Dll alla quale fà
ricercare
il programma EXE associato, in pratica fa da Browser.
Ad esempio se vuoi lancirare un processo ed attenderne la fine:
Dim process_id As Long
Dim process_handle As Long
process_id = Shell("rundll32.exe url.dll,FileProtocolHandler " & FilePath,
vbNormalFocus)
DoEvents
process_handle = OpenProcess(SYNCHRONIZE, 0, process_id)
If process_handle <> 0 Then
WaitForSingleObject process_handle, INFINITE
CloseHandle process_handle
End If
Ho omesso le API ma sono semplici da trovare....!
Ciao
-- 
@Alex (Alessandro Baraldi)


[CUT]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vafctShell.asp
 


Ciao,
vediamo di arrivarci insieme ;-)
Allora
Event-driven
Un tipo di programma che attende che accada un evento. Ogni evento ha 
associato un sottoprogramma (chiamato handler) che gestisce l'evento. Una 
volta che l'evento ha luogo, il programma invia all'handler le 
caratteristiche dell'evento. es: l'utente preme il bottone destro del mouse, 
il programma chiama l'handler associato all'evento "tasto destro del mouse 
premuto" e gli passa la posizione del mouse. Quando il tasto viene 
rilasciato, il programma chiama l'handler associato all'evento "tasto destro 
del mouse rilasciato" e fornisce le coordinate alla quale l'evento č 
avvenuto.
Quindi handler della posizione del file...pensi possa andare ?
Buona serata
Gaspare