2011-03-11 24 views
0

我創建了一個VBA腳本,它檢測一個數字並根據我給出的範圍顯示一種顏色。然而,我不知道如何把它變成一個函數。問題是,如果我反覆重複這段代碼,我得到一個錯誤,說存儲過程太大了。任何想法如何將此代碼轉換爲函數?程序vba太長,想變成函數

的Q3:Q3是可變的,的代碼下一個線將R3:R3

的_BAL1也是可變的,改變上的代碼的下一行的1

我也使用這樣的:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("Q3:Q3")) Is Nothing Then 
     Me.Shapes("_BAL1").Select 
     With Range("BAL1") 
       Selection.ShapeRange.Fill.ForeColor.RGB = ThisWorkbook.Colors(.Value) 
      .Select 
     End With 
    End If 

試圖在回答工作中給出的代碼,但它不會工作,一直給我對象424錯誤:

這裏是適應代碼

Function my_test(ByRef Target As Range, ByVal my_range As String, ByVal my_range2 As String) 
    If Not Intersect(Target, Range(my_range)) Is Nothing Then 
    Me.Shapes("_" & my_range2).Select 
    With Range(my_range2) 
     Selection.ShapeRange.Fill.ForeColor.RGB = ThisWorkbook.Colors(.Value).Select 
    End With 
    End If 

End Function 


Private Sub Worksheet_Change(ByVal Target As Range) 

Call my_test(Target, "Q3:Q3", "BAL1") 
Call my_test(Target, "Q4:Q4", "BAL2") 

End Sub 

很想知道爲什麼錯誤是有

+0

啊,BAL1是一個單元格引用,所以基本上我的左邊顏色的網格,右邊我有同樣的網格作爲數字。當我更新一個數字時,它會更新網格中的相應顏色。完全符合我的舊代碼,但是我後來得到的程序錯誤太大了。我編輯了代碼嘗試一種新的方式,現在我即將得到一個對象丟失錯誤 – 2011-03-11 13:07:31

+0

這很奇怪,我的問題上的所有評論都消失了 - 去圖... – 2011-03-11 16:10:06

+0

評論只有消失,如果足夠的人發現他們嘈雜或攻擊。 – 2011-03-11 18:05:57

回答

1
Function my_test(ByRef Target As Range, ByVal my_range As String, _ 
             ByVal my_range2 As String) 

     If Not Intersect(Target, Range(my_range)) Is Nothing Then 
      Me.Shapes("_" & my_range2).Fill.ForeColor.RGB = _ 
        ThisWorkbook.Colors(Range(my_range2).Value)  
     End If 

End Function 

警告:沒有錯誤檢查捕獲指定名稱的不存在的形狀。 而你並不需要使用電話或括號來調用這個:

my_test Target, "Q3:Q3", "BAL1"  
+0

輝煌的解決方案 - 非常感謝您爲我解決這個問題:) – 2011-03-17 12:08:40