Я хочу передать переменные, ссылающиеся на адреса ячеек в формулу суммы в таблице Excel - PullRequest
0 голосов
/ 09 мая 2019

У меня есть таблица, состоящая из основных задач и подзадач, мне нужны подзадачи, чтобы подвести итог основной задаче.Проблема состоит в том, что подзадачи могут быть 1 или более подзадачей каждый раз в одном и том же столбце.Это должно происходить в коде VBA и вставлять начальную строку подзадачи и конечную строку подзадачи в каждую основную задачу.так что, если электронная таблица редактируется, значение основной задачи будет отражать изменения.

Я попытался создать диапазоны для хранения адресов начальной и конечной подзадач и адреса основной задачи.но когда я пытаюсь вставить его в формулу для вставки в электронную таблицу, он показывает имена переменных того, что должно быть адресом ячейки.

Sub DynamoRange()
    Dim range1 As Range
    Dim range2 As Range
    Dim range3 As Range
    Dim range4 As Range
    Dim range5 As Range
    Dim badd
    Dim eadd

    Dim placeholder
    Dim counter3

    Set range1 = Range("A1")
    Set range2 = Range("E1")

    'Find 1st Main Task'
NextLine1:

    'Handles beginning section of spreadsheet blanks
    If IsNumeric(range2.Offset(counter3, 0)) = True And range1.Offset(counter3, 0) <> "Yes" Then
        counter3 = counter3 + 1
        GoTo NextLine1
    Else
        If IsNumeric(range2.Offset(counter3, 0)) = False And range1.Offset(counter3, 0) <> "Yes" Then
            counter3 = counter3 + 1
            GoTo NextLine1 
        Else
            'Beginning of a new section Set Start and Sum reference
            If IsNumeric(range2.Offset(counter3, 0)) = True And range1.Offset(counter3, 0) = "Yes" And range1.Offset(counter3 - 1, 0) <> "Yes" Then        
                Set range3 = range2.Offset(counter3 - 1, 0)
                Set range4 = range3.Offset(1, 0)

                counter3 = counter3 + 1
                GoTo NextLine1
            Else
                'Set the ending sum point for the task order and apply Ranges - 3-5 into a formula before moving to next section
                If IsNumeric(range2.Offset(counter3, 0)) = True And range1.Offset(counter3, 0) = "Yes" And range1.Offset(counter3 + 1, 0) <> "Yes" Then
                    Set range5 = range2.Offset(counter3, 0)

                    badd = range3.Address(, , xlR1C1)
                    eadd = range4.Address(, , xlR1C1)

                    range3.FormulaR1C1 = "=SUM(range3.Address(,,xlR1C1): 

'КОНЕЦ КОДА - ниже приведены попытки получить адреса для передачи в формулу SUM

 'range3.FormulaR1C1 = 
"=SUM(Address(badd,badd,,0,,):Address(eadd,eadd,,0,))"


'range3.Formula = "=SUM(Address(badd,badd,,0,,):Address(eadd,eadd,,0,))"

'CURRENT EXCEL RESULT =SUM(range3.Address(,,xlR1C1): range4.Address(,,xlR1C1))

1 Ответ

1 голос
/ 09 мая 2019

Вам необходимо научиться правильно объединять строки с помощью &:

Dim badd As String
Dim eadd As String

badd = range3.Address(, , xlR1C1)
eadd = range4.Address(, , xlR1C1)

range3.FormulaR1C1 = "=SUM(" & badd & ":" & eadd & ")"

Также я настоятельно рекомендую избегать использования Goto, это очень плохая практика.

ВыТакже следует проверить, хотите ли вы использовать оператор ElseIf вместо ElseIf (поскольку ваш код не завершен, трудно предложить что-то конкретное здесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...