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 
+0

谁投我倒,为什么? – user366121

+0

不知道。但是我投票给你,因为你找到了自己的解决方案,并且很友善地将它发回到论坛 – brettdj

+0

Thx。我很感激。 – user366121

这里有一个方法为例,引用表

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 

编辑:

要使用,选择要用作模板格式,使用电池对于一行,然后运行宏。它会:

  1. 检测活动单元格是否在表中。
  2. 设置为行所选择的小区是在
  3. 参考应用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空白行和空白列

+0

我不明白。 – user366121

+0

上面的代码假定通过*“Excel表格”*您的意思是一个已定义的Excel表格[请参阅此处](http://office.microsoft.com/zh-cn/excel-help/use-excel-tables-to-管理信息-RZ102252956.aspx?部= 2)。如果你的意思是你有一个类似桌子的布局,那么代码将不会做任何更改 – brettdj

+0

是的。这是一个误解。对于那个很抱歉。我的意思是一个文件中的Excel工作表。 – user366121