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

VC++(MFC)からExcelマクロを起動する

1
投稿者投稿内容
みみかき
会議室デビュー日: 2008/06/25
投稿数: 1
投稿日時: 2008-06-26 03:17
VC++(MFC)からExcelマクロを起動させたいと思っています。

↓ここの書き込みを参考に作りましたが、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=27656

肝心のRun()関数のところがうまくいきません。

・引数が31個でないと、引数の数が不正でコンパイルエラーとなります
・引数を31個用意すると、コンパイルは通りますが、Run()の呼び出しで例外を投げます

また、_Run2()というものも試しましたが、
・引数が31個でないと、引数の数が不正でコンパイルエラーとなります
・引数を31個用意すると、コンパイルは通り、例外も投げませんが、マクロは実行されていないようです

一番上のbuttheadさんの書き込みに含まれているコードをそのまま使いました。
(ファイル名とマクロ名だけは修正しました)

エクセルの起動やワークブックを開くのはうまく行っており、マクロ起動部分だけが正常に動いていないようです。

環境は、XP, Visual Studio 2005, Excel2007です。
よろしくお願いします。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2008-06-26 17:58
こんにちは。

引用:

みみかきさんの書き込み (2008-06-26 03:17) より:

↓ここの書き込みを参考に作りましたが、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=27656

肝心のRun()関数のところがうまくいきません。

・引数が31個でないと、引数の数が不正でコンパイルエラーとなります
・引数を31個用意すると、コンパイルは通りますが、Run()の呼び出しで例外を投げます



参照先に
引用:

//使いやすいように、_ApplicationクラスのRunメソッドの引数の数を調整してあります。


と書いてあるので、Runメソッドを下記のように書き換えたか、オーバーロードしたんじゃないですか?

コード:
VARIANT Run(VARIANT Macro, VARIANT Arg1)
{
	VARIANT result;
	static BYTE parms[] = VTS_VARIANT VTS_VARIANT ;
	InvokeHelper(0x103, DISPATCH_METHOD, VT_VARIANT, (void*)&result, parms, &Macro, &Arg1);
	return result;
}



ちなみに、buttheadさんの下記のコードの部分は不要ですね。
コード:
	//マクロ・シートをディスパッチを生成 
	pModules_tmp.CreateDispatch("Excel.Macrosheet"); 
	pModules_tmp.m_bAutoRelease = TRUE; 


1

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