@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ASP(.NETではない)から、マクロ付きExcelが保存できません

投稿者投稿内容
SHUN
会議室デビュー日: 2006/12/07
投稿数: 6
投稿日時: 2006-12-07 15:00
お世話になります。
現在、お客様先のイントラネット環境で社内Webを開発中です。
Server:Windows2000Server IIS5.0 開発元クライアント:WindowsXP-SP2
Server側Excelバージョン:2002(SP3)

こちらの会議室を大体は閲覧しましたが、回答がなかったりしたのでご質問させていただきます。2つのパターンで実験しました。

【パターン1】
元ソース(抜粋):
 オープン処理
 ''EXCELオブジェクト
 Set objExcel = CreateObject("Excel.Application")
 objExcel.Application.Visible = False
 ''EXCELオープン
 Set objWbk = objExcel.Application.Workbooks.Open(F_NAME1)
 上記は問題なく開いています。

 Excelマクロ実行・・objExcel.Run("ThisWorkbook.make_graph")
 上記も問題ありません。

 書き込み処理: objWbk.SaveAs(exfilename)
 ここで、Error!:(1004)---ファイルを保存できませんでした。のエラー発生。
 サーバー側のフォルダに別名で書き込みできていません。

フォルダの権限は、Everyone、IUSR_XXXXXで読み書き可能にしています。
なお、マクロの無いExcelは、上記処理で問題なく保存できており、閲覧もできます。
Excel側のマクロのセキュリティも「低」にしてあり、メッセージは出ないようにしてあります。

【パターン2】
1がだめでしたので、上記パターン1のエクセルオープンから書き込みまでの処理をVBSに独立させ、ASP側から、下記命令を実行しました。

'##### Shellオブジェクトのインスタンス化 #####
Set objWsShell = Server.CreateObject("WScript.Shell")

'##### シェルを起動する #####
  exec_f = "wscript \\43.29.68.40\wwwroot\ukeire\menu10\menu10_2\make_excel.vbs " & hassei
Call objWsShell.Run(exec_f,1,false)

'### Shellオブジェクトの破棄 ###
Set objWsShell = Nothing
サーバー側のタスクにはWscript.exeが存在し、起動していることは確認できましたが、肝心のExcelファイルが作成されていません。ちなみに、上記VBSをクライアント側よりMS-DOSプロンプトで実行したところ、問題なく作成されていました。

出来れば1のパターンで開発を続行していきたいのですが、環境の問題のような気がしています。どうぞどなたかお知恵をお貸しください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-07 15:24
引用:

SHUNさんの書き込み (2006-12-07 15:00) より:

書き込み処理: objWbk.SaveAs(exfilename)
ここで、Error!:(1004)---ファイルを保存できませんでした。のエラー発生。
サーバー側のフォルダに別名で書き込みできていません。


権限に問題がないとすると...

テンプレートから開いて、別名保存してもダメでしょうか?
要するに既存のワークシートを使わないようにします。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
SHUN
会議室デビュー日: 2006/12/07
投稿数: 6
投稿日時: 2006-12-07 15:31
引用:

じゃんぬねっとさんの書き込み (2006-12-07 15:24) より:
権限に問題がないとすると...

テンプレートから開いて、別名保存してもダメでしょうか?
要するに既存のワークシートを使わないようにします。



早速のご返事ありがとうございます。実は、じゃんぬれっとさんの仰るとおりにテンプレートを作っておいて別名保存をしようとしています。やはり環境でしょうか・・・当社の別部隊でも似たような案件がありましたが、特に問題はなかったように聞いています。かなり焦ってます。納期が12/15なので・・・
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2006-12-07 16:20
ファイル名だけなのかな?
絶対パス通してもだめですかね?

IISってサーバーアプリケーションの位置を定数で持ってた様に思いますが、
それを追加してやるって感じでは駄目ですかね?

たまたまPATHが通っている場所に
テンプレートがあった・・・開いて実行はできる
って状態じゃないでしょうか?

憶測なので、絶対にできるとは言えませんが。汗

[ メッセージ編集済み 編集者: るぱん 編集日時 2006-12-07 16:21 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-07 16:21
引用:

SHUNさんの書き込み (2006-12-07 15:31) より:

早速のご返事ありがとうございます。実は、じゃんぬれっとさんの仰るとおりにテンプレートを作っておいて別名保存をしようとしています。


ときに、テンプレートから別名保存で、うまくいきますか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-07 16:25
引用:

るぱんさんの書き込み (2006-12-07 16:20) より:

ファイル名だけなのかな?
絶対パス通してもだめですかね?


あっ、思いっきり見落としていました。

確かに、'exfilename' がフルパスでないとすると、カレント ディレクトリに保存しようとしますね。
その場合は権限の都合で、当然保存に失敗します。

オートメーション上では、ランタイム エラー 1004 が発生しますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
SHUN
会議室デビュー日: 2006/12/07
投稿数: 6
投稿日時: 2006-12-07 16:26
引用:

るぱんさんの書き込み (2006-12-07 16:20) より:
ファイル名だけなのかな?
絶対パス通してもだめですかね?

たまたまPATHが通っている場所に
テンプレートがあった・・・開いて実行はできる
って状態じゃないでしょうか?


るぱんさん、ご回答ありがとうございます。はい。絶対パスで通してます。
ちょっと考えるとこがあり、先ほどのじゃんぬねっとさんのコメントでちょっと閃いたのですが、もう一つマクロの無いBOOKを開いて、そこにテンプレートに作成した結果シートをコピーして別名で保存する。(マクロ自体は、ThisBookに作りこんでるので、マクロは影響しませんよね)
SHUN
会議室デビュー日: 2006/12/07
投稿数: 6
投稿日時: 2006-12-07 16:29
引用:

じゃんぬねっとさんの書き込み (2006-12-07 16:25) より:
あっ、思いっきり見落としていました。

確かに、'exfilename' がフルパスでないとすると、カレント ディレクトリに保存しようとしますね。
その場合は権限の都合で、当然保存に失敗します。

オートメーション上では、ランタイム エラー 1004 が発生しますね。


ちょうど入れ違いでした(^ ^; るぱんさんの言われるとおり、絶対パスで通してます。マクロが付かないExcelだと同じロジックで全く問題はないのです(泣

スキルアップ/キャリアアップ(JOB@IT)