• ベストアンサー

excelオートメーションでの読込み先ファイルパス指定について

開発環境 VC++6.0 SP5 Windows2000SP4 MFC AppWizard(exe)使用 EXCEL2000タイプライブラリEXCEL9.OLBをインポートし、オートメーション機能を利用して、EXCEL表から値を読み込むプログラムを作っています。セル読込みは問題ないのですが、読込みファイル名を指定する部分で困っています。C直下にdata.xlsを置いておく場合、"C:\\data.xls"としておけば問題ないのですが、exeと同じディレクトリに置く場合の指定方法が分かりません。単に"data.xls"とすればよいと思うのですが、exe実行時に「'data.xls' が見つかりません。」とエラーが出てしまいます。".\\data.xls"としてみましたが同様でした。VC++上から実行してみても、exeを直接実行してみても同様でした。パスの指定方法が違っているだけだと思うのですが指定方法がわかりません。data.xlsをexeと同じディレクトリに置く場合はどうすればよいのでしょうか。 以下EXCEL読込みソースの一部です。 _Application app; // app is an _Application object. Workbooks books; LPDISPATCH lpDisp; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); app.CreateDispatch("Excel.Application"); app.SetVisible(TRUE); // Get the Workbooks collection. lpDisp = app.GetWorkbooks(); // Get an IDispatch pointer. ASSERT(lpDisp); books.AttachDispatch(lpDisp); // Attach the IDispatch pointer lpDisp = books.Open("c:\\data.xls", // ここを"data.xls"とするとエラーになる covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional ); // 以下セルの値を取得する処理が続く・・・・

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

COM から"Excel.Application" のようにエクセルアプリケーションオブジェクトを作る場合、既定のフォルダは、プログラムの起動フォルダにはなりません(というか普通ならないと考えた方がよい) ファイル名からフルパスを作ってやってフルパスで指定するのが良いです。

stzipper
質問者

お礼

レスありがとうございます。 GetCurrentDirectory()にてカレントディレクトリを取得してフルパスを指定したらうまくいきました! フルパス指定しないとダメなのですね。勉強になりました。ありがとうございました。

その他の回答 (1)

  • FAY
  • ベストアンサー率49% (95/193)
回答No.1

ご自身が言われているように"data.xls"でいけると思いますが・・・ もしかしてVCからデバッグで起動していませんか? VCから起動した場合、カレントディレクトリはEXEの場所ではなく、 プロジェクトがあるフォルダになります。 exeファイルを直接実行してみたり、 data.xlsを*.dspがあるフォルダにおいて実行したりするとどうなりますか?

stzipper
質問者

補足

レスありがとうございます。 私も"data.xls"で行けるはずだと思っているのですが、なぜがダメでした。 *.dspのあるディレクトリにdata.xlsを置いてVC上から起動しても、exeのあるディレクトリにdata.xlsを置いてexeから実行してもエラーになってしまいます・・。 プロジェクトファイル自体がおかしくなっているのでしょうか?

