Microsoft Access 掲示板

VBAでコードの一括追加 / 4

6 コメント
views
4 フォロー
4
あん 2023/06/09 (金) 15:28:43 927ea@06086
Private Sub 実行ボタン_Click()

    Dim vbcmp As VBComponent
    Dim Code As String 'モジュールのコードの文字列
    Dim CodeLine As String '置換したモジュールのコードを1行単位にした文字列
    Dim RowCount As Long 'モジュールの行数
    Dim i As Integer
    Dim j As Integer '置換モジュールの文字列の改行の開始位置
    Dim k As Integer '置換モジュールの文字列の改行の終了位置
    
    For Each vbcmp In Application.VBE.ActiveVBProject.VBComponents '全てのモジュールを1つ1つ処理
        
        Code = vbcmp.CodeModule.Lines(1, vbcmp.CodeModule.CountOfLines) 'モジュールのコードを文字列変数に代入
        
        Code = Replace(Code, Me.対象文字列, Me.置換文字列) 'モジュールのコードを置換した文字列を変数に代入
        
        RowCount = (Len(Code) - Len(Replace(Code, Chr13 & Chr10, ""))) / 2 + 1 '置換モジュールの行数
        vbcmp.CodeModule.DeleteLines 1, vbcmp.CodeModule.CountOfLines 'モジュールの全削除
        
        For i = 1 To RowCount '置換モジュールを1行1行モジュールに追加
                
            If i = 1 Then
            
                j = 0
                
            Else
                
                j = Min3(InStr(k + 1, Code, Chr13 & Chr10), InStr(k + 1, Code, Chr10), InStr(k + 1, Code, Chr13))
                
            End If
             
            k = Min3(InStr(j + 1, Code, Chr13 & Chr10), InStr(j + 1, Code, Chr10), InStr(j + 1, Code, Chr13))
            If k = 0 Then
             
                k = Len(Code) + 1
                
            End If
             
             
            CodeLine = Mid(Code, j + 1, k - j - 1)
            
            vbcmp.CodeModule.InsertLines i, CodeLine
        
        Next i
        
    Next vbcmp

End Sub

Min3に関しては、3つの数値の中で最小値が何かを算出する関数(ただし、0は除く)

Private Function Min3(a As Long, b As Long, c As Long) As Long

    If a <= b Then
    
        Min3 = a
        
        If Min3 = 0 Then
        
            Min3 = b
            
        End If
        
    Else
    
        Min3 = b
        
        If Min3 = 0 Then
        
            Min3 = a
            
        End If
        
    End If
    
    If c < Min3 And c > 0 Then
    
        Min3 = c
        
    End If

End Function

まだ、モジュール2つに対してのみ実行しただけなので、不完全でありますので、もっとテストしてみます。

ただ、hiroton様、hatena様の助言をいただきまして、実行するかよく考えなおしてみます。

通報 ...