天阿!!為何程式會宣告錯誤???



贊助商連結


foxcat99
2002-04-18, 02:58 PM
Dim m As Single
Dim n As Double
Dim q As Double

Sub 擷取winner和losser()
For i = 2 To 3
m = Sheets("整理").Cells(i, 4)
For j = 1 To m
n = Sheets("整理").Cells(i, 3) + j
q = Sheets("整理").Cells(i + 1, 3) + 1 - j
Sheets("yes").Range("A(n):H(n)") = Sheets("7090").Range("A(n):H(n)")
Sheets("no").Range("A(q):H(q)") = Sheets("7090").Range("A(q):H(q)")

Next j
Next i

請問一下為何第10,11列程式為何會執行錯誤????
我按說明......說是要宣告陣列??......
可是之前寫成sheets("整理").cells(i,4)=sheets("7090").cells(i,4)就沒問題
但是寫成 .cells(q,4) .cells(q,4)就不行
為什麼換成另一個變數就不行????
請前輩指導一下小弟的錯誤........
感激不盡.............

:confused: :confused:

贊助商連結


leonchou
2002-04-20, 12:58 AM
A(n)、H(n) 這種變數後面帶括號的就是 VBA 陣列 的表示法, 而使用陣列之前是必須宣告的. 換句話說, 你的 Range 語法錯了. 你的目的是要把變數代入 Range 作為列號, 正確的方式應該是:
Range("A" & n & ":H" & n)
也就是以字串的方式連接起來. 我們平時不也是用 Range("A3") 這種表示法嗎?
即使第一點修正了, 你的程式還是不能正確運作. 因為要指定一個範圍的值只能以下列方式: <ul type=disc>
<li>複製 >> 貼上 (使用 Range.Copy destination 方法)
<li>指定一個值 (Range = value), 此範圍的所有儲存格都會 = value.
<li>使用迴圈, 逐一指定. Range 通常會用 Cells(r, c) 的表示式, 方便以變數代入欄列號.</ul>
你就是不能直接令範圍 = 另一個範圍; 也許不會出現錯誤, 但也不會如願的.
以你的程式看來, 是依變數決定列號, 在工作表之間 複製 資料. 這樣你應該知道用哪種方式了吧.