関連するQ&A

  • VBでエクセルのバージョンを指定して開く

    PCにEXCEL2002と2013がインストールされています。 VBでエクセルを起動し、マクロを実行したいのですが、その際に起動するエクセルのバージョンを指定したいと考えています。 以下でやると標準設定のEXCELが開いてしまい、バージョンの指定ができません。 Dim xlApp As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApp.Workbooks xlBooks.Open("C:\test.xls") xlApp.Visible = True xlApp.Run("test.xls!macro") なにか方法はありますでしょうか?

  • VB6.0でエクセル保存する時の保存場所の指定。

    VB6.0からデータをエクセルに保存させようとしています。 保存する方法は、エクセルを開くのではなく、 ボタンを押したらそのまま自動で保存させるようにしています。 そしてその名前をつけて保存をさせる処理で、ファイルの保存場所を示す パスの指定で少々困っております。 EXEファイルがある位置をカレントとして同一フォルダ内にあるtestフォルダに 全てデータは保存したいと考えています。 絶対パスを固定で指定すればそこに保存できますが、それだと違うPC上で実行すると 動作しない危険性がありますので、相対パスで指定したいと思っています。 ですが、実行ファイルから"./test/test.xls"と指定してもパスのエラーとなり 保存できません。 しかし絶対パスの固定でフォルダを指定すると保存できます。 ws.Name = "C:\vb_test\test\test.xls" これをEXEファイルのある位置からの相対パスで指定するにはどうすればいいでしょうか?

  • Excel ファイルに保存すると実行時エラーになる

    こんにちは。宮本と申します。VB6(SP5)で、 プログラミングをしております。 下記の様にプログラミングをしましたが、どうしても [実行時エラー’1004’ test_1.xlsにアクセスできません]と、なります。 c:\test.xls は、元々ある事を前提とし、c:\test_1.xlsに上書きをしたいのです。 宜しくお願い致します。 Dim wApp As Excel.Application Dim wExl As Object Set wApp = CreateObject("Excel.Application") Set wApp = CreateObject("Excel.Application") Set wExl = wApp.Workbooks.Open("c:\test.xls") wExl.Worksheets(1).Cells(1, 1).Value = 3000 wExl.Application.Visible = False wExl.Application.DisplayAlerts = False wExl.SaveAs "c:\test_1.xls" <---ここで、エラー

  • エクセルVBA

    こんばんは! エクセルマクロ初心者です。 エクセルVBAについて教えてください! パス(?)を指定して、ファイルを開けてから実行する マクロを書きたいのですが、エラーになってしまいます。 Dim Filename as string (1)Workbooks.Open Filename:= "\D\MyDocument\●●.xls" (●●はファイル名) (2)Workbooks("●●").Activate (1)の部分は実行されて目的のファイルは開くのですが(2)でエラーになってしまいます。 どなたか教えてください! 以前までは、このマクロ実行できていたのですが、突然できなくなりました。 困ってます。

  • ExcelVBA 標準モジュール内関数の呼出し

    VB6.0からExcelの標準モジュール内のパラメータ付関数を呼出すにはどうしたらよろしいでしょうか? Dim app As Excel.Application Dim wb As Workbook Set app = CreateObject("excel.application") Set wb = app.Workbooks.Open("TestXl.xls") Set app = Nothing 以上のように記述し指定のエクセルファイルをオープンすることはできたのですが ここからどうやって標準モジュールを参照し、その中の関数を実行するかがわかりません。

  • excelのデータをvbにとりこむ

    excelのあるセルのデータを取り込みたいのですが、 どうすればよいでしょうか? C:\123.xlsというファイルのsheet1の (2,4)というセルにある実数型のデータを 出力するという、意図です。 Private Sub Setting_Click() Dim xls As Object Dim xlsFilename As String Dim xlsSheetname As String xlsFilename = "C:\123.xls" xlsSheetname = "Sheet1" Set xls = CreateObject("Excel.Application") xls.Application.Visible = False xls.Application.Workbooks.Open xlsFilename Dim r1 As Double r1 = xls.Application.Workbooks.cells(2, 4).Value Print r1 end sub

  • VS2003.NET(C#)からのEXCELのプロセス解放

    ご存知の方がいたら教えて下さい。 【動作環境】 OS:WINDOWS XP(SP2) VisualStadio20003.NET(C#) EXCEL2003 VS.NETのプロジェクトメニューの参照の追加で「Microsoft Excel 11.0 Object Library」を追加してあります。 セルの更新を行った場合に、プロセスが解放されずに残ってしまいます。 (セルの更新を行っている行を実行しない場合にはプロセスは解放されます) いろいろ調べてはみたのですが、どうも原因がつかめません。 ご存知の方がいましたら教えてください。 (以下ソースコードになります) Excel.Application app; Excel.Workbook book; Excel.Worksheet sheet; Excel.Workbooks books; Excel.Sheets sheets; Excel.Range range; app = new Excel.Application(); books = app.Workbooks; book = books.Add("c:\\inetpub\\wwwroot\\ExcelData.xls"); sheets = book.Worksheets; sheet = (Excel.Worksheet)sheets["Sheet1"]; range = sheet.get_Range("A1","A1"); range.Value2 = "テストです"; // 解放 Marshal.ReleaseComObject(range); Marshal.ReleaseComObject(sheet); Marshal.ReleaseComObject(sheets); Marshal.ReleaseComObject(book); Marshal.ReleaseComObject(books); // Excel終了 app.Quit(); Marshal.ReleaseComObject(app); よろしくお願いします。

  • ACCESSからEXCELへのオートメーション操作

    ACCESSからEXCELへのオートメーション操作について質問させて下さい。 以下のようにコードを書きましたが、エラーに飛んでしまいます。 また、EXCELファイルは出来ているのですが、データがきちんと出力されません。 解決手段をご教授して下さい。 宜しくお願いします。 Private Sub コマンド39_Click() On Error GoTo エラー_Err DoCmd.TransferSpreadseet acExport, acSpreadsheetTypeExcel8, "営業報告", "C:\営業日報.xls", True Dim objEXE As Object , Dim wk_excel As Object, wk_book As Object Dim wk_file As String wk_file = "営業日報" Set objEXE = Excel.Application objEXE.Workbooks.Open ("C:\営業日報.xls") wk_excel.Sheets(wk_file).Columns("C:C").Select wk_excel.Sheets(wk_file).Open.Columns("E:E").ColumnWidth = 10 With Selection .Formula = .Value End With wk_excel.Sheets(wk_file).Range("A1").Select Exit Sub エラー_Err: MsgBox "エラーです" エクセル_Exit: Exit Sub End Sub

  • VBによる変数でエクセルを開く

    解る方教えて下さい。 例えば、決まったファイル名のエクセルを開く時は、 SET xlsApp = CreateObject("Excel.Application") SET xlsBook = xlsApp.Workbooks.open("C:\TEMP\テスト.xls") SET xlsSheet = xlsBook.Sheets(1)  だと思いますが、 訳あって、エクセルファイル名が入った変数(例 ZZFILE)で開きたいのですが Workbooks.open の指定方法がわかりません。 解る方、宜しくお願い致します。

  • ACCESSからexcelを操作

    accessのVBからEXCELのデータ編集を行う際、 最後エクセルを開放しているつもりなのですが、できていないようです。 ※タスクマネージャーにエクセルのタスクが残っており、 該当のファイルを開くと白くなっている。閉じて再度開くと正常動作する。 いくつかの帳票がありますが、 現象が起こるものと起こらないものがあります。 試しに Xls_app.ScreenUpdating = Trueにしてみるとタスクには残っているが 問題なく開けます。 Xls_app.ScreenUpdating = Falseだとタスクにも残るし、ファイルを開くと白くなっているような感じです。 しかし発生原因がわからず、再発するような気もするので根本原因を 突き止めたいです。 Excel起動時 ---------------- Set Xls_app = CreateObject("Excel.Application") Set Xls_book = Xls_app.Workbooks.Open(STR_out_file) Set Xls_sheet = Xls_book.Worksheets(STR_sheet1) Set Xls_sheet2 = Xls_book.Worksheets(STR_sheet2) 'DEBUG Xls_app.Visible = False Xls_app.ScreenUpdating = False Xls_app.UserControl = True ' Xls_app.Visible = True ' Xls_app.ScreenUpdating = True Private Sub Excel終了()----------------------- Xls_book.Close (True) Xls_app.Quit Set Xls_sheet = Nothing Set Xls_sheet2 = Nothing Set Xls_book = Nothing Set Xls_app = Nothing End Sub