用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  *   30 30 25 25 )
    
If   Not  (element2  Is   Nothing Then
        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   7 As  Variant
Dim  i  As   Integer     
For  i  =   0   To   7
    elements(i) 
=  Application.ActiveDocument.Shapes.
      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( 0   To   7 As  Variant
Dim  newElements  As  Variant
Dim  i  As   Integer     
For  i  =   0   To   7
    elements(i) 
=  Application.ActiveDocument.Shapes.
      AddTextbox(msoTextOrientationHorizontal, i 
*   30 30 25 25 ).Name
Next  i     

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

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

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

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

ReDim   Preserve  elements( 0   To   10 As  Variant

 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/216658,如需转载请自行联系原作者






相关文章
|
Python
Python 技术篇-利用Office VBA实现word文档转化为pdf文档实例演示
Python 技术篇-利用Office VBA实现word文档转化为pdf文档实例演示
390 0
Python 技术篇-利用Office VBA实现word文档转化为pdf文档实例演示
|
JavaScript Python Java
在Office的VBA代码里中文命名
在Office的VBA代码里中文命名.
1807 0
|
6月前
|
安全
猿大师办公助手在线编辑微软Office/金山wps网页组件COM加载项启用说明
猿大师办公助手是一款独特的在线编辑Office插件,不同于其他厂商的弹窗模式,它真正实现了网页内嵌本机Office。其COM加载项可在Office主菜单栏增加PageHi子菜单,提供文件保存、打印等功能,并能控制文档操作权限。安装后,默认自动启动COM加载项,但需注意可能被禁用或拦截,必要时需手动启用。对于WPS和微软Office,均有详细的启用步骤。
109 3
猿大师办公助手在线编辑微软Office/金山wps网页组件COM加载项启用说明
|
7月前
|
人工智能 自然语言处理 安全
微软会将ChatGPT整合纳入Office套件吗?
微软会将ChatGPT整合纳入Office套件吗?
58 0
|
10月前
|
Web App开发 JavaScript 前端开发
2024年纯前端VUE在线编辑微软Office/金山WPS的Word/Excel文档
现在,随着数字化进程渗透到到各行各业,数据安全已经成为了数字化革命中的重要组成部分,而在线Office成在OA、ERP、文档系统中得到了广泛的应用,为我国的信息化事业也做出了巨大贡献。随着操作系统、浏览器及Office软件的不断升级和更新换代,加上国家对信息化、数字化系统要求的不断提升,一些厂家的WebOffice控件产品不断被淘汰出局,而现存的几个产品也存在以下几个问题:
847 15
2024年纯前端VUE在线编辑微软Office/金山WPS的Word/Excel文档
|
10月前
|
Web App开发 安全 前端开发
新一代WebOffice高版本谷歌Chrome打开、编辑、保存微软Office/金山WPS解决方案大盘点
随着互联网技术的不断发展,越来越多的企业开始采用在线办公模式,微软Office Word 是最好用的文档编辑工具,然而doc、docx、xls、xlsx、ppt、pptx等格式的Office文档是无法直接在浏览器中直接打开的,如果可以实现Web在线预览编辑OffIce,肯定会还带来了更高效、便捷的办公体验,为我们的工作带来了更多可能性。
948 16

热门文章

最新文章