首頁 > 科技

Excel 如何獲取工作表最大行和列,兩個屬性基本解決,還不會吧

2021-06-12 11:50:12

No.1

由於版本不同,Excel可處理的最大行和列都有一定的限制要求,如何來獲取這些值來對編輯的程式進行容錯處理,就顯得十分重要。

本節主要介紹兩個屬性,可返回工作表的行和列。

上圖是兩個屬性:Application.Columns 和 Application.Rows

如果熟悉VBA,對此也不會陌生,Application.Columns 返回一 個 Range 物件,該物件代表活動工作表上的所有列;Application.Rows返回一 個 Range 物件,該物件代表活動工作表上的所有行。

語法:

Application.Columns

Application.Rows

在不使用物件識別符的情況下使用此屬性等效於使用 ActiveSheet.Rows,也就是當前工作表的行數。

上圖是示例,返回當前工作表行數,然後定義一個數組,儲存到陣列中。

注意:這個陣列大小是有一定要求的,並不是說把所有行都會儲存在陣列中,由於記憶體硬體的限制會出現記憶體會溢位錯誤。

如何對這個錯誤進行規避呢?可以使用一些錯誤提示機制來進行。

本例中用到另一個物件Err,可以在出現記憶體溢位的時候提前結束定義陣列,也就實現了溢位前停止陣列定義,那麼多出的資料就不能進行陣列處理了。

其實,從這一方來講,VBA並不能完美地解決任何問題,特別是當資料量達到一個量級的時候就無法進行了。

這就和計算機的硬體有關了,並不是軟體存在問題,如果硬體達到無限可能,軟體實際上是沒有邊際的。

這也就是說Excel是一個相對輕量組的資料管理軟體,對於更大資料處理就無能為力了。

那樣的情況下可以轉移到資料庫當中進行處理,是真的好。

No.2

程式碼

Private Sub CommandButton1_Click()Dim rArr, ri As Long, R As Range, R1 As Range, R2 As Range, R3 As Range, Rs As RangeSet Rs = Application.Rows'返回行單元格Set R1 = ActiveSheet.Range("A1")Set R2 = ActiveSheet.Range("A2")Set R3 = ActiveSheet.Range("A3")ReDim rArr(0)For Each R In RsOn Error GoTo Ne100'如果出現錯誤 程式跳轉到Ne100:ReDim Preserve rArr(ri)'重定義陣列rArr(ri) = R.Value'陣列賦值R1.Value = riri = ri + 1Next RNe100:R2.Value = "當前陣列有: " & UBound(rArr) & "個元素"R3.Value = "當前工作表有: " & Rs.Count & "個單元格行"MsgBox Err.Description & VBA.vbCrLf & Err.Number'輸出錯誤提示Err.ClearErase rArr'釋放陣列Set Rs = NothingSet R = NothingThisWorkbook.SaveEnd Sub

如果沒有研究,不建議偵錯上述程式碼,特別是在重要檔案當中,雖然做了一些避免記憶體溢位處理方法,但是在多次偵錯過程當中,同樣會出現記憶體溢位,導致Excel應用重啟。

歡迎關注、收藏

---END---


IT145.com E-mail:sddin#qq.com