• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルの有無を判定してからリンクをはりたい)

ファイルの有無を判定してからリンクをはりたい

このQ&Aのポイント
  • VBAを使用して、ファイルの有無を判定してからリンクを作成したい場合、自作の関数を使用することができます。
  • ただし、存在しないファイルを開こうとするとエラーが発生するため、エラー処理を行う必要があります。
  • 関数を使用してファイルの有無を判定し、存在する場合のみリンクを作成するようにすることで、エラーを回避することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

すいません 質問をよく読んでいませんでした =IF(isFileExist("aaa.pdf"),HYPERLINK("aaa.pdf","ファイルを見る"),HYPERLINK(,"ファイルはありません")) とするしかないようです 仕様、バグ??

msndance
質問者

お礼

それでうまくいきました!HYPERLINK関数の第1引数を空にするという方法もあるんですね!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

これはどうでしょう? '-------------------------------------------------- Function isFileExist(Filename As String) As Boolean If Dir(Filename) <> "" Then isFileExist = True Else isFileExist = False End If End Function '--------------------------------------------------- この他に Dim FSO As Object を Dim FSO As String へ、変更するとどうなります

msndance
質問者

お礼

ありがとうございました。結果的にはno3さんの方法でうまくいきましたので次点にしたいと思います

全文を見る
すると、全ての回答が全文表示されます。
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

HYPERLINK関数のヘルプに ファイルはフルパスで指定してくださいと書いてありますが パスは指定してますか FileExistsの方もパスが必要のようですが C:\My Documents\ のフォルダにファイルが保存されている場合は =IF(isFileExist("C:\My Documents\aaa.pdf"),HYPERLINK("C:\My Documents\aaa.pdf","ファイルを見る"),"ファイルはありません") としなければエラーになります

msndance
質問者

補足

