用Office VBA實現多控制項一次性組合

2021-09-22 06:58:26 字數 2296 閱讀 1922

最近要做個專案,通過

office vba

來自動生成一系列的控制項(包括文字框、直線等),並將這些控制項組合在一起(這在

office

裡很好實現,只要選中這些控制項,使用上下文選單裡的組合選單項即可)。最開始的**如下:

dim element1, element2

dim i 

asinteger

set element1 = 

nothing

set element2 = 

nothing

for i = 

0to7

30, 

30, 

25, 

25)if

not (element2 

isnothing) 

then

activedocument.shapes.range(array(element1.name, element2.name)).select

selection.shaperange.group.select

set element2 = selection.shaperange

else

set element2 = element1

endifnext i

上面的**生成了8個

textbox

,將其兩個為一組進行組合。這樣做雖然從技術上沒問題。但是如果生成的

textbox

很多的話,如

1000

個,就會很慢。主要把時間消耗在了是用

vba進行組合操作上。因此,只要將組合的方式改為將所有控制項都選中,然後組合一次就可以解決這個問題。在上面的**中,使用了

array

函式生成了

variant

型別的陣列。而使用

array

函式是無法根據實際需要生成實際大小的陣列的。因此,需要使用

dim來定義這個陣列,**如下:

dim elements(

0to7) 

as variant

dim i 

asinteger

for i = 

0to7

addtextbox(msotextorientationhorizontal, i * 

30, 

30, 

25, 

25).name

next i     

activedocument.shapes.range(elements).select           

selection.shaperange.group.select

應使用dim elements(陣列上標 to陣列下標)的形式,不能使用dim elements(陣列下標)的形式。如上面的陣列定義**不能寫成dim elements(7) as variant。

如果在程式執行時改變陣列的大小,可以使用如下的**:

dim elements(

0to7) 

as variant

dim newelements 

as variant

dim i 

asinteger

for i = 

0to7

addtextbox(msotextorientationhorizontal, i * 

30, 

30, 

25, 

25).name

next i     

newelements = elements

redim

preserve newelements(

0to10) 

as variant

for i = 

8to10

addtextbox(msotextorientationhorizontal, i * 

30, 

200, 

25, 

25).name

next i

activedocument.shapes.range(newelements).select           

selection.shaperange.group.select

要注意的是,在使用

redim

時,不能使用已經指定型別的陣列,而需要將這個陣列放到

variant

變數中。如不能使用如下的**來增加陣列長度:

redim

preserve elements(

0to10) 

as variant

銀河使者

用Office VBA實現多控制項一次性組合

最近要做個專案,通過 office vba 來自動生成一系列的控制項 包括文字框 直線等 並將這些控制項組合在一起 這在 office 裡很好實現,只要選中這些控制項,使用上下文選單裡的組合選單項即可 最開始的 如下 dimelement1,element2 dimi asinteger setel...

用c 實現的語法高亮控制項

用c 實現了乙個能夠對vbscript,c j sql顯示語法高亮的文字編輯控制項。這裡詳細介紹一下它的原理。如果需要解析其他語言,請新增相應的xml檔案,並修改列舉型別languages以及parser類的建構函式中的相應 已知bug 當兩個詞是由括號分割的時候,程式無法識別。比如function...

iOS UIProgressView控制項用法

ios中進度條控制項的用法總結。進度條控制項是ios開發中乙個簡單的系統控制項,使用總結如下 初始化乙個進度條 instancetype initwithprogressviewstyle uiprogressviewstyle style 注意 1.用這個方式初始化的進度條系統會預設給乙個長度。2...