1

Visual Studio 2010 マクロに関する質問:

次のように .aspx ファイルを変更するために、別のマクロ内で実行できるマクロがあります。

DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")

ソリューション エクスプローラーのフォルダー内のすべての .aspx ファイルに対してこれを実行できるようにしたいと考えています。

たとえば、私のソリューション エクスプローラーは次のようになります。

ソリューション「あなたのソリューション名」

-プロジェクト1

-- 親フォルダ

---子フォルダ

そして、子フォルダー内の各 .aspx ファイルに対してこのマクロを実行できるようにしたいのですが、aspx 以外のファイルは実行できません。これを行う方法を何日も探しましたが、何もうまくいかないようです。現在、各ファイルで手動でマクロを実行する必要があり、これには時間がかかる場合があります。

フォルダー名を手動で入力することも、マクロを実行する前にフォルダーを選択することも気にしません。私はコーディングの初心者なので、何らかの方法を使用するように勧めることは、何もしないよりは役に立ちますが、少し説明するよりも役に立ちません.

ありがとう

4

2 に答える 2

1

最終的に、2 つの異なるアプローチ (1 つはフォルダーを検索する方法、もう 1 つはファイルを反復処理する方法) を組み合わせることで、これを自分で機能させることができました。

私が欲しいフォルダを見つけるものはここにあります.トグルはマクロをトリガーします:

http://msdn.microsoft.com/en-us/library/bb264485(v=vs.80).aspx

iterate マクロは、ここで役立つ答えです。

すべての C# ファイルにバナーを追加するには Visual Studio マクロが必要

最終的な解決策:

Imports System
Imports System.ComponentModel
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module iterateFolder
  Sub IterateFiles(Optional ByVal dbProjName As String = "")
    Dim project As Project
    Dim parentFolder As String = ""
    Dim courseFolder As String = ""

    If (String.IsNullOrEmpty(dbProjName)) Then
        dbProjName = InputBox("Type the database project name.")
        If (String.IsNullOrEmpty(dbProjName)) Then
            Return
        End If
    End If

    If (String.IsNullOrEmpty(parentFolder)) Then
        parentFolder = InputBox("Type the parent folder name.")
        If (String.IsNullOrEmpty(parentFolder)) Then
            Return
        End If
    End If

    If (String.IsNullOrEmpty(courseFolder)) Then
        courseFolder = InputBox("Type the child folder name.")
        If (String.IsNullOrEmpty(courseFolder)) Then
            Return
        End If
    End If

    For Each project In DTE.Solution
        Dim projectItem As EnvDTE.ProjectItem
        If (dbProjName.Equals(project.Name)) Then
            For Each projectItem In project.ProjectItems()
                If (projectItem.Name = parentFolder) Then
                    Dim subItem As EnvDTE.ProjectItem
                    For Each subItem In projectItem.ProjectItems()
                        If (subItem.Name = courseFolder) Then
                            IterateProjectFiles(subItem.ProjectItems)
                        End If
                    Next
                End If
            Next
        End If
    Next
End Sub
Private Sub IterateProjectFiles(ByVal prjItms As ProjectItems)
    For Each file As ProjectItem In prjItms
        If file.SubProject IsNot Nothing Then
            DTE.ExecuteCommand("View.SolutionExplorer")
            If file.Name.EndsWith(".aspx") Then
                file.Open()
                file.Document.Activate()
                DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")
            End If
            IterateProjectFiles(file.ProjectItems)
        ElseIf file.ProjectItems IsNot Nothing AndAlso file.ProjectItems.Count > 0 Then
            DTE.ExecuteCommand("View.SolutionExplorer")
            If file.Name.EndsWith(".aspx") Then
                file.Open()
                file.Document.Activate()
                DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")
            End If
            IterateProjectFiles(file.ProjectItems)
        Else
            DTE.ExecuteCommand("View.SolutionExplorer")
            If file.Name.EndsWith(".aspx") Then
                file.Open()
                file.Document.Activate()
                DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")
            End If
        End If
    Next
End Sub
End Module

必要な汎用性に応じて、プロジェクト名とフォルダー名、またはそれらの一部のみをハードコーディングするか、すべてを空白のままにすることができます。

ここで、abbazabba マクロがファイルを閉じて保存することに注意する必要がありますが、これが誰にとっても役立つ場合は、この投稿の 2 番目のリンクからその方法を取得できます。

于 2012-05-01T14:37:52.727 に答える
0

Visual Studio 2010 に付属する 'AddDirAsSlnFolder' サンプル マクロを見てください。探している機能がたくさんあるようです。

于 2012-04-30T15:34:51.887 に答える