VS2017のC#でExcelVBAを操作し、名前定義されたセルに値を設定しようとしています。
VBAでいうと、
VBA
1ActiveWorkbook.Names("データ").RefersToRange.Value = "設定したい値"
のコードを、C#からGetType().InvokeMemberを使用して、値を設定するのに、
以下のようなコードを書いています。
(宣言やActivator.CreateInstance等のコードは省略)
C#
1 Book = App.GetType().InvokeMember("ActiveWorkbook" , BindingFlags.GetProperty , null , App , null); 2 Names = Book.GetType().InvokeMember("Names" , BindingFlags.GetProperty , null, Book , null); 3 4 Parameters = new object[1]; 5 Parameters[0] = "データ"; 6 //↓ここでエラー 7 Name = Names.GetType().InvokeMember("Item" , BindingFlags.GetProperty , null , Names , Parameters);
エラーコードは
System.Reflection.TargetInvocationException: '呼び出しのターゲットが例外をスローしました。'
内部例外
COMException: メンバーが見つかりません。 (HRESULT からの例外:0x80020003 (DISP_E_MEMBERNOTFOUND))
と、表示されます。
ローカルウィンドウで変数の中身を確認すると、
AppにはApplication、
BookにはActiveWorkbookが、NamesにはNamesの内容が正しく入っています。
ワークブックの名前定義には「データ」の定義がちゃんとあります。
ユーザー環境のエクセルのバージョンがバラバラのため、
遅延バインディングを使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/18 09:49