excel vba:在选择前获取单元格
我在Excel表格中有以下问题。我想根据第一个单元格在一行中具有相同的格式。这是我到目前为止:excel vba:在选择前获取单元格
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”中。我如何从我的selection.address中提取“197”?用正则表达式还是有更好的方法?
最好的,美国
的任意组合所界定的范围。这里是:
Sub LineFormatSynch()
Dim RowNumber As Integer
RowNumber = Selection.Row
OriginAddress = "D" & 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
这里有一个方法为例,引用表
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
编辑:
要使用,选择要用作模板格式,使用电池对于一行,然后运行宏。它会:
- 检测活动单元格是否在表中。
- 设置为行所选择的小区是在
- 参考应用selcted单元格的格式的所有小区是相同的行中的表
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
当前区域是我发现了一个简单的解决方案,我认为,但THX空白行和空白列
我不明白。 – user366121
上面的代码假定通过*“Excel表格”*您的意思是一个已定义的Excel表格[请参阅此处](http://office.microsoft.com/zh-cn/excel-help/use-excel-tables-to-管理信息-RZ102252956.aspx?部= 2)。如果你的意思是你有一个类似桌子的布局,那么代码将不会做任何更改 – brettdj
是的。这是一个误解。对于那个很抱歉。我的意思是一个文件中的Excel工作表。 – user366121
谁投我倒,为什么? – user366121
不知道。但是我投票给你,因为你找到了自己的解决方案,并且很友善地将它发回到论坛 – brettdj
Thx。我很感激。 – user366121