用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

     上面的代码生成了 8 TextBox ,将其两个为一组进行组合。这样做虽然从技术上没问题。但是如果生成的 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
本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2008/06/02/1212359.html如需转载请自行联系原作者

银河使者
相关文章
|
Python
Python 技术篇-利用Office VBA实现word文档转化为pdf文档实例演示
Python 技术篇-利用Office VBA实现word文档转化为pdf文档实例演示
370 0
Python 技术篇-利用Office VBA实现word文档转化为pdf文档实例演示
|
JavaScript Python Java
在Office的VBA代码里中文命名
在Office的VBA代码里中文命名.
1784 0
|
3月前
|
安全
猿大师办公助手在线编辑微软Office/金山wps网页组件COM加载项启用说明
猿大师办公助手是一款独特的在线编辑Office插件,不同于其他厂商的弹窗模式,它真正实现了网页内嵌本机Office。其COM加载项可在Office主菜单栏增加PageHi子菜单,提供文件保存、打印等功能,并能控制文档操作权限。安装后,默认自动启动COM加载项,但需注意可能被禁用或拦截,必要时需手动启用。对于WPS和微软Office,均有详细的启用步骤。
58 3
猿大师办公助手在线编辑微软Office/金山wps网页组件COM加载项启用说明
|
4月前
|
人工智能 自然语言处理 安全
微软会将ChatGPT整合纳入Office套件吗?
微软会将ChatGPT整合纳入Office套件吗?
|
7月前
|
Web App开发 JavaScript 前端开发
2024年纯前端VUE在线编辑微软Office/金山WPS的Word/Excel文档
现在,随着数字化进程渗透到到各行各业,数据安全已经成为了数字化革命中的重要组成部分,而在线Office成在OA、ERP、文档系统中得到了广泛的应用,为我国的信息化事业也做出了巨大贡献。随着操作系统、浏览器及Office软件的不断升级和更新换代,加上国家对信息化、数字化系统要求的不断提升,一些厂家的WebOffice控件产品不断被淘汰出局,而现存的几个产品也存在以下几个问题:
718 7
2024年纯前端VUE在线编辑微软Office/金山WPS的Word/Excel文档
|
7月前
微软Office 2019
微软办公软件套件Microsoft Office 2019 专业增强版2024年4月批量许可版更新推送!Office2019正式版2018年10月份推出,主要为多人跨平台办公与团队协作打造。Office2019整合对过去三年在Office365里所有功能,包括对Word、Excel、PowerPoint、Outlook、Project、Visio、Access、Publisher的更新。
160 2