我创建了一个包含两个按钮的自定义 Excel 功能区。btnFillColor 和 btnUndo。
当用户单击 btnFillColor 按钮时,选定的单元格会填充一些颜色。同时显示一个输入框,要求用户为选定的单元格区域命名。
当用户单击 btnUndo 时,单元格被清除,相应范围的名称以完全相反的顺序被删除。
当用户单击 btnFillColor 并为选定的单元格命名时,如果已存在相同的名称,则该范围将附加到具有相同名称的现有范围。
现在我的问题是:当用户在两个不同的范围以相同的名称添加后单击撤消按钮时,只有那些单元格应该被清除并从最后添加到范围的范围中删除。另一个应与之前给出的名称保持不变。如何做到这一点?
这是代码。
private void btnFillColor_Click(object sender, RibbonControlEventArgs e)
{
Excel.Worksheet ws = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet;
string strFilledRangeAddress = Globals.ThisAddIn.Application.Selection.Address.ToString();
Excel.Range FilledRange = ws.get_Range(strFilledRangeAddress);
FilledRange.Interior.Color = Color.YellowGreen;
string tagName = Microsoft.VisualBasic.Interaction.InputBox("Enter tag name:");
if (lstFilledRangeName.Contains(tagName))
{
Excel.Range ExistingRange = ws.get_Range(tagName);
FilledRange = Globals.ThisAddIn.Application.Union(ExistingRange, FilledRange);
}
else
{
lstFilledRangeName.Add(tagName);
}
FilledRange.Name = tagName;
lstFilledRangeAddresses.Add(strFilledRangeAddress);
if (btnUndo.Enabled == false)
btnUndo.Enabled = true;
}
private void btnUndo_Click(object sender, RibbonControlEventArgs e)
{
Excel.Worksheet ws = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet;
Excel.Range FilledRange = ws.get_Range(lstFilledRangeAddresses[lstFilledRangeAddresses.Count - 1]);
FilledRange.Interior.ColorIndex = 0;
lstFilledRangeAddresses.RemoveAt(lstFilledRangeAddresses.Count - 1);
if (lstFilledRangeAddresses.Count == 0)
btnUndo.Enabled = false;
}