• 締切済み

EXCEL COMMAND関数が使えない

VBでは使えたCOMMAND関数がEXCELでは使えないことが判明しましたが、EXCELで読み込むTXTファイル名の中に店舗コードがあり、どうしてもCOMMAND関数で引数(店舗コード)を取得しないといけません。EXCELでCOMMAND関数に代わるものまたは、別プログラムからEXCELを起動したときに、店舗コード(変数)を取得する方法はありませんか? よろしくお願いします

みんなの回答

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.5

こんにちわ。 色々テストして頂きありがとうございます。 私が試した環境では、saveは不要で値を取得・表示はできました。 VBSからVBAの関数は呼び出せていますか? 当方のエクセル2013で試した感じでは、 - エクセルファイルは xltm で保存が必要 - VBSから呼び出すVBA関数は標準モジュールに配置する (VBSからの呼び出しはxlsApp.Run "Module1.GetHikisuu") のという条件が必要でした。 この条件でVBSからVBAの関数を呼び出し、 メッセージボックスに値を表示することはできました。 ・VBS Set bokWork = xlsApp.Workbooks.Open(my_name) bokWork.Worksheets(1).Cells(2, 1).Value = my_para xlsApp.Run "Module1.GetHikisuu" ・VBA 'my_nameで指定するxlsファイルの標準モジュール Sub GetHikisuu() MsgBox Worksheets(1).Range("A2").Value End Sub

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.4

ネットワークドライブ上にVBSを配置して実行も試してみましたが、 当方の環境ですとセルに正しく設定されるようです・・・。 Officeの違いによるものなのか、 ネットワークドライブの違いなのかちょっと難しいですね。。 ネットワークドライブではなくローカルディスク上にVBSを置いて実行しても 同じ感じでしょうか?

yuyu4247
質問者

お礼

heburusuさん 色々テストしてみてわかったことがあります。 vbsからxltに書き込みはできるのですが、当方のVBAではVBSで書き込んだ店舗コードでtxtを読んで展開しています。 VBAの中で strDatPath = strDatPath & Format(Worksheets("発注管理表").Range("A2").Value, "000") & ".txt" 'ファイルオープン Open strDatPath For Input As #1 のような感じで作成していますが、この時点では"A2"の内容を読めず ファイルオープンでエラーになって終了してXLTを開くと”A2"には入っています。最初から"A2"に店舗コードをセットしておけば、もちろん読めます。 XLTを開いて編集してsaveしないと内容が読めないのでしょうか? もしお分かりでしたら教えてください 何度も質問をしてすみません 宜しくお願いします

yuyu4247
質問者

補足

何度もテストして頂き、ありがとうございます。こちらの環境ではローカルはうまくいくけど、ネットワークドライブへ書き込みされない感じです。ネットワークにVBSを置いてもxltは開いているので、VBSは実行されてセルへの書き込みだけが出来ない現象です。もう少し色々試みてみます。 またご連絡させてください。 宜しくお願いします

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.3

お試し頂きありがとうございます。 当方の環境(Excel2013+VBS)で試したところ、 xltファイル内のセルに書き込むことはできました。 >msgbox my_para こちらで引数は正しく表示されますか? 他にエラーメッセージなど表示されないでしょうか?

yuyu4247
質問者

補足

テストしていただきありがとうございます。 msgbox my_paraは正しい内容が表示されます。 エラーメッセージは、vbsを実行するときに、「このファイルの作成者を確認できません。ファイルを開きますか? \\xxx\\xxx\\xxx\\xxx\\???\\getpara.vbs ネットワークドライブにvbsを置いて実行しています。これ以外のエラーメッセージは表示していません。my_paraを書き込む場所も空白のところを指定しているのですが

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

バッチファイル経由にして、 案1: バッチファイル内でファイルに書き、VBAからそのファイルを読む 案2: 環境変数にセットして、VBAからEnviron関数で環境変数を読む

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

EXCELのVBAに直接コマンドラインから引数を渡すことはできないようですね。 参考URLまとめてありますが、 1. VBSを起動 2. VBSから引数をエクセルのセル内に書き込み 3. VBAからセル内の引数を参照 という回避策があるようです。

参考URL:
http://chaichan.lolipop.jp/vbtips/VBMemo2006082401.htm
yuyu4247
質問者

補足

heburusuさん 連絡おそくなりました。URLを参考にVBSを実行してEXCELに店舗コードを落とすように作ってみたのですが、 bokWork.Worksheets(1).Cells(1, 2).Value = my_para msgbox my_para 引数(店舗コード)がEXCELに書き込まれません。 ちなみに、EXCELはXLT(テンプレート)を実行しています。 店舗コードさえEXCELに書き込まれれば、該当のTXTファイルから 展開できそうなのですが、書き込まれない理由の心当たりはないでしょうか? よろしくお願いいたします

関連するQ&A