返回列表 上一主題 發帖

除錯

本帖最後由 n7822123 於 2018-11-1 00:36 編輯

回復 1# 藍天麗池

因為電腦找不到你要的儲存格!
.Offset(1).Cells(1, -1)=原來儲存格向下一格,向左2格

舉例
[C2].Offset(1).Cells(1, -1).Select  '=A3

但是當原來儲存格式第2欄時,要讓程式找左邊2欄的儲存格,電腦會找不到,就會跳出錯誤!
舉例如下,找不到B欄再往左2欄的欄位,所以發生錯誤
[B2].Offset(1).Cells(1, -1).Select '=?3

因為你的資料從第2欄就有開始有值,所以".Offset(1).Cells(1, -1)"就會產生錯誤

還有邏輯運算是從後面往前算
舉例來說
MsgBox True Or False And False  '=MsgBox True Or (False And False)=True
而不是
MsgBox (True Or False) And False '=False

若不想搞清楚哪個先運算的話,最好加上括弧,比較不會出錯
修改如下:
If (.Row = 2 Or .Row > 2) And .Value <> Rng.Value Then

.Row = 2 Or .Row > 2 可簡化為  .Row>=2

你的程式很多地方可以簡化
.Offset(1).Cells(1, -1).Resize(, 1) = Rng.Cells(, -1).Resize(, 1).Value
上一行等效於下一行(只有一個儲存格,不需要Resize)
.offset(1,-2)=Rng(,-1).value
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 3# n7822123

For cts = 2 To 101
Set Rng = Cells(2, cts)
...
...

補充,你的cts從2開始
所以 "Rng(, -1).Value",要找到往左兩欄的值,也是不可能的
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 n7822123 於 2018-11-5 02:56 編輯

回復 9# faye59



咳咳......其實我也有地方沒講清楚,
為了避免誤導別人,我還是自我糾正一下,
邏輯運算是從後面往前算
這句話只有For該運算式
實際上是 "And" 會比 "Or" 先算
所以該式會變成後面的先算
如果想要Or先算,需要加上括弧
看了下圖就明瞭了

程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題