将代码从 VBA 转换到 Visual Basic .NET

本文探讨了如何将现有的VBA代码转换为更现代的Visual Basic .NET,涉及Excel和Office应用程序的接口,详细介绍了转换过程中的关键步骤和注意事项。
摘要由CSDN通过智能技术生成
 
 

将代码从 VBA 转换到 Visual Basic .NET

2003 年 6 月

适用于:
    Microsoft® "Visual Studio Tools for Office" Beta
    Microsoft Office Word 2003 Beta 2
    Microsoft Office Excel 2003 Beta 2
    Microsoft Visual Basic® for Applications (VBA)
    Microsoft Visual Studio® .NET 2003
    Microsoft Visual Basic .NET

摘要:介绍将 Microsoft Office 解决方案从 Visual Basic for Applications (VBA) 转换到 Visual Basic .NET 中时需要考虑的问题。概述了两者之间的差异,并使用来自 Word 和 Excel 的示例来说明如何使用“Visual Studio Tools for Office”转换代码。(本文包含一些指向英文站点的链接。)

目录

简介
是否应该将 VBA 代码转换到 Visual Basic .NET
VBA 与 Visual Basic .NET 之间的差异
   语言差异
   项目管理差异
   安全性差异
   部署差异
转换 VBA 代码
   Word 中的 VBA 代码示例
   Excel 中的 VBA 代码示例
小结
附录
相关文章

简介

本文介绍将 Microsoft® Visual Basic® for Applications (VBA) 代码转换到 Microsoft Visual Basic .NET 时开始可能会遇到的问题。并帮助您学习当从 VBA 代码(非托管代码)迁移到由 Microsoft .NET Framework 管理的代码(托管代码)时,需要进行哪些更改。首先讨论是否将代码转换到 Visual Basic .NET 的依据。然后介绍转换代码时会出现的多种变化,包括集成开发环境 (IDE) 中的差异、语言差异、用户窗体差异、安全性差异和部署差异。最后向您展示如何使用 Microsoft 的“Visual Studio Tools for Office”将现有 Word 和 Excel 代码模块中的 VBA 代码转换到 Visual Basic .NET。

是否应该将 VBA 代码转换到 Visual Basic .NET

在开始将 VBA 代码转换到 Visual Basic .NET 之前,您可能希望了解两者的优缺点。使用“Visual Studio Tools for Office”,您可以在 Microsoft Office Word 2003 文档和 Microsoft Office Excel 2003 工作簿背后编写托管代码。能够使用自定义属性链接到托管代码程序集的文档或工作簿被称为具有“托管代码扩展”功能。使用托管代码扩展,您可以利用 Microsoft Visual Studio® .NET 和 Microsoft .NET Framework 中的资源,包括安全性、部署、完全支持 XML Web Service、结构化异常处理和 Microsoft Windows® 窗体。但是,也可能存在因没有转换 VBA 代码而受益的情况。

当考虑是否将 VBA 代码转换到 Visual Basic .NET 时,请考虑以下信息:

使用 VBA...

  • 当代码需要与文档紧密绑定时;例如,代码需要与文档一起移动时。
  • 当组织中存在部署限制时,例如,.NET Framework 对最终用户不可用时。
  • 当需要使用 Excel 自定义函数时。
  • 当需要创建截取 Word 自有命令的方法时。
  • 当自定义除 Microsoft Office Word 2003 和 Microsoft Office Excel 2003 以外的 Microsoft Office 应用程序时。“Visual Studio Tools for Office”不支持这些应用程序。

使用 Visual Basic .NET...

  • 当需要利用 Visual Studio .NET 环境(包括服务器资源管理器和增强的智能感知功能)时。
  • 当您的解决方案可以从 .NET Framework 的全部资源中受益时,例如,内置 Web 服务支持、更容易进行 XML 分析和可以访问 .NET Framework 中的所有类。
  • 当需要更简单的代码维护时。程序集中的代码与文档分离,多个文档能够引用同一个程序集。
  • 当需要灵活的部署选项时。程序集可以部署为网络共享;此后,当用户每次打开连接到网络的 Excel 或 Word 文档时,可以立即使用程序集中更新后的代码。
  • 当要实现更灵活的安全模式时。

VBA 与 Visual Basic .NET 之间的差异

了解 VBA 与 Visual Basic .NET 之间的差异有助于您在转换代码时作出更明智的决定。本节介绍以下方面的差异:

  • 语言
  • 项目管理
  • 安全性
  • 部署

语言差异

由于 Visual Basic .NET 是为利用 .NET Framework 而设计的,它包含非常多的改动,在许多地方已经不再与以前的语言版本兼容。以下列出了 Visual Basic .NET 中 Visual Basic 语言的部分修改。有关详细信息,请参阅 Introduction to Visual Basic .NET for Visual Basic Veterans

  • 后期绑定:VBA 和 Visual Basic .NET 都支持后期绑定;但是,使用早期绑定对象可以使代码更易于阅读和维护,同时还可以启用智能感知。Visual Basic .NET 引入 Option Strict On 语句,该语句强制进行早期绑定并禁止进行可能导致数据丢失的隐式转换。编译器默认情况下使用 Option Strict Off。这非常重要的一个原因是 Office 对象的许多方法和属性的返回类型为 Object,您必须显式地将对象转换为正确的类型,如下例所示:
    ' 使用 Ctype 将 Sheet1 返回的对象转换成工作表。
    MsgBox(CType(ThisWorkbook.Worksheets("Sheet1"), Excel.Worksheet).Name)
    
  • 声明变量:在 VBA 中,可以使用 Option Explicit 语句来强制进行显式变量声明。也可以通过选中 VBA IDE 选项中的 Require Variable Declaration(需要变量声明)复选框来自动设定这项功能,该复选框默认情况下为未选中状态。所有隐式声明的变量都是 Variant 类型。

    Visual Basic .NET 编译器强制进行显式声明,要求声明每个变量。可以使用语句 Option Explicit Off 取消使用这项功能。所有隐式声明的变量都是 Object 类型。当将代码从 VBA 复制并粘贴到 Visual Basic .NET 中时,应该考虑这一点,因为 Variant 数据类型不再被支持,而且会被自动转换成 Object 数据类型。应该显式指定项目中所有已声明变量的类型。

  • 默认属性:在 Visual Basic .NET 中,仅支持具有参数的默认属性。而在 VBA 中,通过消除默认属性,键入代码时可以使用快捷方式。例如:
    ActiveDocument.Tables(1).Cell(1, 1).Range = "Name"
    

    当将此代码转换到 Visual Basic .NET 时,必须指定 Range 对象的默认属性,即 Text

    ThisApplication.ActiveDocument.Tables(1).Cell(1, 1).Range.Text = "Name"
    

    请注意,不需要指出 Tables 对象的默认属性 Item,因为该对象具有索引参数。然而,如果包含所有默认属性,代码将更易于阅读:

    ThisApplication.ActiveDocment.Tables.Item(1).Cell(1, 1).Range.Text _
        = "Name"
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值