[英]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.