Получить доступ к активной ячейке в выбранном диапазоне в Excel?

#excel #c#-3.0 #vsto

#excel #c #-3.0 #vsto

Вопрос:

Я работаю с VSTO. В этом есть ситуация, в которой при нажатии кнопки на листе Excel отобразится поле ввода, и я получу выбранный диапазон. Я хочу знать, как я могу получить выбранный диапазон из inputbox, используя адрес активной ячейки на листе 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?

Заранее спасибо

Ответ №1:

Вот как вы можете это сделать, используя 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: " amp; ActiveCell.Address
    End If
End Sub
  

Ответ №2:

не очень эффективно, но должно сработать.

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

Ответ №3:

Не уверен, что правильно понял ваш вопрос, но поищите функцию CellInNamedrange здесь http://www.cpearson.com/excel/excelM.htm