|
▼ウーロン さん:
>>>上書きされずに違うモジュール名でImportされましたが、
>すいません、書き間違いです
>Module9.basに追加でModule91.basとなります
プロジェクト上のモジュール ということですね。
>原因がはっきりつかめていないのでなんともですが・・・
>コメント頂けるとうれしいですよろしくお願いいたします
自分はこの手のコードはあまり書いたことがないので、
自信ないですが・・・
実験のつもりで書いてみました。
新規BookをActiveにした状態で試してみてください。
Option Explicit
'標準モジュールを10枚追加
Sub main_Add()
Dim i As Integer
For i = 1 To 10
Call Proc_Mod_Add(ActiveWorkbook)
Next
Call Debug_ModName(ActiveWorkbook)
End Sub
Sub Proc_Mod_Add(Wb As Workbook)
If Wb.Name = ThisWorkbook.Name Then Exit Sub
Wb.VBProject.VBComponents.Add vbext_ct_StdModule
Wb.Save
End Sub
'---------------------------------------------------------
'全ての標準モジュールを削除
Sub Main_Del()
Call Proc_Mod_Del(ActiveWorkbook)
Call Debug_ModName(ActiveWorkbook)
End Sub
Sub Proc_Mod_Del(Wb As Workbook)
Dim objMod As VBComponent
If Wb.Name = ThisWorkbook.Name Then Exit Sub
With Wb.VBProject
For Each objMod In .VBComponents
If objMod.Type = vbext_ct_StdModule Then
.VBComponents.Remove objMod
Wb.Save
End If
Next
End With
End Sub
'---------------------------------------------------------
'Debug用 イミディエイトに標準モジュール名を,区切で書き出し
Sub Debug_ModName(Wb As Workbook)
Dim buf As Variant
buf = Get_Mod_Name(Wb)
If Not IsEmpty(buf) Then
Debug.Print Join(buf, ",")
Else
Debug.Print "標準モジュールなし"
End If
End Sub
'標準モジュール名を一次配列で返す。なければEmpty値
Function Get_Mod_Name(Wb As Workbook) As Variant
Dim Mod_Name() As String
Dim i As Integer
Dim objMod As VBComponent
i = 0
ReDim Mod_Name(i)
With Wb.VBProject
For Each objMod In .VBComponents
If objMod.Type = vbext_ct_StdModule Then
ReDim Preserve Mod_Name(i)
Mod_Name(i) = objMod.Name
i = i + 1
End If
Next
End With
If i = 0 Then
Get_Mod_Name = Empty
Else
Get_Mod_Name = Mod_Name
End If
Erase Mod_Name
End Function
'---------------------------------------------------------
|
|