アプリ版:「スタンプのみでお礼する」機能のリリースについて

環境:Win2000 VB.NET2003
参照:Microsoft Excel 9.0 Object Library

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

A 回答 (3件)

こんにちは。

KenKen_SP です。

Workbooks.Open に相対パスは指定できないと思います。素直に
絶対パスに変換(補完)してから開けば良いのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/24 08:47

#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
    • good
    • 0

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

この回答への補足

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

補足日時:2005/12/23 18:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています