- ベストアンサー
エクセルのファイルオープン時の指定ファイル名について
環境:Win2000 VB.NET2003 参照:Microsoft Excel 9.0 Object Library エクセルファイルを開くために、Workbooks.Openを使用していますが、引数にフルパスを指定すると正常にオープンできるのですが、相対パスを指定するとファイルが見つからずに開けないというエラーになってしまいます。 Workbooks.Openでは相対パスは指定できないのでしょうか?それとも、何か他の指定が合わせて必要なのでしょうか? 教えてください、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 Workbooks.Open に相対パスは指定できないと思います。素直に 絶対パスに変換(補完)してから開けば良いのでは?
その他の回答 (2)
- KenKen_SP
- ベストアンサー率62% (785/1258)
#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)
もちろんカレントディレクトリは正常に設定されているという前提ですよね
補足
早速ありがとうございます。 ご指摘の件ですが、ファイルを開く処理の直前に、System.IO.File.Existsにて、ファイルオープン時に使用する、相対パスのファイル名を指定して、ファイルの存在を確認するとTrueが返って来てますので、問題ないと考えておりますが、まずいでしょうか?
お礼
了解です、素直に絶対パスにします。ありがとうございます