簡體   English   中英

復制單元格與工作表名稱匹配的行會使下標超出范圍(錯誤9)

[英]Copy row where cell matches worksheet name throws Subscript out of range (Error 9)

我在這個論壇上搜索了很長時間,並且學到了很多東西。 但是,我想我現在有一個容易解決的問題,但是我太盲目了,看不到正確的解決方案。

我有一個超過5萬行的工作表,其中還包含一個供供應商使用的數字,因此這些數字恰好是重復的。 我有一個vba宏,它為每個供應商編號創建了一個新表,沒有重復,所以那不是問題。 但是,我想將該行的數據復制到工作表中,該工作表等於該行中出現的供應商編號。

供應商編號在A列中。因此,如果第2行的供應商編號為10,則將該行復制到工作表“ 10”,第3行的編號為14到工作表“ 14”,第4行的編號為10再次工作表“ 10”,以此類推。

我使用了在這里找到的以下代碼,並對它進行了一些重塑。

Sub CopyRows()

Dim DataSht As Worksheet, DestSht As Worksheet

Set DataSht = Sheets("All Data")

RowCount = DataSht.Cells(Cells.Rows.Count, "A").End(xlUp).Row

For i = 2 To RowCount

DataSht.Range("A" & i).EntireRow.Copy
Set DestSht = Sheets(DataSht.Range("A" & i).Value)
DestLast = DestSht.Cells(Cells.Rows.Count, "A").End(xlUp).Row
DestSht.Range("A" & DestLast + 1).Paste

Next i

End Sub

但是,它在此行上得到下標超出范圍的錯誤:Set DestSht = Sheets(DataSht.Range(“ A”&i).Value)

嘗試這個:

For i = 2 To RowCount      
    Set DestSht = Sheets(CStr(DataSht.Range("A" & i)))
    DestLast = DestSht.Cells(Cells.Rows.Count, "A").End(xlUp).row
    DataSht.Range("A" & i).EntireRow.Copy Destination:=DestSht.Range("A" & DestLast + 1)
Next I

以來:

  • 使用CStr函數,它指向Sheets("12")

  • Cstr則指向Sheets(12) ,即工作簿中的第十二個工作表,它可能不是您想要的工作表,也可能不存在。

導致此錯誤的原因是Excel無法識別與列A值同名的工作表。 您可能想運行這個小子,看看它是否為您提供了一個有關為什么的線索...

Sub SheetNamesAndIndexes()

DIm ws as Worksheet
For Each ws in ThisWorkbook.Sheets
    Debug.print ws.Name & ";" & ws.Index
Next
End Sub

這將顯示所有工作表的名稱和索引。 如果仍然不能解決問題,您可以將其合並到代碼中以幫助您調試,就像這樣...

Dim ws as Worksheet
For i = 2 To RowCount
    For Each ws in ThisWorkbook.Sheets
        Debug.Print ws.Name * ";""" & DataSht.Range("A" & i).Value & """;" & ws.Name = DataSht.Range("A" & i).Value
    Next
...

這會將Col A中每個單元格的值放在每個工作表名稱的旁邊,以及Excel是否認為這兩個匹配。 如果您看到一個期望為“ True”的錯誤消息,請接下來進行調查。 我在DataSht.Range.Value周圍加上了引號,以使其在出現多余空格等情況時更加明顯。如果未產生答案,則建議使用另一個答案來確保您未將字符串與整數進行比較。 如果是這種情況,則將Range.Value包裝在Cstr() ,然后再次運行。 祝好運!

暫無
暫無

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

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