Вызов функции из Module1, когда значение на рабочем листе изменяется - PullRequest
0 голосов
/ 13 февраля 2020

Привет, у меня работает следующая функция для использования в качестве индикаторов состояния на моем листе Excel.

Function MapCheck() As String
Dim C(5), OV, i, x, R1
Dim element As Variant, element2 As Variant

R1 = Application.Caller.Row

C(1) = ColorCode(Trim(Range("E" & R1))) 'Generate a priority code for the DDR deliverable
C(2) = ColorCode(Trim(Range("I" & R1))) 'Generate a priority code for the FAT deliverable
C(3) = ColorCode(Trim(Range("L" & R1))) 'Generate a priority code for the SAT deliverable
C(4) = ColorCode(Trim(Range("O" & R1))) 'Generate a priority code for the CUP deliverable
C(5) = ColorCode(Trim(Range("R" & R1))) 'Generate a priority code for the DWG deliverable
OV = 1 'Define the default colour (Best Case)

For i = 1 To 5 'For each of the five columns
    For x = 1 To 5 'Check each of the 5 columns and...
        If C(i) < C(x) Then 'if the latest column has a worst progress than the worst so far
            OV = C(x) 'Change the overal staus to the worst value
        End If
    Next x
Next i

Select Case OV
    Case Is = 3 'If the overall status is 3
        OV = "Red" 'The overall map colour will be Red
    Case Is = 2 'If the overall status is 2
        OV = "Orange" 'The overall map colour will be Orange/Amber
    Case Is = 1 'If the overall status is 1
        OV = "Green" 'The overall map colour will be Green
End Select

MapCheck = OV 'Return the overal map colour for the row/site

Затем я вызываю функцию в рабочей книге следующим образом =@MapCheck () Моя проблема в том, что когда кто-то обновляет значение в любом из столбцов его проверка c1-c5 он не запускает функцию mapcheck для его обновления

я попытался запустить следующее событие изменения рабочего листа, используя примеры здесь и справку MSonline

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("E1:R100"), Range(Target.Address)) Is Nothing Then
    Call Module1.MapCheck
End If
End Sub

Это просто возвращает

Ошибка времени выполнения 424 объекта требуется

1 Ответ

0 голосов
/ 13 февраля 2020

Если код находится в модуле, то вы захотите передать ему лист, который вы хотите обработать следующим образом:

Function MapCheck(ws as WorkSheet) As String

, а затем использовать этот объект листа, чтобы квалифицировать ваш Range как это:

C(1) = ColorCode(Trim(ws.Range("E" & R1))) 'Generate a priority code for the DDR deliverable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...