获取活动单元格是否在Excel中的选定范围内可用?

时间:2010-09-07 06:17:30

标签: excel c#-3.0 vsto

我正在与VSTO合作。在这里有一个asituation,其中在Excel工作表的按钮单击它将显示输入框,我将获得所选范围。我想知道如何从输入框中获取Excel工作表的活动单元格地址中的所选范围。

object objInputBox= Excel.Application.InputBox(prompt, field, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, 8);
ExcelXP.Range selectedRange = objInputBox as Excel.Range;

string rangeName = selectedRange.get_Address(Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing); 

string activeCell =Application.Application.ActiveCell.get_Address(true, true, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);

如何获取rangeName中的活动单元格地址?

提前致谢

3 个答案:

答案 0 :(得分:3)

使用Application.Intersect,您可以采用以下方式执行此操作。示例是VBA,但可以轻松移植到C#。

Sub TestinRange()
    Dim inputRange As Range
    Set inputRange = Worksheets(1).Range("B1:B5")
    Dim IsActiveCellInInputRange As Range
    Set IsActiveCellInInputRange = Application.Intersect(inputRange, ActiveCell)
    If IsActiveCellInInputRange Is Nothing Then
        Debug.Print "Nope, the ActiveCell is not within the Input Range"
    Else
        Debug.Print "Yep, the ActiveCell is within the Input Range. ActiveCell Address: " & ActiveCell.Address
    End If
End Sub

答案 1 :(得分:1)

效率不高但应该有效。

private bool IsActiveCellInRange(Range selectedRange)
{
  foreach cell in selectedRange.Cells
    if (cell == activeCell)
      return true;
  }
  return false;
}

答案 2 :(得分:1)

不确定我的问题是否正确,但请在此处查找CellInNamedrange函数 http://www.cpearson.com/excel/excelM.htm