27

我正在尝试重构我的 VBA 代码。多年来,我习惯于在基于 Java 的 IDE 中使用重构。VBA 编辑器是否支持任何重构或是否有任何加载项?MZ Tools 没有任何此类功能。

我希望至少能够做到以下几点: 1. 重命名变量 2. 将过程拆分为子过程以使代码更具可读性 3. 将变量的范围从全局更改为过程,反之亦然

4

4 回答 4

37

免责声明:我积极参与这个项目。


Rubberduck是一个用于 VBA/VB6 IDE 的开源插件,正在 [非常] 积极开发中,其中包括此功能。

1.3 版包括重命名重构:

重命名重构

2.0 版(测试版可用,仍在稳定中)包括十几个重构:

Rubberduck 2.0 重构

  • Introduce Parameter将局部变量提升为参数
  • Introduce Field将局部变量提升到模块范围
  • Encapsulate Field将公共字段变成属性
  • Move Closer to Usage将仅在 1 个过程中使用的字段移动到该过程中。或者将局部变量移到其第一次使用的上方。
  • 提取接口允许您选择要提取到接口中的类成员,为它们创建带有存根的新类模块,并使原始类实现提取的接口。
  • 实现接口为未实现接口的所有成员创建存根,因此您无需通过在代码窗格下拉列表中一一选择它们来手动创建它们:

    Implements IClass1
    
    Public Sub IClass1_DoSomething()
        Err.Raise 5 'TODO implement interface member
    End Sub
    
    Public Function IClass1_GetFoo() As Integer
        Err.Raise 5 'TODO implement interface member
    End Function
    
    Sub DoSomething()
    
    End Sub
    
    Function GetFoo() As Integer
    
    End Function
    

项目路线图上有更多重构工具(包括Extract Method),您可以在GitHub 上关注这些工具。

于 2015-05-01T17:11:34.690 回答
3

我在 VBA 中知道的唯一“重构”工具是 Ctrl+F 和 Ctrl+R。

于 2012-10-18T17:06:20.593 回答
2

我使用 V-Tools 进行类似重构的工作,因为它会在对象中查找/替换,而不仅仅是 VBA 代码。 http://www.skrol29.com/us/vtools.php

于 2012-10-25T15:14:51.070 回答
2

是的有....几乎

在过去的美好时光里,我用过这个。 http://www.moshannon.com/speedferret.html

帮了我很多,我想我有一些 3.5 英寸的磁盘;)

诀窍是将您的 excel 代码复制到 Access 或 VB6 并在那里进行重构。替换范围:解决方案是创造性的命名和使用替换。吐痰程序...嗯,这是一个手册,我很抱歉。

除非您有一些严肃的 excel vba 代码,否则通常不值得这样做,我建议您将其中的大部分转换为 c# 或 VB.Net dll,您可以在其中进行重构、测试和一些现代魔法,并且在 VBA 中只做尽可能少的事情。

于 2012-12-17T14:40:28.677 回答