ここから本文です

Access2016である指定したフォルダ(仮名:資料)の中のファイル(ExcelやWord、PD...

kokogasokodesuさん

2018/1/1516:40:35

Access2016である指定したフォルダ(仮名:資料)の中のファイル(ExcelやWord、PDFあり)をコマンドボタンで呼出したいです。

「やりたいこと」
フォームのテキストBOX(仮名:添付資料)にファイル資料の中のAのファ

イルの名前があり、横にあるコマンドボタンを押すとそのAのファイルが開くということをやりたいです。
資料のフォルダの中には色々な拡張子(Excel、Word、PDF)のファイルがあります。拡張子が違っても同じような事はできるのでしょうか?

宜しくお願い致します。

閲覧数:
50
回答数:
4

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hatena1989さん

2018/1/1611:20:51

FollowHyperlink メソッドを使うのが一番簡単でしょう。

Application.FollowHyperlink メソッド (Access)
https://msdn.microsoft.com/ja-jp/vba/access-vba/articles/applicatio...

URLを指定すると、WEBページを開きますが、ファイルパスを指定すると、アプリと関連付けらたファイルなら開くことができます。Excel、Word、PDF なら開けるでしょう。

コード例

Application.FollowHyperlink "C:\資料\" & Me.添付資料

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

nora1962jpさん

2018/1/1603:10:36

私の環境(Win10)ではEXCELを始めとしたOfficeのソフトはパスが通っていないのでコマンドプロンプトから実行しようとしてもエラーになりました。

で適当に作ってみました(かなりいい加減)。
関連付けされた拡張子はこれだけではないのでそこは適宜。
とりあえず、Runメソッドを適用するというのもあることはあるのですが、関連付けされていない拡張子の場合開くソフトを聞かれたりするので、どうするのがいいか判断が難しいです。runメソッドの第3引数を省略すると開いたファイルの閉じるのを待たずに次のファイルを開こうとします。やりたい事によりそこのあたりは修正ください。
一応、相対パスを指定された時の対応入れようとしてますが、あまりこだわらなくてもいいと思います。エラーハンドリングがされていれば。

Sub TestProc(Foldername)

If Foldername = "" Then
Exit Sub
End If

Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

Dim ret, stat

If Right(Foldername, 1) = "\" Then
Foldername = Left(Foldername, Len(Foldername) - 1)
End If

On Error Resume Next
Dim FolderPath
FolderPath = fso.getfolder(Foldername).Path
If Err.Number <> 0 Then
MsgBox Err.Description
Set fso = Nothing
Set wsh = Nothing
Exit Sub
End If

Dim Filename
Filename = Dir(FolderPath & "\*.*")

Dim ext

Do While Filename <> ""

ext = LCase(fso.GetExtensionName(FolderPath & "\" & Filename))

If ext = "xls" Or ext = "xlsx" Or ext = "xlsm" _
Or ext = "doc" Or ext = "docx" _
Or ext = "pdf" Then

DoEvents
stat = MsgBox(Filename & "を開きますか?", vbYesNoCancel)
If stat = vbCancel Then
Exit Do
ElseIf stat = vbYes Then
On Error Resume Next
ret = wsh.Run("""" & FolderPath & "\" & Filename & """", 2, True)
If Err.Number <> 0 Then
MsgBox Err.Description
End If
On Error GoTo 0
End If
End If

Filename = Dir()

Loop

Set wsh = Nothing
Set fso = Nothing


End Sub

プロフィール画像

カテゴリマスター

2018/1/1518:29:25

拡張子に対して、起動するアプリケーションを変える例です。

WORD ,EXCELはPathが通っているので、exe名だけで起動しますが、
AdbeReaderはフルパスの指定が必要です。


フォーム上の[ファイルを開く]ボタンのクリック時のイベントに下記のように書きます。

尚、ファイル名が入っていても拡張子が対応していないものは開きません。


Private Sub ファイルを開く_Click()

If Not IsNull(Me![ファイル名]) Then

Dim MyFolder As String
MyFolder = "D:\資料\"

Select Case Mid(Me![ファイル名], InStr(Me![ファイル名], ".") + 1)

Case "XLS", "XLSX", "XLSM"

Call Shell("EXCEL " & MyFolder & Me![ファイル名], vbNormalFocus)

Case "DOC", "DOCX"

Call Shell("WINWORD " & MyFolder & Me![ファイル名], vbNormalFocus)

Case "PDF"

Call Shell("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe " & MyFolder & Me![ファイル名], vbNormalFocus)

End Select

End If

End Sub

yoshidasaroiさん

2018/1/1517:08:41

ファイルに関連付けられたアプリを起動する

https://www.moug.net/tech/exvba/0100034.html

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。