27

VBA コードをリファクタリングしようとしています。私は何年もの間、Java ベースの IDE でリファクタリングを使用することに慣れています。VBA エディタはリファクタリングをサポートしていますか、それともアドインはありますか? MZ Tools にはそのような機能はありませんでした。

少なくとも次のことを実行できるようにしたい: 1. 変数の名前を変更する 2. プロシージャをサブプロシージャに分割して、コードを読みやすくする 3. 変数のスコープをグローバルからプロシージャに、またはその逆に変更する

4

4 に答える 4

37

免責事項: 私はこのプロジェクトに深く関わっています。


Rubberduckは、VBA/VB6 IDE 用のオープンソース アドインであり、[非常に] 活発に開発が行われており、この機能が含まれています。

バージョン 1.3 には、名前変更のリファクタリングが含まれています。

リファクタリングの名前変更

バージョン 2.0 (ベータ版が利用可能、まだ安定化中) には、多数のリファクタリングが含まれています。

ラバーダック 2.0 リファクタリング

  • パラメータの導入は、ローカル変数をパラメータに昇格させます
  • Introduce Fieldは、ローカル変数をモジュール スコープに昇格させます
  • Encapsulate Fieldは public フィールドをプロパティに変換します
  • Move Closer to Usageは、1 つのプロシージャでのみ使用されるフィールドをそのプロシージャに移動します。または、ローカル変数をその最初の使用のすぐ上に移動します。
  • Extract Interfaceを使用すると、インターフェイスに抽出するクラス メンバーを選択し、それらのスタブを使用して新しいクラス モジュールを作成し、抽出されたインターフェイスを元のクラスに実装させることができます。
  • インターフェイスの実装では、未実装のインターフェイスのすべてのメンバーのスタブが作成されるため、コード ペインのドロップダウンで 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

I use V-Tools for refactoring-like work as it will do find / replace in objects, not just VBA code. 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 に答える