Function vba程序太长,想变成函数吗

Function vba程序太长,想变成函数吗,function,vba,Function,Vba,我已经创建了一个VBA脚本,它可以根据给定的范围检测数字并显示颜色。然而,我不知道如何把它变成一个函数。问题是,如果我一遍又一遍地重复这段代码,就会出现一个错误,说存储过程太大了。有没有办法把这段代码变成一个函数 Q3:Q3是可变的,接下来的代码行将是R3:R3 _BAL1也是可变的,在接下来的代码行中改变1 我也在使用这个: Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Rang

我已经创建了一个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
我很想知道为什么会有错误

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 
警告:检查以捕获给定名称的不存在形状不会出错。 您不需要使用Call或parens来调用:

my_test Target, "Q3:Q3", "BAL1"     

啊,BAL1是一个单元格引用,所以基本上我在左边有一个颜色网格,在右边我有和数字相同的网格。当我更新一个数字时,它会更新网格中相应的颜色。在我的旧代码中工作得很好,但我得到的错误是过程太大了。我对代码进行了编辑以尝试一种新的方式,现在我得到一个对象丢失错误这很奇怪,我问题上的所有注释都消失了-去吧图…只有当足够多的人发现注释嘈杂或令人反感时,注释才会消失。函数基本上会返回一些东西;如果调用它时没有处理任何返回值,为什么要将其转换为函数?如果我没有弄错的话,您正在尝试将一个具有一个参数的子对象转换为具有多个参数的子对象,但仍然是一个出色的解决方案-非常感谢您为我解决此问题:)