これは、同じシート/ワークブックの範囲から可能な値を取得して、Excel セルにドロップダウン リストを作成するために私が書いた方法です。
private void MakeDropDownList(string strSrcSheetName, string strDestSheetName, string strSrcRange, string strDestCell)
{
var currentSheet = Application.Sheets[strDestSheetName];
var inv = Application.Sheets[strSrcSheetName];
var items = inv.Range[strSrcRange];
var list_items = new List<string>();
foreach (Excel.Range cell in items)
{
list_items.Add(cell.Value2.ToString());
}
Range xlsRange;
xlsRange = currentSheet.Range[strDestCell];
Excel.DropDowns xlDropDowns;
Excel.DropDown xlDropDown;
xlDropDowns = ((Excel.DropDowns)(currentSheet.DropDowns(Missing.Value)));
xlDropDown = xlDropDowns.Add((double)xlsRange.Left, (double)xlsRange.Top, (double)xlsRange.Width, (double)xlsRange.Height, true);
//Add item into drop down list
for (int i = 0; i < list_items.Count; i++)
{
xlDropDown.AddItem(list_items[i], i + 1);
}
}
それを使用するには、次のように呼び出します。
MakeDropDownList("Units", "ReceiveBonds", "B1:B5", "E9:E18");
しかし、最終結果は次のようになります。
ご覧のとおり、ドロップダウン リストはE
列幅よりも小さく、さらに悪いことに、ドロップダウン リストから値を選択した後、セルは元の値である を保持しChoose Unit
ます。
私は何か間違ったことをしていますか?
私が欲しいもの:
- このドロップダウン リストを Excel の通常の検証ドロップダウンのように見せるか、または。
- イベントをトリガーして、リストから選択した値を対応するセルに設定できます。