- 締切済み
wshからexcel操作で,ChDirを使いたい
はじめて質問をします。 monnomestと申します。 vbaのマクロを実行して、シートを作成するwsh(by jscript)を作成しました。そのシートを保存する際にchrdirで保存場所を明示したいのですが、指定の仕方が分かりません。(wshを置いておくdirectoryにしたい。) ChDirは、エクセルのmethodではないため、以下のようでは、エラーになりますし、 var objXL = WScript.CreateObject("Excel.Application"); objXL.Visible = true; with(objXL){ var tar=workbooks.Open(scriptpath+vba); try{ Run("'"+vba+"'!'"+command+"'"); }catch(e){ } tar.Close(); ChDir("xxxxxxx"); ← とは出来ない。 } もちろん、wshを使わず、vbaをそのまま立ち上げればこんなことする必要はないのですが、 諸々の事情がありまして、wshで行えれば都合がよいのです。 objectが何なのかが分かれば解決でしょうか。 どなたかご教示いただけますでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 あまり、私が、ごちゃごちゃ言ってもしょうがないですね。 ちょっと、度が過ぎたかもしれません。不適切な言葉があったら、申し訳ありません。 ChDir で直接影響を受けるのは、本来、GetOpenFilename等の、この手のダイアログだけだと思います。保存する場合に、ChDir は不要です。単に、ディレクトリを書かなくて済むだけです。 もし、あえて変えるなら、[Application.]DefaultFilePath で規定になっているフォルダを変えればよいのです。そこを一次的に変えれば、開く時には、そこを開けますし、保存する時も、そこになります。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 ここのログの範囲だけでは、ChDir は必要ないように思います。その必然性が分からないです。何か、基本的な誤解が生じているようです。 >保存ダイアログを開く際にそのユーザーがクリックしたwsfのdirectoryが開く。」というのが目的です。 どのアプリケーションでも、ユーザーにフォルダを選ばせる時に、当初は、[使用ユーザー]のMy Documents やC:\から開くのが一般的だと思うのです。そこで、ダイアログを開いて、自由選択させて、ファイルを保存するわけです。 ブック tar.Close してからなら、ChDir ではなく、FileSystemObject で、MoveFileメソッドを行えばよいのですが、それは、常識的ではありません。 wsfであろうがなかろうが、ChDir というのは、アプリケーションの対象のカレントディレクトリが変わるという目的で、VBAの中で通用する話で、VBAの外に出たら、保存のフォルダは直接関係ありません。通常は、フォルダ名を入れないで保存や開くことをする以外は、ChDir は使いません。 ダイアログは、JavaScript やVBScipt なら、CreateObject("WScript.Shell") のSpecialFolders オブジェクトなどで出して、フォルダを取得して、それを保存フォルダの変数、例えば、#1 の newdir に渡せば良いわけでは?
お礼
再びありがとうございます。 > 当初は、[使用ユーザー]のMy Documents やC:\から開くのが一般的だと思うのです。 ぅーん。ただ、チームで共同作業をしていて、サーバー内のすでに決まっているdirectoryに保存する必要がある場合、curdirを指定してしまいたいこともあると思います。たとえば毎月ちがうしかも階層の深いところにあるdirectoryに収めるのだけれど、vbaに参照情報をつけたりするのは、スマートでないと思うわけで、軽いwsfを予定の保存先においてそこに完成したシートを保存したかっただけです。 (別のパターンでcsvを加工して、展開させるwsf+vbaを作って活用していますが、そのcsvのdirectoryにvba内でchdirしています。しかし、質問させていただいているケースでは、netからの情報を自動集計するvbaなので、元データもない。) でも、考えてみたら書類名は、ある程度決まっているものだし、 Activeworkbook.SaveAs (scriptdir+'newname'); でいいんでした。それを発見できて助かりました。 (別の問題と混ざり合ってターゲットがずれていってしまったようです。) ところで、必然性はともかく、ChDirのやりようはあるかの疑問は残るのですが、、、
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 > ChDir("xxxxxxx"); ← とは出来ない。 >objectが何なのかが分かれば解決でしょうか。 これを動かすには、Visual Basic For Application のタイプライブラリを呼び出しておかないと動かないかもしれませんが、必要あるのでしょうか? >そのシートを保存する際にchrdirで保存場所を明示したいのですが、指定の仕方が分かりません。 単に、別のマクロを作って、command2 をRunさせるか、 Run("'"+vba+"'!'"+command2+"'"); ←これで動くかは分かりませんが。 保存するなら、以下のようなすれば良いです。 // newdir ="x:\\xxxxxx\\"; DisplayAlerts = false; tar.SaveAs (newdir + tar.Name); DisplayAlerts = true; tar.Close False; //
補足
回答ありがとうございます。質問内容が明確でなくてすみません。 wsfで実行するのは、シートの作成までで、 あくまで「ユーザーに多少の加工の後に好きな場所に好きな名前で保存してもらいたく、保存ダイアログを開く際にそのユーザーがクリックしたwsfのdirectoryが開く。」というのが目的です。 ご指摘のとおりVBAにアクセスすればChDirを扱えると思うのですが、 「CreateObject("Excel.Application")のようなものが必要かかな」 というところで終わってしまって、、、、
お礼
> もし、あえて変えるなら、[Application.]DefaultFilePath で規定になっているフォルダを変えればよいのです。 なるほど、そうですよね。納得です。 ありがとうございました。