簡體   English   中英

嘗試將值分配給范圍時 VBA 運行時錯誤 1004“應用程序定義或對象定義錯誤”

[英]VBA Runtime Error 1004 "Application-defined or Object-defined error" when trying to assign values to a range

我不確定為什么在嘗試運行以下代碼時出現此錯誤

Sub introtocollection()
    Dim i As Integer
    Dim coll As New Collection
    Dim r As Range
    Set r = Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 2))
    
    
    For i = 2 To 5
        coll.Add r.Cells(i, 2)
        
    Next i
    
    For i = 2 To 5
       Worksheets("Sheet1").Range(Cells(i, 6)).Value = coll(i).Value
       
        
    Next i
    
End Sub

該錯誤在下面的代碼行中突出顯示

Worksheets("Sheet1").Range(Cells(i, 6)).Value = coll(i).Value

嘗試Worksheets("Sheet1").Range(Cells(i, 6)).Value = coll(i,2).Value它可能會有所幫助

這個錯誤很可能是由於代碼試圖通過Cells(i,6)中的地址或名稱間接到達某個區域(請參閱Range 中的第一個參數是如何解釋的)。 假設您將字符串 "A1" 放入單元格F2中,即Cells(2, 6) 然后代碼Range(Cells(2,6))Cells(2,6)替換為其值並返回Range("A1")

我認為這不是你的意圖。 我猜Cells(i,6)對於i=2 to 5是空的,或者不包含正確的范圍地址。 也許你想做這樣的事情:

Worksheets("Sheet1").Cells(i, 6).Value = coll(i).Value

如果是這樣,那么請注意如何提供Collection鍵的分配,因為您還有另一個陷阱。 如果您省略顯式聲明鍵,則它們會從 1 開始自動分配。因此,您將得到的下一個錯誤是Subscript out of range in the second for-loop at i=5 為避免這種情況,請顯式聲明鍵:

coll.Add r.Cells(i, 2), Key:=i

附言
盡管如此,如果您想要對單元格進行完全間接的訪問,那么您應該檢查F2:F5范圍內地址的正確性。 我無法想象其他任何事情都可能導致您提到的錯誤。

暫無
暫無

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

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