• ベストアンサー

エクセルのファイルオープン時の指定ファイル名について

環境:Win2000 VB.NET2003 参照:Microsoft Excel 9.0 Object Library エクセルファイルを開くために、Workbooks.Openを使用していますが、引数にフルパスを指定すると正常にオープンできるのですが、相対パスを指定するとファイルが見つからずに開けないというエラーになってしまいます。 Workbooks.Openでは相対パスは指定できないのでしょうか?それとも、何か他の指定が合わせて必要なのでしょうか? 教えてください、よろしくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 Workbooks.Open に相対パスは指定できないと思います。素直に 絶対パスに変換(補完)してから開けば良いのでは?

kidanorio
質問者

お礼

了解です、素直に絶対パスにします。ありがとうございます

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

#2 です。補足します。 私の環境が VB6.0(SP6) なので .NET では修正が必要かもしれませんが 相対パスを絶対パスに変換する一例です。 基本的には App.Path でも CurDir でもいいので、基準となるパスの 後ろに相対パスをくっつけて、API の PathCanonicalize 関数に渡して 絶対パスに変換しています。 例) 基準となるパス\..\Test.txt   で基準となるパスよりひとつ上 基準となるパス\..\..\Test.txt で基準となるパスよりふたつ上 strPATH = Get_ABSPATH(App.Path & "\..\Test.txt") '以下コードの一案 --------------------------------------------- Private Declare Function PathCanonicalize Lib "shlwapi.dll" _   Alias "PathCanonicalizeA" ( _   ByVal lpszDst As String, _   ByVal lpszSrc As String) As Long Private Const MAX_PATH = 260 '// 絶対パスに変換(手抜き) Private Function Get_ABSPATH(ByVal strPATH As String) As String   Dim BUF As String * MAX_PATH   Call PathCanonicalize(BUF, strPATH)   Get_ABSPATH = Left$(BUF, InStr(BUF, vbNullChar) - 1) End Function Private Sub Command1_Click()      Dim xlAPP  As Excel.Application   Dim WB   As Excel.Workbook   Dim strPATH As String       'ここでは自己フルパスにおいて、一つ上のディレクトリー   'にあるファイルを開いていますが、事前にファイルの存在   'チェックが必要だと思います   strPATH = Get_ABSPATH(App.Path & "\..\..\test.xls")      Set xlAPP = New Excel.Application   Set WB = xlAPP.Workbooks.Open(strPATH)      'Excel アプリケーションを表示   xlAPP.Visible = True      'ここに処理      'Excel を表示させるとユーザーが直接 Excel を[X]ボタンで閉じる   'かもしれないのでオートメーションエラーをトラップする   On Error GoTo ERROR_HANDLER   'SaveChanges:=True で変更を保存します   'ブックを閉じる   WB.Close SaveChanges:=False   Set WB = Nothing   '以下を忘れるとExcelのプロセスが残ったままに   'なるので注意   xlAPP.Quit   Set xlAPP = Nothing ERROR_HANDLER:   On Error GoTo 0 End Sub

  • ykkw_2001
  • ベストアンサー率26% (267/1014)
回答No.1

もちろんカレントディレクトリは正常に設定されているという前提ですよね

kidanorio
質問者

補足

早速ありがとうございます。 ご指摘の件ですが、ファイルを開く処理の直前に、System.IO.File.Existsにて、ファイルオープン時に使用する、相対パスのファイル名を指定して、ファイルの存在を確認するとTrueが返って来てますので、問題ないと考えておりますが、まずいでしょうか?

関連するQ&A

専門家に質問してみよう