2013-02-01 142 views
-1

EXCEL VBA子程序通信,我想缩短这个代码,我知道这是可能的,我只是不知道正确的语法的范围更新

我想创建一个子程序来更新字体颜色,只是把它从如果只改变第一小区字母陈述

会有人介意帮助,所以我可以记住这一点,以备将来参考

在此先感谢,

编辑:只是为了澄清,我想要做的事像这样

If Not Intersect(Target, Range("C3")) Is Nothing Then 'do the following if e3 is updated 

'reset all font colors to black 
Range("C8:K9,C14:K14,C37:K37").Font.ColorIndex = 1 
Range("C7:K7,C11:K11,C13:K13,C23:K23,C28:K28").Font.ColorIndex = 1 
Range("C10:K10,C15:K16").Font.ColorIndex = 1 
Range("C17:K17").Font.ColorIndex = 1 
Range("C18:K18,C33:K33").Font.ColorIndex = 1 
Range("C24:K26,C29:K31").Font.ColorIndex = 1 
Range("C32:K32").Font.ColorIndex = 1 
Range("C36:K36,C38:K38").Font.ColorIndex = 1 

    If Range("C3") = "1" Then ' do the following if C3 is 1 
     updateFontColor c 
    ElseIf Range("C3") = "2" Then ' do the following if C3 is 2 
     updateFontColor d 
    ElseIf Range("C3") = "3" Then ' do the following if C3 is 3 
      updateFontColor e 
    ElseIf Range("C3") = "4" Then ' do the following if C3 is 4 
     updateFontColor f 

    ElseIf Range("C3") = "5" Then ' do the following if C3 is 5 
     updateFontColor g 

    ElseIf Range("C3") = "6" Then ' do the following if C3 is 6 
       updateFontColor h  
    ElseIf Range("C3") = "7" Then ' do the following if C3 is 7 
      updateFontColor i  
    ElseIf Range("C3") = "8" Then ' do the following if C3 is 8 
      updateFontColor j  
    ElseIf Range("C3") = "9" Then ' do the following if C3 is 9 
      updateFontColor k 
       End If 
End If 

Sub updateFontColor(x As Range) 
     Range("x8:K9,x14:x14,x37:K37").Font.ColorIndex = 2 
     Range("x7:K7,x11:K11,x13:K13,x23:K23,x28:K28").Font.ColorIndex = 39 
     Range("x10:K10,x15:K16").Font.ColorIndex = 35 
     Range("x17:K17").Font.ColorIndex = 28 
     Range("x18:K18,x33:K33").Font.ColorIndex = 38 
     Range("x24:K26,x29:K31").Font.ColorIndex = 36 
     Range("x32:K32").Font.ColorIndex = 44 
     Range("x36:K36,x38:K38").Font.ColorIndex = 15 
End Sub 
+0

chr(65)是“A”,所以'chr(64+ yourcellvalue + 2)'会给你你需要的列字母。 –

+0

对不起,我不知道如何帮助,也许我只是没有得到它,我编辑我的帖子,以澄清我想要做什么...... – maxgohan

+1

如果您计算从单元格值的列字母(并传递给如雅各布所示),那么你不需要所有这些'如果... elseif ...'语句 –

回答

1

串连接操作:&

传递变量x为字符串:

updateFontColor("K") 

子:

Sub updateFontColor(x As String) 'pass x as string, not range 
    Range(x & "8:K9," & x & "14:K14," & x & "37:K37").Font.ColorIndex = 2 
    . 
    . 
    . 
End Sub 

传递一个字符串打电话给你的子

+0

谢谢!正是我需要知道的! – maxgohan