返回列表 上一主題 發帖

這個問題頭大了..想了好久

這個問題頭大了..想了好久

我在"統計"這個Sheet啟用巨集
把"學生頁"這個Sheet的學生座號,撈到"統計"這個Sheet
但是都會出現"1004  應用程式或物件定義上的錯誤"

有附檔案
  1. Sub TEST()
  2. Dim Student()
  3. x = 1
  4. For Each y In Sheets("學生頁").Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
  5. ReDim Student(x)
  6. Student(x) = y
  7. Sheets("統計").Cells(x, 1) = Student(x)
  8. x = x + 1
  9. Next
  10. End Sub
複製代碼

學生.rar (8.71 KB)

學生

本帖最後由 n7822123 於 2015-8-22 12:44 編輯

回復 1# EGBT


   幫你改寫了,試試看吧:D,可能是你y沒定義的關係
  1. Sub TEST()

  2. [code]Sub TEST()
  3. Dim y As Range
  4. x = 1
  5. R = Sheets("學生頁").Cells(1, 1).CurrentRegion.Rows.Count
  6. For Each y In Sheets("學生頁").Range(Cells(2, 1), Cells(R, 1))
  7. Sheets("統計").Cells(x, 1) = y
  8. x = x + 1
  9. Next
  10. End Sub
複製代碼

TOP

回復 1# EGBT


    找到你的原因了,把RANGE前面的SHEETS("學生頁")拿掉,
   
    前面加一行 Sheets("學生頁").Activate,就可以執行,貼上修改後的
  1. Sub TEST8()
  2. Dim Student()
  3. x = 1
  4. Sheets("學生頁").Activate
  5. For Each y In Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
  6. ReDim Student(x)
  7. Student(x) = y
  8. Sheets("統計").Cells(x, 1) = Student(x)
  9. x = x + 1
  10. Next
  11. End Sub
複製代碼

TOP

回復 2# n7822123


    很謝謝你的回覆,但還是不行

TOP

回復 3# n7822123


    這個方法可以,但還有沒有其他的方法可以參考~~~很謝謝你喔^^

TOP

其實你代碼就等如:
Sub zz()
With Sheets("汜?")
    .Range("a2:a" & .Cells(Rows.Count, 1).End(xlUp).Row).Copy Sheets("緙?").[a1]
End With
End Sub

下面我把你的代碼改為:
Sub TEST()
Dim arr   'Student()
With Sheets("學生頁")
    arr = .Range("a2:a" & .Cells(Rows.Count, 1).End(xlUp).Row)
End With
'x = 1
For Each y In arr
x = x + 1
'ReDim Student(x)
'Student(x) = y
Sheets("統計").Cells(x, 1) = y
Next
End Sub

TOP

本帖最後由 n7822123 於 2015-8-22 13:59 編輯

回復 5# EGBT


    如果是我,我會這麼寫
  1. Sub TEST()
  2. R = Sheets("學生頁").Cells(1, 1).CurrentRegion.Rows.Count
  3. For i = 1 To R
  4.   Sheets("統計").Cells(i, 1) = Sheets("學生頁").Cells(i + 1, 1)
  5. Next i
  6. End Sub
複製代碼

TOP

回復 6# ikboy


    很感謝樓上大大的回覆~可是我想請問大大

動態陣列 Redim Student(x)

我最後隨便寫一行

Sheets("統計").Range("A1") = Student(1)

為什麼不會把Sudent(1)這個陣列的座號顯示在A1呢?

TOP

本帖最後由 lpk187 於 2015-8-22 14:18 編輯

回復 5# EGBT

當你作用中的工作表為Sheets("學生頁")時,你是可以寫
Sheets("學生頁").Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
但是如果作用中的工作表不是Sheets("學生頁")時,那這句正確寫法
Sheets("學生頁").Range(Sheets("學生頁").Cells(2, 1), Sheets("學生頁").Cells(Sheets("學生頁").Cells(Rows.Count, 1).End(xlUp).Row, 1))
看出哪裡不同了嗎?
每一個儲存格應該給予完整的地址

TOP

首先你的動態陣列要保留數據,請用 Redim Preserve Student(x)
下面做了一個例子

Sub TEST()
Dim Student()
r = Sheets("學生頁").Cells(Rows.Count, 1).End(xlUp).Row
x = 1
For Each y In Sheets("學生頁").Range("a2:a" & r)
ReDim Preserve Student(x)
Student(x) = y
Sheets("統計").Cells(x, 1) = Student(x)
x = x + 1
Next
MsgBox Student(1)
MsgBox Student(11)
End Sub

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題