2012 年 2 月 5 日的归档

Get data from worksheet

從worksheet中cell取數,常見辦法如

with sheet1
    name = .cells(i,1)
    company = .cells(i,2)
end with

此方法直接,但是欠缺機動性,假如日後worksheet有任何改動,令到name不是出現在col 1,全部代碼都需要改.

方法1

將各col在代碼頂部定義為常數, 日後需要修改就在頂部定義中修改.修改地方集中到一處,但是還是麻煩

const nameCol = 1 , companyCol = 2
with sheet1
    name = .cells(i,nameCol)
    company = .cells(i,companyCol)
end with

Private Enum AllCols
  nameCol = 1
  companyCol
End Enum

with sheet1
    name = .cells(i,AllCols.nameCol)
    company = .cells(i,AllCols.companyCol)
end with

方法2

充分利用Table (Excel 2007 or higher).

先在worksheet中定義Table,再在VBA中通過ListObjects訪問

Const nameCol = "name", companyCOl = "company"

set tbl = Sheet1.ListObjects("tableName")
with sheet1
  For each row in tbl.ListRows
    name = row.range(, col(nameCol))
    company = row.range(, col(companyCol))
    'do something
  next row
end with

方法3

利用ADO, 對於Excel2003, 連本workbook的時候慎防內存洩露

本文受該文啓發, 特此鳴謝

article clipper remember Get data from worksheet