実現したいこと
C#を使用し、Excelファイルの特定セルにプルダウンを作成します。
遅延バインディングを使用した実装方法について教えてください。
前提
- プルダウンの選択肢は都度変わりますので、プログラム的に選択肢を切り替えられるようにしたいです。
- 既存のソースコードが遅延バインディングを使用しているため、同様に遅延バインディングを使用したいです。
(Microsoft.Office.Interop.Excelを使用しない) - VBAで作成した以下のコードと同様の動作になるように C#でコーディングする方法が分からないです。
VBA
1 Range("P1").Validation.Delete 2 Range("P1").Validation.Add Type:=xlValidateList, Formula1:="選択肢1,選択肢2,選択肢3" 3 Range("P1").Validation.InCellDropdown = True
発生している問題・エラーメッセージ
System.Reflection.TargetInvocationException: '呼び出しのターゲットが例外をスローしました。' COMException: HRESULT からの例外:0x800A01A8
該当のソースコード
C#
1string cellAddress = "C3"; 2// Rangeを指定 3dynamic oRange = m_oSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null 4 , m_oSheet, new object[] { cellAddress }); 5dynamic oValidation = oRange.GetType().InvokeMember("Validation", BindingFlags.GetProperty, null, oRange, null); 6dynamic oDelete = oValidation.GetType().InvokeMember("Delete", BindingFlags.GetProperty, null, oRange, null); 7 8// 遅延バインディングでデータバリデーションを設定 (※ここでエラー発生) 9oValidation.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, oValidation, new object[] 10{ 11 3, // Excel.XlDVType.xlValidateList 12 1, // Excel.XlFormatConditionOperator.xlEqual 13 1, // Excel.XlValueOperator.xlBetween 14 "選択肢1,選択肢2,選択肢3", 15 Type.Missing // Excel.XlDataBarBorderType.xlDataBarBorderSolid ではなく Type.Missing 16}); 17 18// セルにプルダウンを表示させる 19oRange.GetType().InvokeMember("Select", BindingFlags.InvokeMethod, null, oRange, null); 20m_oExcel.Selection.InCellDropdown = true;
試したこと
上記ソースコードにてC3セルにプルダウンを作成することを試したが、
上述のエラーが発生するため、Validationの Addができない。
補足情報(FW/ツールのバージョンなど)
言語 : C# (.NET Framework 4)
開発環境 : Microsoft Visual Studio Express 2017 for Windows Desktop

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。