2011-10-04 77 views
0

我在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」?用正則表達式還是有更好的方法?

最好的,美國

回答

1

的任意組合所界定的範圍。這裏是:

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

0

這裏有一個方法爲例,引用表

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

相關問題