
2020年09月20日,我為了專案的測試計畫能更自動的撰寫,研究了EXCEL巨集(VBA語法),雖然網路上資源很多,有很多很厲害的語法,但是對於初學者來說,如何思考要使用什麼樣的資源,並寫下自己改良的code,這思考的流程,我想要把它紀錄下來,這一系列的文章,總共會分為以下主題,如你有興趣可以直接連接到那一篇去看。
- 第一篇:EXCEL巨集(VBA語法)合併儲存格也能自動設定行高(列高)
- 第二篇:EXCEL巨集(VBA語法)用迴圈批量新增分頁並重新命名
- 第三篇:EXCEL巨集(VBA語法)用迴圈將特定分頁資料複製到不同分頁
- 第四篇:EXCEL巨集(VBA語法)使用迴圈遇到超出陣列索引怎麼辦?
第四個部分,使用迴圈遇到超出陣列索引怎麼辦?
我期待的是,超出陣列索引時,直接忽略此錯誤,繼續進行下個變數。
我在google搜尋了「陣列索引超出範圍」,無法解決問題,後來又搜尋了「vba 迴圈超出索引 執行下個」,也無法解決問題,不過倒是有看到一個對迴圈詳細介紹的相關資源。
Excel VBA 程式設計教學:迴圈控制,For Loop、For Each 與 Do Loop
看完之後,知道沒有一個迴圈可以做到忽略錯誤變數,所以我後來轉向用if else,在for迴圈裡面放入if 某條件=false,不處理,else 我要處理的項目。
這過程當中我也曾經犯下一些錯誤,像是不處理那一塊曾寫成 變數 = 變數 +1,這樣的寫法如果只有一個變數不見還好,但若是連續兩個變數都不見時,仍會出錯,所以並不能這樣寫。
因為我要處理的問題是,變數導向許多分頁,但有可能會有某分頁被刪除了,所以我後來改成搜尋「vba判斷分頁是否存在」,並搜尋到以下資源,請參考以下網址版本二的寫法。
在code裡面,我在原本的基礎上面,增加了一些註解,給大家參考可以怎麼修改這組code。
看完這組code的註解,你可以學習到以下資訊。
1.迴圈語法遇到超出陣列索引怎麼處理?
2.判斷分頁是否存在,新增function搜尋特定工作表,如無此工作表回傳false
3.如果有sub、if、with等,別忘了使用完之後要有End sub、End if、End with,不然都會跳出錯誤,我遇到錯誤是有Next卻沒有for。
4.簡單清空某欄的語法
Function checkSheetName(sheetname)
'檢查活頁簿是否存在的以下語法
isfind = False
For Each st In Sheets
If st.Name = sheetname Then
isfind = True
Exit For
End If
Next
checkSheetName = isfind
End Function
Sub 回傳案例()
Set A = Sheets("工作表1")
With A.Activate
'指定分頁
Crow = Range("A" & Cells.Rows.Count).End(xlUp).Row
For j = 9 To Crow - 1
' -1是因為我只要迴圈到倒數第二行(列)
sheetname = ("T" & A.Cells(j, 1))
'sheetname是底下function要執行的內容,分頁名稱請參考第二篇。
If checkSheetName(sheetname) = False Then
'不處理,所以什麼都沒key
Else
A.Range("F" & j) = Worksheets("T" & A.Cells(j, 1)).Range("D1")
'將右邊的值回傳到左邊,語法最前面的A是工作表1的代稱。
Worksheets("T" & A.Cells(j, 1)).Range("D1") = ""
'簡單清空D1的方法
End If
'End if勿漏掉
Next j
End With
'End with勿漏掉
End Sub
喜歡這篇文章,可以免費加入liker.land會員,並在底下為我拍手5下表達支持,會轉為實質收益,以利我支付網站營運費用,也歡迎留言告訴我你的看法,真心感謝你看完這篇文章。
EXCEL巨集(VBA語法)使用迴圈遇到超出陣列索引怎麼辦? 有 “ 6 則迴響 ”