Как определить конечные точки объекта рисования линии?

У меня есть объект рисования линии (= autoshape) в электронной таблице Excel. Я хочу определить, к какой ячейке он «указывает». Для этого мне нужно знать координаты начальной и конечной точек.

Я могу использовать .Top , .Left , .Width , .Height для определения ограничивающего прямоугольника, но строка может находиться в двух разных положениях в этом прямоугольнике.

Для этого вы должны использовать элементы HorizontalFlip и VerticalFlip . Следующая функция должна делать то, что вы хотите:

 Function CellFromArrow(ByVal s As Shape) As Range Dim hFlip As Integer Dim vFlip As Integer hFlip = s.HorizontalFlip vFlip = s.VerticalFlip Select Case CStr(hFlip) & CStr(vFlip) Case "00" Set CellFromArrow = s.BottomRightCell Case "0-1" Set CellFromArrow = Cells(s.TopLeftCell.Row, s.BottomRightCell.Column) Case "-10" Set CellFromArrow = Cells(s.BottomRightCell.Row, s.TopLeftCell.Column) Case "-1-1" Set CellFromArrow = s.TopLeftCell End Select End Function 

Этот код протестирован в Excel 2010. Кажется, работает. Надеюсь это поможет!

EDIT: Если вам нужно беспокоиться о фигурах, содержащихся в группах, то, похоже, единственное решение – это разгруппировать, перебрать фигуры и затем перегруппироваться. Что-то вроде следующего:

 Dim s As Shape For Each s In ActiveSheet.Shapes If s.Type = msoGroup Then Dim oldName as String Dim sGroup As GroupShapes Dim GroupMember as Shape Set sGroup = s.GroupItems oldName = s.Name 'To preserve the group Name s.Ungroup For Each GroupMember in sGroup 'DO STUFF Next Set s = sGroup.Range(1).Regroup 'We only need to select one shape s.Name = oldName 'Rename it to what it used to be End If Next 

Для получения дополнительной информации о методе «Перегруппировать» вы можете обратиться к документации ShapeRange.

Дайте мне знать, если это сработает для вас!

Interesting Posts

Переместите курсор в текстовое поле в Word

Сохранять ведущие нули в Excel Split Output

Если две ячейки содержат определенный текст, поместите текстовое значение смежной ячейки в новую ячейку

Попытка удалить определенные элементы из уже заполненного Combobox VBA

COUNTIF внутри COUNTIFS

Форматирование тысяч разделителей и десятичных знаков с помощью TEXT в Excel

Получить информацию о ячейке из другого столбца в строке

Получите используемый диапазон электронной таблицы Open XML на английских метрических единицах (ЭВС)

Цитирование через коллекцию полей ADO в VBA с пустым набором записей

Не удалось установить значение свойства VBA Slicer для значения False

Формула Excel для сравнения парциальных ячеек

Проверьте, доступно ли значение excel в другом столбце

Как сохранить файл Excel в формате pdf через Matlab на Mac?

Excel vba: найдите строку на основе уникального идентификатора, потяните ее, отредактируйте, а затем импортируйте обратно в одно и то же место с ревизиями

Excel VBA- Попытка копирования значений в итоговый лист на основе значения

Давайте будем гением компьютера.