#excel #get #selection #cell
#excel #получить #выделение #ячейка
Вопрос:
У меня следующая проблема в таблице Excel. Я хочу иметь одинаковое форматирование в строке в зависимости от первой ячейки. Вот что я придумал до сих пор:
Sub LineFormatSynch()
FSize = Selection.Offset(0, -1).Font.Size
FName = Selection.Offset(0, -1).Font.Name
FColor = Selection.Offset(0, -1).Font.Color
FHAlign = Selection.Offset(0, -1).HorizontalAlignment
FVAlign = Selection.Offset(0, -1).VerticalAlignment
For Each c In Range("E196:BR196")
c.Font.Size = FSize
c.Font.Name = FName
c.Font.Color = FColor
c.HorizontalAlignment = FHAlign
c.VerticalAlignment = FVAlign
Next
End Sub
Но это недостаточно гибко. В принципе, я хочу выбрать строку и нажать выполнить макрос, и выбранные ячейки должны быть отформатированы так, как в первой ячейке. Но я не могу понять, как извлечь адрес для первой ячейки из моего выбора. У меня есть номер строки в моем выборе. адрес типа «$ E $ 197: $ BR $ 197». Ячейка, из которой я хочу получить форматирование, всегда находится в столбце «D». Как я могу извлечь «197» из моего selection.address? С помощью регулярного выражения или есть лучший способ?
лучше всего, НАМ
Ответ №1:
Я нашел более простое решение, я думаю, но спасибо. Вот оно:
Sub LineFormatSynch()
Dim RowNumber As Integer
RowNumber = Selection.Row
OriginAddress = "D" amp; CStr(RowNumber)
FSize = Range(OriginAddress).Font.Size
FName = Range(OriginAddress).Font.Name
FColor = Range(OriginAddress).Font.Color
FHAlign = Range(OriginAddress).HorizontalAlignment
FVAlign = Range(OriginAddress).VerticalAlignment
For Each c In Selection
c.Font.Size = FSize
c.Font.Name = FName
c.Font.Color = FColor
c.HorizontalAlignment = FHAlign
c.VerticalAlignment = FVAlign
Next
End Sub
Комментарии:
1. Не знаю. Но я проголосовал за вас, учитывая, что вы нашли свое собственное решение и были достаточно любезны, чтобы опубликовать его на форуме
Ответ №2:
Вот пример способа ссылки на таблицу
Sub LineFormatSynch()
Dim cl As Range
Dim lst As ListObject
Dim rw As Range
Set cl = ActiveCell
Set lst = cl.ListObject
If Not lst Is Nothing Then ' in case ActiveCell is not in a table
Set rw = lst.DataBodyRange.Rows(cl.Row - lst.DataBodyRange.Row 1)
With rw
.Font.Size = cl.Font.Size
.Font.Name = cl.Font.Name
.Font.Color = cl.Font.Color
.HorizontalAlignment = cl.HorizontalAlignment
.VerticalAlignment = cl.VerticalAlignment
End With
End If
End Sub
Редактировать:
Для использования выберите ячейку, которую вы хотите использовать в качестве формата шаблона для строки, затем запустите макрос. Это будет:
- Определите, находится ли активная ячейка в таблице.
- Задайте ссылку на строку, в которой находится выбранная ячейка
- Примените формат выбранной ячейки ко всем ячейкам в одной строке таблицы
Set lst = cl.ListObject
предоставляет ссылку на таблицу
, если cl
ее нет в таблице, lst
будет установлено значение Nothing
lst.DataBodyRange
предоставляет ссылку на данные таблицы (исключая строку заголовка)
Set rw = ...
задает ссылку на строку таблицы, содержащую активную ячейку
. Пять строк внутри With
предложения копируют свойства из cl
во все ячейки в rw
Кстати, это протестировано в Excel 2010, если ваша версия отличается, могут быть некоторые различия, дайте мне знать
Редактировать 2:
Для общего диапазона листа, который выглядит как таблица, рассмотрим:
Sub LineFormatSynch()
Dim cl As Range
Dim lst As Range
Dim rw As Range
Set cl = ActiveCell
Set lst = cl.CurrentRegion
If Not lst Is Nothing Then
Set rw = lst.Rows(cl.Row - lst.Row 1)
With rw
.Font.Size = cl.Font.Size
.Font.Name = cl.Font.Name
.Font.Color = cl.Font.Color
.HorizontalAlignment = cl.HorizontalAlignment
.VerticalAlignment = cl.VerticalAlignment
End With
End If
End Sub
Текущая область представляет собой диапазон, ограниченный любой комбинацией пустых строк и пустых столбцов
Комментарии:
1. Приведенный выше код предполагает, что под «таблицей Excel» вы подразумевали определенную таблицу Excel, см. Здесь . Если вы имели в виду, что у вас табличный макет, тогда код не будет вносить никаких изменений
2. ДА. Это было недоразумение. Извините за это. Я имел в виду лист Excel в файле.