Макрос Excel VBA с ошибкой во время выполнения «1004» - PullRequest
0 голосов
/ 13 мая 2018

Кто-нибудь может мне помочь с этим? для этой конкретной функции он получает ошибку времени выполнения 1004 для "sheet1.Range (" a1: a "& RowNbr). Действие AdvancedFilter: = xlFilterCopy, CopyToRange: = sheet1.Range (" J1 "), уникальное: = True «

это полные коды:

Sub stock_exercise()
Dim RowNbr As Long
Dim uniqueticker As Long
Dim totalvolume As String
Dim r As Long
Dim sheet1 As Worksheet

Set sheet1 = ThisWorkbook.Sheets("A")'determine row count
RowNbr = sheet1.Range("A1", sheet1.Range("A1").End(xlDown)).Rows.Count

'copy and past unique ticker from column a to column j
sheet1.Range("a1:a" & RowNbr).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=sheet1.Range("J1"), Unique:=True

sheet1.Range("J1").Value = "ticker"
uniqueticker = sheet1.Range("j1", Range("j1").End(xlDown)).Rows.Count

'sumif of each ticker
For r = 2 To uniqueticker
    totalvolume = Application.SumIf(sheet1.Range("a1:a" & RowNbr),     sheet1.Cells(r, 10), sheet1.Range("g1:g" & RowNbr))
    sheet1.Cells(r, 11).Value = totalvolume
Next r
End Sub

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

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

Sub stock_exercise()
Dim RowNbr As Long
Dim uniqueticker As Long
Dim totalvolume As String
Dim r As Long
Dim wksOne As Worksheet

Set wksOne = ThisWorkbook.Sheets("A") 'determine row count
RowNbr = wksOne.Range("A1", wksOne.Range("A1").End(xlDown)).Rows.Count

'clear contents of destination cell before running the code
wksOne.Range("J1").CurrentRegion.ClearContents

'copy and past unique ticker from column a to column j
wksOne.Range("a1:a" & RowNbr).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=wksOne.Range("J1"), Unique:=True

wksOne.Range("J1").Value = "ticker"
uniqueticker = wksOne.Range("j1", Range("j1").End(xlDown)).Rows.Count

'sumif of each ticker
For r = 2 To uniqueticker
    totalvolume = Application.SumIf(wksOne.Range("a1:a" & RowNbr), wksOne.Cells(r, 10), wksOne.Range("g1:g" & RowNbr))
    wksOne.Cells(r, 11).Value = totalvolume
Next r
End Sub
0 голосов
/ 13 мая 2018

Сделал небольшую очистку кода, и код ниже работает мной.Я тестировал только с пустыми диапазонами критериев, что означает, что столбец K (столбец 11 в коде) заполнен нулевыми значениями, поэтому, если run-time error 1004 вновь появляется у вас с этим кодом, это говорит о том, что проблема заключается здесь.В этом случае убедитесь, что все значения в диапазонах критериев функции SumIf являются действительными.

Sub stock_exercise()
    Dim r As Long, RowNbr As Long
    Dim uniqueticker As Long
    Dim rng As Range
    Dim sheet1 As Worksheet

    Application.ScreenUpdating = False

    Set sheet1 = ThisWorkbook.Sheets("A")

    With sheet1

        'determine row count
        RowNbr = .Range("A1", .Range("A1").End(xlDown)).Rows.Count

        Set rng = .Range("a1:a" & RowNbr)

        'copy and paste unique ticker from column a to column j
        rng.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("J2"), Unique:=True

        .Range("J1").Value = "ticker"
        uniqueticker = .Range("j1", Range("j1").End(xlDown)).Rows.Count - 1 ' minus one, since we insert from row two

        'sumif of each ticker
        For r = 2 To uniqueticker + 1

            ' insert total volume
            .Cells(r, 11).Value = Application.SumIf(rng, .Cells(r, 10), .Range("g1:g" & RowNbr))
        Next r

    End With

    Application.ScreenUpdating = True

End Sub
0 голосов
/ 13 мая 2018

При сбое выберите «Отладка» и просмотрите «Немедленное окно».В появившемся окне введите ?RowNbr и нажмите Enter.Вы увидите значение RowNbr ... оно может быть нулевым (вызывая ошибку).Если это так, вы можете создать резервную копию кода в окне Immediate, например, вставив в каждую строку по очереди знак?спереди.Вы можете проверить, соответствует ли диапазон ожидаемому, листу и даже рабочей книге, например, ?sheet1.name и ?thisworkbook.name.

Вы также можете вставить сегменты каждой строки, чтобы убедиться, что их значение соответствует ожидаемому.Например, ?sheet1.Range("a1:a" & RowNbr).address

...