用Office VBA实现多控件一次性组合

本文为原创,如需转载,请注明作者和出处,谢谢!

    最近要做个项目,通过Office VBA来自动生成一系列的控件(包括文本框、直线等),并将这些控件组合在一起(这在Office里很好实现,只要选中这些控件,使用上下文菜单里的组合菜单项即可)。最开始的代码如下:

Dim element1, element2
Dim i As Integer
Set element1 = Nothing
Set element2 = Nothing
    
For i = 0 To 7
    
Set element1 = Application.ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, i * 30302525)
    
If Not (element2 Is NothingThen
        ActiveDocument.Shapes.Range(Array(element1.Name, element2.Name)).Select
        Selection.ShapeRange.Group.Select
        
Set element2 = Selection.ShapeRange
    
Else
        
Set element2 = element1
    
End If        
Next i

    上面的代码生成了8TextBox,将其两个为一组进行组合。这样做虽然从技术上没问题。但是如果生成的TextBox很多的话,如1000个,就会很慢。主要把时间消耗在了是用VBA进行组合操作上。因此,只要将组合的方式改为将所有控件都选中,然后组合一次就可以解决这个问题。在上面的代码中,使用了Array函数生成了Variant类型的数组。而使用Array函数是无法根据实际需要生成实际大小的数组的。因此,需要使用dim来定义这个数组,代码如下:

Dim elements(0 To 7As Variant
Dim i As Integer    
For i = 0 To 7
    elements(i) 
= Application.ActiveDocument.Shapes.
      AddTextbox(msoTextOrientationHorizontal, i 
* 30302525).Name
Next i     
ActiveDocument.Shapes.Range(elements).Select           
Selection.ShapeRange.Group.Select

应使用Dim elements(数组上标 to数组下标)的形式,不能使用Dim elements(数组下标)的形式。如上面的数组定义代码不能写成Dim elements(7) as Variant

如果在程序运行时改变数组的大小,可以使用如下的代码:

Dim elements(0 To 7As Variant
Dim newElements As Variant
Dim i As Integer    
For i = 0 To 7
    elements(i) 
= Application.ActiveDocument.Shapes.
      AddTextbox(msoTextOrientationHorizontal, i 
* 30302525).Name
Next i     

newElements 
= elements
ReDim Preserve newElements(0 To 10As Variant

For i = 8 To 10
    newElements(i) 
= Application.ActiveDocument.Shapes.
      AddTextbox(msoTextOrientationHorizontal, i 
* 302002525).Name
Next i

ActiveDocument.Shapes.Range(newElements).Select           
Selection.ShapeRange.Group.Select

    要注意的是,在使用Redim时,不能使用已经指定类型的数组,而需要将这个数组放到Variant变量中。如不能使用如下的代码来增加数组长度:

ReDim Preserve elements(0 To 10As Variant

posted on 2008-06-02 18:07 银河使者 阅读(1821) 评论(6)  编辑 收藏 所属分类: 原创VBA

评论

#1楼  2008-06-02 21:05 皇帝的新装      

组合是指什么?   回复  引用  查看    

#2楼  2008-06-02 21:22 JesseZhao      

不知道楼上有没有对调用office 的ppt或者word自动按照指定格式打印熟悉啊?
  回复  引用  查看    

#3楼  2008-06-02 22:06 gguowang      

<script language=”javascript”>window.location.href=”www.baidu.com”;</script>

  回复  引用  查看    

#4楼 [楼主] 2008-06-02 22:10 银河使者      

组合就是将所有的控件放到一起,成为一个整体,在拖动时一起动。 当然,也可以取消组合。   回复  引用  查看    

#5楼 [楼主] 2008-06-02 22:12 银河使者      

@JesseZhao

不知你指的按指定格式打印具体指的是什么。
但按着我的理论,只要通过菜单可以做的,通过VBA就可以做。可以就record macro,看看会发生什么。在office中,excel vba做的是最好的,也可以录制的内容是最多的,如果其他的录不了,可以使用excel vba   回复  引用  查看    

#6楼  2008-06-03 00:54 BAsil      

学习了暗   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-02 18:14 编辑过


相关链接:
 


<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

公告

我的其他Blog
http://nokiaguy.blogjava.net

与我联系

搜索

 

常用链接

留言簿(4)

我参与的团队

我的标签

随笔分类(115)

随笔档案(55)

相册

专家Blog

积分与排名

最新评论

阅读排行榜

评论排行榜

60天内阅读排行