VBA類模組 建立Table類(1)

2022-08-09 13:51:19 字數 2218 閱讀 5549

vba開發接觸了兩個月,自認為拜託了新手期,遇到很多問題,也有一些心得。根據開發中遇到的問題開始陸續總結。 

開發過程中,遇到程式執行過程中的儲存大量臨時資料問題,這些資料只是用於下一步的計算,不需要呈現在最後的結果中。為了後面步驟使用和管理方便,建立了table類模組。

類模組:ctable

1

option

explicit23

'***********************************=4'

名稱: ctable5'

功能: 描述乙個excel**區域6'

***********************************=78

public strname as

string'表名

9public straddress as

string'位址

10public rngstart as range '

開始單元格

11public rngend as range '

結束單元格

12public icolumns as

string

'列數

類模組名:ctable,下面這些public就是類的屬性了,這個類看起來跟自定義型別沒什麼區別,沒錯,這已經是乙個類模組了。

普通模組:data

option

explicit

'*************************===

'名稱: createtable

'功能: 建立表

'引數: strtablename: 表名

'astrcolumnnames:列名陣列

'返回: 表

'*************************===

function createtable(byref strtablename as

string, astrcolumnnames as variant) as

ctable

dim clsstutab as

new ctable '

宣告並建立乙個物件

clsstutab.straddress = "

sheet2!$a$1

"set clsstutab.rngstart =range(clsstutab.straddress)

clsstutab.strname =strtablename

dimi, j

with

clsstutab.rngstart

.offset(

0, 0).value =clsstutab.strname

j = 0

for i = lbound(astrcolumnnames) to

ubound

(astrcolumnnames)

.offset(

1, j).value =astrcolumnnames(i)

j = j + 1

next

clsstutab.icolumns =j

set clsstutab.rngend = .offset(1, j - 1

)

endwith

clsstutab.rngstart.offset(

0, 1).value =clsstutab.rngend.address

set createtable =clsstutab

end function

sub建立學生表()

dim clsstudenttable as ctable '

宣告乙個物件

dim astrcolumnnames as

variant

astrcolumnnames = array("

id", "

name

", "

gender

", "

stuid

", "

class")

set clsstudenttable = createtable("

學生表"

, astrcolumnnames)

end sub

執行結果:

VBA類模組初步

property let address s as string paddress s end property property let salary d as double psalary d end property property let語句用於給屬性賦值,即將值引入類。在上例中,簡單地將...

VBA標準模組與類模組

大家通過之前的介紹,已知道怎麼將乙個空模組插入vba的工程中。從插入模組中可以看到,模組有有兩種 標準模組與類模組。類模組是含有類定義的特殊模組,包括其屬性和方法的定義。在後面會有介紹與說明。隨著工程越來越委員複雜,我們就有可能會有多個模組。使用多模組的好處就是,它允許將相關的過程聚合在一起,使 的...

VBA 觸 類 旁通 類模組

公有與私有 private sub test privete私有的,這有在這個模組下可以被呼叫,相反為 public公有的 msgbox aaa end sub sub test1 call test end sub 還有乙個小知識點 dim i as integer 將i 定義在外面,那麼所有的過...