Sumproduct VBA, возвращающий ошибку несоответствия типов - PullRequest
0 голосов
/ 10 марта 2020

Я очень новичок в VBA, поэтому я уверен, что то, что мне не хватает, очень просто и что-то, что кто-то с большим опытом не мог бы пропустить.

Мой код выглядит следующим образом:

Sub test_match()
Sheets("Course Cascade").Select
Dim i As Long
Dim r As Long
Dim c As Long
Dim rfirst As Long
Dim cfirst As Long
Dim rlast As Long
Dim colnum As Long
Dim rownum As Long
Dim csum As Long
Dim rowTerm As Long
Dim k As Integer
Dim rabove As Long
Dim ccount As Long
Dim clkup As Long

r = 107: c = 7: rowTerm = 106: ccount = 3: cfirst = 7: csum = c - 1: k = WorksheetFunction.CountIf(Range("e107:e1661"), ">0"): clkup = 5

If Cells(r, ccount) <= WorksheetFunction.SumProduct((Range(Cells(47, c), Cells(74, c))), (--Range("CourseCascadeRow").Value = Cells(r, clkup))) Then
                Cells(r, c) = WorksheetFunction.IfError(WorksheetFunction.Index("CourseCascadeCt", WorksheetFunction.Match(Range(Cells(r, 5)), Range("CourseCascadeCtRow"), 0), _
                WorksheetFunction.Match(Range(Cells(106, c)), Range("CourseCascadeCol"), 0) / WorksheetFunction.Index("CourseCascadeCt", WorksheetFunction.Match(Range(Cells(r, 5)), Range("CourseCascadeCtRow"), 0), _
                WorksheetFunction.Match(Range(Cells(106, c)), Range("CourseCascadeCol"), 0))), 0)

Там также есть аргумент else, но я выделил ошибку несоответствия типов для этой части формулы Sumproduct: --Range ("CourseCascadeRow"). Value = Cells (r, clkup)) ) «.Value» в конце диапазона я пытался добавить и удалить без изменений.

Может кто-нибудь сказать мне, что я делаю неправильно? Я знаю, что код ужасен ...

Спасибо!

1 Ответ

0 голосов
/ 10 марта 2020

Кстати, как @ TimWilliams , прокомментировал, разделил его и ограничил количество функций рабочего листа:

Sub kjlkjlkj()

    Dim CCR As Variant
    CCR = Range("CourseCascadeRow")

    Dim vl As Double
    vl = 0#



    Dim i As Long
    For i = 1 To UBound(CCR, 1)
        Dim j As Long
        For j = 1 To UBound(CCR, 2)
            vl = vl + (Cells(47, c) * .Cells(74, c) * (-1 * CBool(CCR(i, j) = Cells(r, clkup))))
        Next j
    Next i


    If .Cells(r, ccount) <= vl Then
        Dim rw As Variant
        rw = Application.Match(Range(Cells(r, 5)), Range("CourseCascadeCtRow"), 0)

        Dim clm As Variant
        clm = Application.Match(Range(Cells(106, c)), Range("CourseCascadeCol"), 0)

        Cells(r, c.value = 0

        If Not (IsError(rw) Or IsError(clm)) Then
            Cells(r, c).Value = Range("CourseCascadeCt").Cells(rw, c).Value / Range("CourseCascadeCt").Cells(rw, c).Value
        End If
    End If

End Sub

Это поможет с отладкой.

...