フルパスで指定しています。IF文の第1引数が真になる、すなわちファイルがあるときはセルをクリックするとPDFがきちんと開かれることを確認しています。問題はファイルがない場合、IF文の第1引数が偽になるので「ファイルはありません」と出るだけのはずなのに、ファイルを参照しにいって「開くことができません」といってくることです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vba ファイルの移動について

    フォルダAの中にあるたくさんのpdfファイルの中から、 ファイル名の頭文字3つがE列に記載した「aaa」だったら フォルダBに移動させるという内容にしたいです。 ネット検索などで、近いものを作成しましたが(下に貼り付け)、 下から4行目、「fso.moveFile FolderA & "\" & fileName, FolderB & "\" & fileName」で 「実行時エラー'53'  ファイルが見つかりません。」 とエラーが出てしまいます。 どの様に書き直せばよいのでしょうか? どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。 エクセル2010を使用しています。 Sub CheckAndMoveFiles() Dim FolderA As String Dim FolderB As String FolderA = Range("D1").Value FolderB = Range("B2").Value Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ws As Worksheet Set ws = ActiveSheet Dim lastRow As Long lastRow = ws.Range("E" & Rows.Count).End(xlUp).Row Dim r As Long Dim fileName As String For r = 1 To lastRow If ws.Cells(r, "E").Value <> "" Then fileName = ws.Cells(r, "E").Value dFileName = Dir(FolderA & "\" & Left(fileName, 3) & "*.pdf") Do While dFileName <> "" dFileName = Dir() Loop fso.moveFile FolderA & "\" & fileName, FolderB & "\" & fileName 'ここでストップ End If Next End Sub

  • ファイルの有無を確認した際のエラーについて

    VB6です。以下の様な関数を使っています。 用途としては、ファイルの有無を調べています。 で、関数の値として実際のパソコンに存在しないフォルダを指定した際、 下のエラー処理(AAA)に飛びません。 わかる方いらしたら、よろしくお願いします。 Public Function files(ByVal strPathName As String) As Boolean On Error GoTo AAA If (GetAttr(strPathName) And vbDirectory) = vbDirectory Then Stop Else Stop End If Exists2 = True Exit Function AAA: Stop End Function

  • Notes 開発で、 excelファイルを読み込みデータを追加したい。

    現在notes7で開発を行っている(初心者)なのですが ビュー内の選択している文書からデータを取ってきて 読み込んだexcelファイルに書き足していきたいのですが、 任意のexcelを開くところまではネットを参考にして出来たのですが 詳細を理解していないため、そのファイルにデータを書き足していくことが出来ません。アドバイスをお願い致します。 現在作ってあるプログラムが以下です。 ' 既存のEXCELワークブックを開く Dim xlApp As Variant ' Excelオブジェクト ' マイドキュメントの指定ファイルを開く Dim wsh As Variant, fso As Variant Dim FilePath As String, FileName As String Set wsh = CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") FilePath = wsh.SpecialFolders("MyDocuments") FileName = FilePath & "\sample.xls" If Not fso.FileExists(FileName) Then Msgbox "ファイルがありません。" & Chr(13) & FileName, 16 Exit Sub End If Set xlApp = CreateObject("Excel.Application") ' Excel OLE起動 xlApp.Workbooks.Open FileName xlApp.Visible = True これで、ファイルは開けます。ちなみにビュー内の選択文書の取り込みは出来てます。後は、そのデータをエクセルに書き出すだけなのですが そこが解りません。 それと、現在マイドキュメント内のファイルを読み込んでますが 同じデータを共有リソースの中に保存してあるので、そっちから開きたいのですが、パスをどのように設定すればいいのか解りません。 すみませんが、アドバイスをお願い致します。

  • VBAで、定数式が必要ですのエラー対応

    指定のファイルをフォルダAからフォルダBへ移動させるというvbaを 見つけたのですが、 サンプルの表記は「"C:\Data\A"」と直接場所をしていしたものなので、 参照するフォルダ場所として、セルC1を参照させようと、 「Range("C1")」と書き直したところ、 「コンパイルエラー:定数式が必要です」とエラーになってしまいます。 どの様に書き直せばよいのでしょうか? どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。 エクセル2010を使用しています。 Sub CheckAndMoveFiles() Const FolderA = Range("C1") 'エラー発生 'Const FolderA = "C:\Data\A" サンプルの表記   Const FolderB = "C:\Data\B" Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ws As Worksheet Set ws = ActiveSheet Dim lastRow As Long lastRow = ws.Range("A" & Rows.Count).End(xlUp).Row Dim r As Long Dim fileName As String For r = 1 To lastRow If ws.Cells(r, "A").Value <> "" Then ' fileName = ws.Cells(r, "A").Value & ".xls" fileName = ws.Cells(r, "A").Value If fso.FileExists(FolderA & "\" & fileName) = True Then fso.moveFile FolderA & "\" & fileName, FolderB & "\" & fileName End If End If Next End Sub

  • ディレクトリの存在有無の確認方法

    VB6を使っています。 ファイルの存在有無はFileSystemObjectを使って以下のような方法で確認しいますが、ディレクトリの存在有無はどのようにすれば、確かめられるでしょうか? Dim objFileSys As Object Set objFileSys = CreateObject("Scripting.FileSystemObject") If objFileSys.FileExists("C:ABC.XYZ") Then よろしくお願いします。

  • ファイルシステムオブジェクトのメソッドについて

    こんにちは、皆さん。 以下のプログラムでコピーしようとしたら、 オブジェクトがメソッド、プロパティをサポートしてないという メッセージが表示されてしまいました。 Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFile "c:\aaa.txt", "c:\temp\" Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.GetFile("c:\aaa.txt") fso.Copy "c:\temp\" こういった場合、どんなメソッドがあるか確認するには どうしたらよいでしょうか? また、ファイルをコピーするにはどうしたらよいでしょうか? よろしくお願いします。

  • VBA:2つのCSVファイルを開きたいです。

    エクセル2010のVBAにてCSVファイルを開き結合させるプログラムを組もうとしているのですが、2つ目のCSVファイルを開こうとすると、何故かエラーが出てしまいます。 -------------------------------------------------------------------------------- 1つ目 Sub mobile_FileSearch(Path As String) 'test.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call mobile_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "test.csv" Then Workbooks.Open ("test.csv") End If Next File End Sub ---------------------------------------------------------------------------- 2つ目 Sub local_FileSearch(Path As String) 'bbb.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call local_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "bbb.csv" Then Workbooks.Open ("bbb.csv")'←ここでエラー End If Next File End Sub ------------------------------------------------------------------------ まったく同じプログラムで、csvファイル名だけ変えただけで実行時エラー1004が出てしまいます。 一体全体何が問題なのでしょうか?

  • エクセルマクロ(vba)のFSO.OpenTextFileを利用したファイルへの追記について

    FSOを利用して、特定のファイルがなければ、FSO.CreateTextFileを使ってファイルを作成して、ログを記入します。 特定のファイルがあれば、FSO.OpenTextFileを使って追記します。 ファイルが存在しないので新規でファイル作成を行ってからログを記入するのははうまくいくのですが、ファイルが存在するので、ファイルを開いて追記する場合ががうまくできません。 何が原因なのでしょうか? 以下がそのプログラムです。 アドバイスをよろしくお願いします。 Dim excel_folder excel_folder = ThisWorkbook.Path excel_folder = excel_folder & "\log.txt" Set objShell = CreateObject("Wscript.Shell") Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") Dim stream, data_text If FSO.fileexists(excel_folder) Then Set stream = FSO.OpenTextFile(Filename:=excel_folder, IOMode:=ForAppending, Create:=True) Else: Set stream = FSO.CreateTextFile(Filename:=excel_folder, Overwrite:=True) End If data_text = "test" stream.writeLine (data_text) stream.writeLine (vbCrLf) stream.Close

  • VBSでテキストファイルを作成

    こんにちは。 set fso = createobject("Scripting.FileSystemObject") fso.createfolder("倉庫") を実行すると、実行したスクリプトが存在する場所に「倉庫」という名のフォルダが作成されます。 その倉庫というフォルダの中にテキストファイルを作成するにはどうすればよいでしょうか? set fso = createobject("Scripting.FileSystemObject") fso.createfolder("倉庫") set fo = fso.opentextfile(FILENAME) close.fo 相対的にファイルの場所を指定する方法がわかりません。 絶対パスでないとだめなのでしょうか?

  • XPバーチャルモードでACESSS2000使用

    こんにちは、よろしかったら教えてください。 現在PCはWindows7ですが、WindowsXPバーチャルモードにACCESS2000をインストールし、サーバー(SQLServer2000)とでデータベースを運用しています。 そして上記ACCESSアプリで、レコードを表示した画面で、WORD、EXCEL、PDF等のファイルを取り込んで、あるフォルダに置き、画面上からこの添付ファイルを見られるようにしています。 ところが、バーチャルモードで運用するようになってから「取り込みに失敗」のエラーが 出るようになりました。 コードは以下のような記述です。 エラー処理等は省略 Function XLSFileOpen() Dim objXLS As New Excel.Application Dim varGetFile As Variant Dim filename As String Dim POS As Integer Dim fso, f1, f2, s Dim MyPath As Variant varGetFile = objXLS.GetOpenFilename("すべて (*.*),*.*", , "ファイル選択") POS = InStrRev(varGetFile, "\", , vbTextCompare) filename = Mid(varGetFile, POS + 1) Set fso = CreateObject("Scripting.FileSystemObject") Set f1 = fso.GetFile(varGetFile) Set objXLS = Nothing MyPath = "パス名\" '←サーバフォルダ f1.Copy (MyPath & filename & "") Set f2 = fso.GetFile(MyPath & filename & "") If (f2.Attributes And 1) = False Then f2.Attributes = f2.Attributes + 1 End If MsgBox "添付ファイルを取込みました。" End Function WindowsXPで運用していたときは、「取り込みに失敗」はなかったのですが・・。 原因が判る方、教えていただけると幸です。 よろしくお願いします。

専門家に質問してみよう