процедурный vba слишком длинный, хотелось бы превратить в функцию - PullRequest
0 голосов
/ 11 марта 2011

Я создал сценарий 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

Хотелось бы узнать, почему там ошибка

1 Ответ

1 голос
/ 12 марта 2011
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"     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...