Board logo

標題: 這個問題頭大了..想了好久 [打印本頁]

作者: EGBT    時間: 2015-8-22 11:49     標題: 這個問題頭大了..想了好久

我在"統計"這個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
複製代碼

作者: n7822123    時間: 2015-8-22 12:41

本帖最後由 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
複製代碼

作者: n7822123    時間: 2015-8-22 13:16

回復 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
複製代碼

作者: EGBT    時間: 2015-8-22 13:19

回復 2# n7822123


    很謝謝你的回覆,但還是不行
作者: EGBT    時間: 2015-8-22 13:21

回復 3# n7822123


    這個方法可以,但還有沒有其他的方法可以參考~~~很謝謝你喔^^
作者: ikboy    時間: 2015-8-22 13:49

其實你代碼就等如:
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
作者: n7822123    時間: 2015-8-22 13:58

本帖最後由 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
複製代碼

作者: EGBT    時間: 2015-8-22 13:58

回復 6# ikboy


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

動態陣列 Redim Student(x)

我最後隨便寫一行

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

為什麼不會把Sudent(1)這個陣列的座號顯示在A1呢?
作者: lpk187    時間: 2015-8-22 14:17

本帖最後由 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))
看出哪裡不同了嗎?
每一個儲存格應該給予完整的地址
作者: ikboy    時間: 2015-8-22 14:32

首先你的動態陣列要保留數據,請用 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
作者: lpk187    時間: 2015-8-22 14:37

回復 8# EGBT


     動態陣列 Redim Student(x)這樣寫時,當重新一次的Redim時會把原來在陣列的值清空
所以當然沒值給它顯示啊迴圈中的重新定維數又不希望清空值必須寫成
ReDim Preserve Student(x)
作者: lpk187    時間: 2015-8-22 14:45

回復 8# EGBT


    一般使用陣列不應該Sheets("統計").Cells(x, 1) = Student(x)這樣子寫
這樣寫只是浪費了陣列執行速度的優點
最好是迴圈跑完後再貼到儲存格
如下
  1. Sub TEST1()
  2. Dim Student()
  3. x = 0
  4. With Sheets("學生頁")
  5.     For Each y In .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 1))
  6.         ReDim Preserve Student(x)
  7.         Student(x) = y
  8.         x = x + 1
  9.     Next
  10. End With
  11. Sheets("統計").Cells(1, 1).Resize(UBound(Student) + 1) = Application.Transpose(Student)
  12. End Sub
複製代碼

作者: EGBT    時間: 2015-8-22 17:12

回復 10# ikboy


感謝
作者: Scott090    時間: 2015-8-22 20:10

回復 1# EGBT

試試看這個適不適合
  1. Sub test1()
  2.     Dim student
  3.     Sheets("學生頁").Select
  4.     student = Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
  5.     Sheets("統計").Cells(2, 1).Resize(UBound(student)) = student
  6.    
  7. End Sub
複製代碼

作者: EGBT    時間: 2015-8-23 00:21

回復 9# lpk187


    樓上大大完全了解我...完全正解~太感謝你了^.^




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)