簡體   English   中英

Excel VBA宏出現運行時錯誤'1004'

[英]Excel VBA Macro with run-time error '1004'

誰能幫我這個? 對於此特定功能,它正在獲取“ sheet1.Range(“ a1:a”&RowNbr).100的運行時錯誤。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

如果失敗,請選擇“調試”並查看“立即窗口”。 在即時窗口中,鍵入?RowNbr並按Enter。 您將看到RowNbr的值...它可能為null(導致錯誤)。 如果是這樣,則可以在“即時”窗口中備份代碼,例如依次在每個行中粘貼一個?。 在前。 您可以檢查范圍是否符合預期,包括工作表,甚至是工作簿,例如?sheet1.name?thisworkbook.name ?sheet1.name

您還可以粘貼每行的段,以檢查其值是否符合預期,例如?sheet1.Range("a1:a" & RowNbr).address

嘗試清除要復制高級過濾器值的目標單元格的內容,然后查看其是否有效。

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

做了一些代碼清理,下面的代碼對我有效。 我僅使用空的標准范圍進行了測試,這意味着列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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM