如何在最近的Visual Studio中运行旧的VB宏?

时间:2018-07-01 08:21:07

标签: visual-studio visual-studio-macros

我需要运行VB中的旧Visual Studio宏。但是我发现Visual Studio不再本机支持宏,但是这里有一个宏扩展:https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MacrosforVisualStudio

Any Ideas如何在Visual Studio 2017社区版中运行以下命令,或者将其转换为新扩展支持的JavaScript?

Sub TemporaryMacro()
DTE.ActiveDocument.Selection.StartOfDocument()
Dim returnValue As vsIncrementalSearchResult
While True
    DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.StartForward()
    returnValue = DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.AppendCharAndSearch(AscW("{"))
    DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.Exit()
    If Not (returnValue = vsIncrementalSearchResult.vsIncrementalSearchResultFound) Then
        Return
    End If
    DTE.ExecuteCommand("Debug.ToggleBreakpoint")
    DTE.ExecuteCommand("Edit.GotoBrace")
    DTE.ActiveDocument.Selection.CharRight()
End While
End Sub

1 个答案:

答案 0 :(得分:2)

我自己没有尝试过Macros扩展,但是将旧的VB宏转换为JS应该很简单。 VB宏中的全局字段 DTE 现在称为 dte 。 未经测试,但是JS宏可能是:

function TemporaryMacro() {
    dte.ActiveDocument.Selection.StartOfDocument();
    var returnValue;
    while (true) {
        dte.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.StartForward();
        returnValue = dte.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.AppendCharAndSearch("{".charCodeAt(0));
        dte.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.Exit();
        if(returnValue != vsIncrementalSearchResult.vsIncrementalSearchResultFound) {
            return;
        }
        dte.ExecuteCommand("Debug.ToggleBreakpoint");
        dte.ExecuteCommand("Edit.GotoBrace");
        dte.ActiveDocument.Selection.CharRight();
    }
}

您可能需要调用该函数,因此请将此行放在上面的代码之前:

TemporaryMacro();

或者,如果您不想转换代码,则可以直接使用扩展名为Visual Commander的VB .NET或C#。