Developer's Blog

Visual Studio のマクロを使ってソースファイルからヘッダファイルに切り替える方法

こんにちは、Sleipnir 開発担当の上田です。

前回の Visual Studio のマクロを使って関数ヘッダを付ける方法に引き続きまして、
今回も、Visual Studio のマクロを紹介いたします。

紹介するマクロは、ソース切替マクロ、このフォルダ以外を閉じるマクロ、このフォルダを閉じるマクロになります。
※下記で紹介しているマクロは、コード部分をダブルクリックで選択出来ます。

1. ソース切替マクロ
 ソースファイルを編集しているときにヘッダーファイルを開いたり、ヘッダーファイルを編集しているときにソースファイルを開いたりすることが出来るマクロになります。

 Sub ソース切替() Dim FileName = ActiveDocument.Name, CurFolder = ActiveDocument.Path Dim FileSpec, FileExt If Right(FileName, 2) = ".h" Then : FileExt = ".h" : FileSpec = Left(FileName, Len(FileName) - 2) ElseIf Right(FileName, 4) = ".cpp" Then : FileExt = ".cpp" : FileSpec = Left(FileName, Len(FileName) - 4) ElseIf Right(FileName, 2) = ".c" Then : FileExt = ".c" : FileSpec = Left(FileName, Len(FileName) - 2) ElseIf Right(FileName, 4) = ".inl" Then : FileExt = ".inl" : FileSpec = Left(FileName, Len(FileName) - 4) Else : Exit Sub End If '相対パス Dim RelativePath As New Collections.ArrayList RelativePath.Add("..\inc\") RelativePath.Add("..\src\") '絶対パス Dim AbsolutePath As New Collections.ArrayList AbsolutePath.Add("c:\Sample\include\") If FileExt = ".h" Then If OpenHeaderOtherFile(CurFolder + FileSpec) = True Then Exit Sub For Each RefPath In RelativePath If OpenHeaderOtherFile(CurFolder + RefPath + FileSpec) = True Then Exit Sub Next For Each RefPath In AbsolutePath If OpenHeaderOtherFile(RefPath + FileSpec) = True Then Exit Sub Next Else If OpenSourceOtherFile(CurFolder + FileSpec) = True Then Exit Sub For Each RefPath In RelativePath If OpenSourceOtherFile(CurFolder + RefPath + FileSpec) = True Then Exit Sub Next For Each RefPath In AbsolutePath If OpenSourceOtherFile(RefPath + FileSpec) = True Then Exit Sub Next End If End Sub 'ファイルが存在していれば開く Function OpenFileIfExists(ByVal FilePath) Dim fs = CreateObject("Scripting.FileSystemObject") FilePath = fs.GetAbsolutePathName(FilePath) If fs.FileExists(FilePath) = True Then DTE.Documents.Open(FilePath, "Text") Return True End If Return False End Function 'ヘッダーに対しての他のファイルを開く Function OpenHeaderOtherFile(ByVal FilePath) 'CPP or C or INL を表示 If OpenFileIfExists(FilePath + ".cpp") = True Then Return True If OpenFileIfExists(FilePath + ".inl") = True Then Return True If OpenFileIfExists(FilePath + ".c") = True Then Return True Return False End Function 'ソースに対しての他のファイルを開く Function OpenSourceOtherFile(ByVal FilePath) 'H を表示 If OpenFileIfExists(FilePath + ".h") = True Then Return True Return False End Function 

※上記マクロのハイライトしている相対パス、絶対パスはお使いの環境に
 合わせてください。

2. このフォルダ以外を閉じるマクロ
 たくさんのファイルを開いているときに、いっぺんに閉じたいけど
 全部は閉じたくないときに利用するマクロになります。
 ※編集のファイルと異なるフォルダにいるファイルを閉じます。

 Sub このフォルダ以外を閉じる() Dim CloseDocs As New Collections.ArrayList For i = 1 To DTE.Windows.Count Dim win = DTE.Windows.Item(i) Dim doc = win.Document If doc IsNot Nothing Then If doc.Path <> ActiveDocument.Path Then CloseDocs.Add(doc) End If Next For Each doc In CloseDocs doc.Close(vsSaveChanges.vsSaveChangesPrompt) Next End Sub 

3. このフォルダを閉じるマクロ
 たくさんのファイルを開いているときに、編集のファイルと関係する
 ファイルは閉じたいときに利用するマクロになります。
 ※編集のファイルと同じフォルダにいるファイルを閉じます。

 Sub このフォルダを閉じる() Dim CloseDocs As New Collections.ArrayList For i = 1 To DTE.Windows.Count Dim win = DTE.Windows.Item(i) Dim doc = win.Document If doc IsNot Nothing Then If doc.Path = ActiveDocument.Path Then CloseDocs.Add(doc) End If Next For Each doc In CloseDocs doc.Close(vsSaveChanges.vsSaveChangesPrompt) Next End Sub 

マクロの登録方法は、前回の Visual Studio のマクロを使って関数ヘッダを付ける方法
参考にしてください。

Copyright © 2019 Fenrir Inc. All rights reserved.