Member 13861149 Ответов: 2

Ошибка 1004 в VBA при запуске макроса


У меня есть рабочая тетрадь на 4 листа. Я добавил макрос в лист 3 с именем Amt, чтобы найти сумму. Но во время выполнения макроса я получаю ошибку времени выполнения 1004. Во время отладки VBA он указывает на ActiveSheet.Cells(3, col).Formula = "=SUM(" & rng & ")"

Примечание : значение принимается в D1,E1.... и на основе значения в ячейке я вычисляю сумму значений, основанных на входных данных из D6,E6....и итог отображается в D3,E3....

Что я уже пробовал:

Код приведен ниже. Пожалуйста, помогите мне решить эту проблему.

Dim lastCol As Integer
    lastCol = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count

    Dim col As Integer
    For col = 4 To lastCol  'From D until finished
        Dim numRows As Long
        numRows = ActiveSheet.Cells(1, col).Value2
        
        Dim rng As String
        If numRows > 0 Then
          rng = ConvertToLetter(col) & "6:" & ConvertToLetter(col) & CStr(numRows + 2)
            
            'Get the appropriate total in D3,E3,F3.....
            ActiveSheet.Cells(3, col).Formula = "=SUM(" & rng & ")"
        End If
    Next

Maciej Los

Вы пытались выяснить, какое значение хранит a rng переменная?
Обратите внимание, что есть константа: "6", поэтому это не может быть "D3, E3, F3", а "D6:F3"

2 Ответов

Рейтинг:
2

Maciej Los

Я бы настоятельно рекомендовал прочитать мой ответ на ваш предыдущий вопрос: Мне нужен код VBA, чтобы найти сумму чисел в столбце.[^]


Member 13861149

Спасибо

Maciej Los

Всегда пожалуйста.

Рейтинг:
1

Patrice T

Цитата:
Я получаю ошибку времени выполнения 1004. При отладке кода ...

Находясь в отладчике, откройте окно "локальные переменные" и проверьте значения этих переменных.
Он расскажет вам, что делал ваш код.
Поскольку ваш код зависит от значений ячеек, мы можем только догадываться, что происходит, не зная значений переменных.

[Обновление]
Функция ConvertToLetter, которую вы используете, неверна, ее нужно переписать или использовать доступные функции.
Попробуйте использовать:
Cells(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)


Member 13861149

Значения все в порядке, кроме ГСЧ. Диапазон берется правильно до столбца AZ(col=52). Очевидно, что следующее должно быть принято как BA(col=53), но значение в диапазоне равно "A[6:A[7", что неверно. Фактическое значение в ГСЧ должно быть BA6:BA7

Patrice T

Тогда вы знаете, в чем проблема !
Каков ваш код для ConvertToLetter ?

Member 13861149

Функция ConvertToLetter(iCol как целое число) в виде строк
'https://support.microsoft.com/en-gb/help/833402/how-to-convert-excel-column-numbers-into-alphabetical-characters
Dim iAlpha как целое число
Dim iRemainder как целое число
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
Если iAlpha > 0, то
ConvertToLetter = Chr(iAlpha + 64)
Конец, Если
Если iRemainder > 0, то
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
Конец, Если
Конечная Функция

Patrice T

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