[算表] VBA命令位置不同造成的結果不同
軟體:Excel
版本:2013
各位版上的大大早安。我有一個觀念性的問題想不通。
我剛寫好一個Module,為了讓Code好讀,我進行了順序的編排。
但是,重新編排後的執行結果卻與想像中的不同。
想請大大指導一下,我的觀念哪裡出了問題。感恩。
這是一個游走在兩個檔案間的複製與貼上動作模組
我把"找該工作頁最後一筆資料"這一段程式碼放入"寫入檔案"下的With fileA後面。
該Module是存在於B檔案
我嘗試著把每一段是在A檔案還是B檔案工作的關係標示出來。
但是還是不知道為什麼移了位置後,執行結果跟預期的不同。
以這段Code的結果應該是從最後一筆(row)往下寫。
但是一旦移了,他就一直寫第18 row.
我有嘗試用監看式去看index_row確實是17。
但我就不明白,為什麼index_row會是17,而且一直在17。
移位置之前的執行結果是正確的。
因為找最後一筆資料是在A檔案中尋找。
而以我的設定方式With fileA之後的操作不是應該在A檔案中了嗎?
以下是該Module的Code。
'=======================找尋絕對路徑與讀檔============ B檔案
dpath = ThisWorkbook.Path
MsgBox ThisWorkbook.Path
Fname = Range("B1").Value
Workbooks.Open Filename:=dpath & "\" & Fname & ".xlsx"
Set fileA = Workbooks(Fname & ".xlsx")
'=====================================================
'=======================找該工作頁最後一筆資料======== A檔案
Application.Goto reference:=ActiveSheet.Range("A1")
ActiveSheet.Range("A1").End(xlDown).Select
index_row = Selection.Row
index_column = Selection.Column
'=====================================================
'=======================複製資料====================== B檔案
ThisWorkbook.Activate
Head(1) = Range("B2").Value
Head(2) = Range("B1").Value
Head(3) = Range("B3").Value
Head(4) = Range("H2").Value
Head(5) = Range("H1").Value
Head(6) = Range("L1").Value
For m = 0 To 12
For n = 0 To 11
DataArray(m, n) = Cells(5 + m, 2 + n).Value
Next n
Next m
'dim DataArray as variant
'DataArray = activesheet.range("B5:M17")
'=====================================================
'=======================寫入檔案====================== A檔案
With fileA
array_counter = index_row + 1
For i = 1 To 6
.ActiveSheet.Cells(array_counter, i) = Head(i)
Next i
For m = 0 To 12
For n = 0 To 11
.ActiveSheet.Cells(array_counter, i) = DataArray(m, n)
i = i + 1
Next n
Next m
Application.DisplayAlerts = False '關閉提醒
.Close True '關閉檔案
End With
'=====================================================
End Sub
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.98.141
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1536463487.A.3D7.html
→
09/09 11:34,
7年前
, 1F
09/09 11:34, 1F
→
09/09 11:35,
7年前
, 2F
09/09 11:35, 2F
→
09/09 11:36,
7年前
, 3F
09/09 11:36, 3F
→
09/09 11:37,
7年前
, 4F
09/09 11:37, 4F
→
09/09 11:38,
7年前
, 5F
09/09 11:38, 5F
感謝soyoso大大的回應,arraycounter的用處其實是在找下一個資料的其始點
下圖是B檔案的資料內容
https://imgur.com/b6GL4qP

其中灰色所選取的部分就是巢狀迴圈所讀取的資料,是一個2維陣列
下圖是A檔案的資料內容
https://imgur.com/8iyeWnO

arraycounter用於找最後一筆資料的所在位置+1後變成資料寫入的起始點,而資料從2維
陣列變成1維陣列。所以理當,arraycounter不需要參與迴圈疊加才是。
我核心的問題是為什麼找最後一列的Code放在原來的位置跟With A會有不一樣的結果。
不管檔案A的資料量有多少,不管中間是否有空白他都會從第18行開始寫。
https://imgur.com/4ph5m4q

感謝您一直耐心地回應問題。
※ 編輯: yimean (123.195.98.141), 09/09/2018 12:03:19
→
09/09 12:04,
7年前
, 6F
09/09 12:04, 6F
→
09/09 12:43,
7年前
, 7F
09/09 12:43, 7F
→
09/09 12:58,
7年前
, 8F
09/09 12:58, 8F
→
09/09 12:58,
7年前
, 9F
09/09 12:58, 9F
→
09/09 12:59,
7年前
, 10F
09/09 12:59, 10F
→
09/09 14:33,
7年前
, 11F
09/09 14:33, 11F
→
09/09 14:33,
7年前
, 12F
09/09 14:33, 12F

→
09/09 14:33,
7年前
, 13F
09/09 14:33, 13F
※ 編輯: yimean (123.195.98.141), 09/09/2018 14:36:13
→
09/09 14:36,
7年前
, 14F
09/09 14:36, 14F
→
09/09 14:36,
7年前
, 15F
09/09 14:36, 15F
※ 編輯: yimean (123.195.98.141), 09/09/2018 14:44:28
→
09/09 14:44,
7年前
, 16F
09/09 14:44, 16F
→
09/09 14:46,
7年前
, 17F
09/09 14:46, 17F
→
09/09 14:46,
7年前
, 18F
09/09 14:46, 18F

→
09/09 14:47,
7年前
, 19F
09/09 14:47, 19F
→
09/09 14:47,
7年前
, 20F
09/09 14:47, 20F

→
09/09 14:48,
7年前
, 21F
09/09 14:48, 21F
→
09/09 14:48,
7年前
, 22F
09/09 14:48, 22F
→
09/09 14:48,
7年前
, 23F
09/09 14:48, 23F
→
09/09 14:49,
7年前
, 24F
09/09 14:49, 24F
→
09/09 14:50,
7年前
, 25F
09/09 14:50, 25F

→
09/09 14:50,
7年前
, 26F
09/09 14:50, 26F
→
09/09 14:50,
7年前
, 27F
09/09 14:50, 27F
→
09/09 14:51,
7年前
, 28F
09/09 14:51, 28F
→
09/09 14:51,
7年前
, 29F
09/09 14:51, 29F
→
09/09 14:52,
7年前
, 30F
09/09 14:52, 30F
→
09/09 14:52,
7年前
, 31F
09/09 14:52, 31F
→
09/09 14:52,
7年前
, 32F
09/09 14:52, 32F
→
09/09 14:54,
7年前
, 33F
09/09 14:54, 33F
→
09/09 14:56,
7年前
, 34F
09/09 14:56, 34F
→
09/09 14:56,
7年前
, 35F
09/09 14:56, 35F
→
09/09 14:57,
7年前
, 36F
09/09 14:57, 36F
→
09/09 14:58,
7年前
, 37F
09/09 14:58, 37F
→
09/09 14:58,
7年前
, 38F
09/09 14:58, 38F
→
09/09 14:58,
7年前
, 39F
09/09 14:58, 39F
→
09/09 14:59,
7年前
, 40F
09/09 14:59, 40F
→
09/09 14:59,
7年前
, 41F
09/09 14:59, 41F
→
09/09 15:00,
7年前
, 42F
09/09 15:00, 42F
→
09/09 15:04,
7年前
, 43F
09/09 15:04, 43F
Office 近期熱門文章
PTT數位生活區 即時熱門文章