2017-10-04 72 views
2

我有一系列的細胞在一張我希望複製N次在另一個片: 對於n = 4人們必須:小姐東西在簡單的循環

Input (Sheet1)    Output (Sheet2) 
ABC       ABC 
DEF       ABC 
GHI       ABC 
           ABC 
           DEF 
           DEF 
           DEF 
           DEF 
           GHI 
           GHI 
           GHI 
           GHI 

我所做的僅僅是:

Sub REPLICATE() 
    Dim i As Integer 
    Dim j As Integer 
    Dim TEMP As String 

    For i = 1 To 400 
    TEMP = Workbooks("Libro1").Sheets("Hoja1").Cell(i, 1).Value 
     For j = 1 To 4 
     Workbooks("Libro1").Sheets("Hoja2").Cell(j, 1) = TEMP 
     Next j 
    Next i 
End Sub 

我得到了錯誤438.我認爲問題可能是我使用了字符串,但我在Sheet1中使用了簡單的整數,並且遇到了同樣的問題。感謝您的建議。

回答

5

這是Cells不是Cell。無論如何,你的代碼將無法工作,因爲它會覆蓋(每次都重新啓動j)。試試這個(調整工作表參考)。

Sub REPLICATE() 

Dim i As Long 

For i = 1 To Sheet1.Cells(Rows.Count, 1).End(xlUp).Row 
    Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp)(2).Resize(4).Value = Sheet1.Cells(i, 1).Value 
Next i 

End Sub 
+1

完美的作品,謝謝你' – IlvarNourtan

3

Sheets集合返回一個Object,這意味着什麼,你訪問後鍵入它不會給你智能感知或自動完成幫助和VBA會很樂意編譯它,因爲任何電話對Object接口進行是遲到的,因此只能在運行時解決。

解決方案是堅持早期綁定的代碼並聲明一個Worksheet對象。此外,如果您的意思是拉Worksheet,則使用Worksheets集合,因爲Sheets集合可以爲您提供Chart對象(即並非所有工作表均爲工作表)。

Dim ws As Worksheet 
Set ws = Workbooks("Libro1").Worksheets("Hoja1") 

而現在,當你鍵入ws.你會看到Cell確實不Worksheet類型的成員(因此「對象不支持屬性或方法」):

For i = 1 To ws.Cells(...) 

那表示如果Workbooks("Libro1")ThisWorkbook(包含VBA代碼的書),那麼您應該使用現有的工作表對象。

您在VBA項目中獲得每個Worksheet文檔模塊的「免費」,全局範圍Worksheet對象變量 - 只需使用它!

For i = 1 To Sheet1.Cells(...) 

SJR's answer那樣。

您可以通過在項目瀏覽器(Ctrl + R)中查找表格,然後更改屬性 toolwindow(F4)中的(Name)屬性來重命名該全局範圍對象變量。請注意,像這樣更改名稱將而不是自動更新您使用Sheet1的現有代碼。如果你想重命名並且傳播的變化,你需要重構你的代碼。Rubberduck(一個開源VBIDE加載的項目,我管理),可以爲你做的:

before refactoring

提供一個新的名字:

在Rubberduck的代碼瀏覽器右鍵單擊工作表:

supplying the new name

整個代碼每次提到舊名稱現在已更新:

after refactoring

您也可以嘗試進行與按Ctrl + H「查找/替換」重構,但是這可能是乏味的,並引入更多的問題的風險。 Rubberduck爲此構建了一個符號表,因此它比簡單的查找&替換更爲穩健。

+0

最有教育意義的,一如既往。 – SJR

+0

謝謝你的解釋和你的時間質量,這是非常有用的。 – IlvarNourtan