エクセルファイルの開き方について

タグの編集
投稿者   (社会人) 投稿日時 2020/9/28 16:50:57
失礼いたします。
どうしてもわからなかったので質問させてください

VBからエクセルを開きたく下記のようにコードをかきました。
ですがファイルは存在しているのに、★マークのところでエラーが出てしまいます。
内容はファイルが見つかりません、移動された可能性がありますというものです。
前文でファイルの存在確認しているのになぜでしょうか?
常にエクセルを開いているというわけではありません。
宜しくお願いします。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'ファイルが存在しているか確認
        Dim myPath As String = System.IO.Path.GetFileName("出力.xlsx")
        Dim fileName As String = myPath
        If System.IO.File.Exists(fileName) Then
            MessageBox.Show("'" + fileName + "'は存在します。")
        Else
            MessageBox.Show("'" + fileName + "'は存在しません。")
        End If

        Dim ExcApp As Object
        ExcApp = CreateObject("Excel.Application")
        ExcApp.workbooks.open(myPath)★
        ExcApp.visible = True
  End Sub
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/9/28 17:36:28
> Dim myPath As String = System.IO.Path.GetFileName("出力.xlsx")

VB 側にとっての作業フォルダーと、
Excel 側にとっての作業フォルダーは、必ずしも一致しません。

出力.xlsx は、どのフォルダーに置いてありますか?

ファイル名だけで指定すると、現在の位置(カレントディレクトリ)が変更された時に
処理が曖昧になります。ドライブ名も含めたフルパスで指定するようにしましょう。

実行中の EXE の場所を調べたい場合には、このような手法が使えます。
https://www.umayadia.com/vbsample/dotnet-Samples/Sample136GetAppPath.htm


あるいは、System.IO.File の Exists を使うのではなく
System.IO.FileInfo の Exists を使うのも良いでしょう。

Dim f = New System.IO.FileInfo("出力.xlsx")
If Not f.Exists Then
    Return
End If
Dim myPath As String = f.FullName

投稿者   (社会人) 投稿日時 2020/10/1 15:54:51
魔界の仮面弁士様
返信遅くなりました

>VB 側にとっての作業フォルダーと、
>Excel 側にとっての作業フォルダーは、必ずしも一致しません。

しばらく理解ができなくて悩んでました。
自分のコードみなおしました。
Dim myPath As String = System.IO.Path.GetFileName("出力.xlsx")は
フルパスで帰ってくると勘違いしていました。
(確かにGetFileNameとかいてある。。)


>あるいは、System.IO.File の Exists を使うのではなく
>System.IO.FileInfo の Exists を使うのも良いでしょう。
System.IO.FileとSystem.IO.FileInfoって若干ちがうんですね。
いっしょかとおもっていました。

有難うございました