2017-04-06 65 views
0

我試圖做一個副本,粘貼一系列數據並修改第二範圍的格式的某些方面。修改字體顏色在子依賴單元值

我想使顏色取決於如果數字是奇數或偶數 - 這裏是我寫到目前爲止:

sub copy_paste_format() 
Dim c As Variant 
Dim SECONDARY() 
Dim i As Integer 
Dim n As Integer 



ActiveCell.Offset(0, -5).Range("A1:E5").Select 
ActiveWorkbook.Names.Add Name:="PRIMARY", RefersToR1C1:= _ 
    "=Sheet2!R1C1:R5C5" 
Selection.Copy 
ActiveCell.Offset(0, 5).Range("A1").Select 
ActiveSheet.Paste 
ActiveCell.Range("A1:E5").Select 
Application.CutCopyMode = False 
ActiveWorkbook.Names.Add Name:="SECONDARY", RefersToR1C1:= _ 
    "=Sheet2!R1C6:R5C10" 
Selection.Font.Bold = True 
With Selection.Font 
    .Name = "Calibri" 
    .Size = 14 
End With 
n = SECONDARY.Count 

For i = 1 To n 
If Cells.Value Mod 2 = 0 Then 
Cells.Font.Color = vbRed 
Else: Cells.Font.Color = vblue 
End If 
Next i 

End Sub 

我遇到的麻煩的部分是顏色格式。目前,我收到一個「無效限定符」的編譯錯誤。但是在for循環中使用SECONDARY.count不會產生更好的結果。

有沒有人有任何建議?

回答

1

要引用Range使用其名稱,使用類似:

n = Range("SECONDARY").Count 

要遍歷的範圍內的每個細胞,你可能會更好做這樣的事情:

Dim rng As Range 
For Each rng In Range("SECONDARY").Cells 
    If rng.Value Mod 2 = 0 Then 
     rng.Font.Color = vbRed 
    Else 
     rng.Font.Color = vbBlue 
    End If 
Next 

我無法弄清楚你在代碼的第一部分要做什麼,但我建議你閱讀how to avoid Select and Activate,因爲我認爲它不會做你想做的事情。


啊 - 我想我已經弄清楚它的功能了。假設活動單元例如是Sheet1!G12,則代碼將複製單元Sheet1!B12:F16並將其粘貼到Sheet1!G12:K16中。然後它將單元格Sheet1!G12:K16中的字體更改爲粗體,Calibri,大小14.與此代碼混合,將爲Sheet2!A1:E5Sheet2!F1:J5創建兩個範圍名稱。

我猜你真的想與你的代碼做的是:

Sub copy_paste_format() 
    Dim c As Range 
    With Worksheets("Sheet2") 
     .Range("A1:E5").Name = "PRIMARY" 
     .Range("F1:J5").Name = "SECONDARY" 
     .Range("PRIMARY").Copy .Range("SECONDARY") 
     With .Range("SECONDARY").Font 
      .Bold = True 
      .Name = "Calibri" 
      .Size = 14 
     End With 
     For Each c In .Range("SECONDARY").Cells 
      If c.Value Mod 2 = 0 Then 
       c.Font.Color = vbRed 
      Else 
       c.Font.Color = vbBlue 
      End If 
     Next 
    End With 
End Sub 

注:我不知道你,因爲你以爲你不得不是否分配範圍的名稱,或無論你是否需要它們用於其他目的,所以我都將它們留在代碼中。

+0

感謝您的幫助和鏈接 - 這是一個有用的閱讀 –