• 締切済み

Excel VBA

外部からモジュールを読み込めるようにしました。 ーーーーーーーーーーーーーーーーーーーーー Sub moduleImport_All() 'インポートしたいファイルのあるフォルダを指定 Dim sImportPath As String sImportPath = "C:\VBA\module\" 'FileSystemObjectの作成 Dim oFso As Object Set oFso = CreateObject("Scripting.FileSystemObject") 'フォルダオブジェクトを取得 Dim oDir As Object Set oDir = oFso.GetFolder(sImportPath) 'ファイル名を順次取得 Dim fFile As Object For Each fFile In oDir.Files 'ファイルの拡張子を取得 Dim sExt As String sExt = oFso.GetExtensionName(fFile.Name) '拡張子からモジュールだけを取得、インポート Select Case LCase(sExt) Case "bas", "cls", "frm" '指定のモジュールをインポート ThisWorkbook.VBProject.VBComponents.Import sImportPath & fFile.Name End Select Next MsgBox "完了" End Sub ーーーーーーーーーーーーーーーーーーーーー しかし、上書きがなされない為、1,2,3とモジュールが増えてしまいます。 読込みたいフォルダ内のファイルと同じ名前であれば全て上書きするにはどのように修正したらよいでしょうか?

みんなの回答

回答No.1

以下の修正により、同じ名前のモジュールが存在する場合、それを削除してから新しいモジュールをインポートすることで、モジュールの上書きが実現されます。 具体的な修正箇所は、ファイルの拡張子を取得する部分です。 Sub moduleImport_All() ' インポートしたいファイルのあるフォルダを指定 Dim sImportPath As String sImportPath = "C:\VBA\module\" ' FileSystemObjectの作成 Dim oFso As Object Set oFso = CreateObject("Scripting.FileSystemObject") ' フォルダオブジェクトを取得 Dim oDir As Object Set oDir = oFso.GetFolder(sImportPath) ' ファイル名を順次取得 Dim fFile As Object For Each fFile In oDir.Files ' ファイルの拡張子を取得 Dim sExt As String sExt = LCase(oFso.GetExtensionName(fFile.Name)) ' 拡張子からモジュールだけを取得、インポート Select Case sExt Case "bas", "cls", "frm" ' ファイルの名前を取得 Dim sModuleName As String sModuleName = Left(fFile.Name, InStrRev(fFile.Name, ".") - 1) ' すでに同じ名前のモジュールが存在するか確認 On Error Resume Next Dim existingModule As Object Set existingModule = ThisWorkbook.VBProject.VBComponents(sModuleName) On Error GoTo 0 ' 同じ名前のモジュールが存在する場合は削除してからインポート If Not existingModule Is Nothing Then ThisWorkbook.VBProject.VBComponents.Remove existingModule End If ' モジュールをインポート ThisWorkbook.VBProject.VBComponents.Import sImportPath & fFile.Name End Select Next MsgBox "完了" End Sub

archie007
質問者

補足

読込みを指定しているフォルダの中に、basファイルが2つあり、これまでは各ファイルが、1、2、3と増えてましたが、修正をしたところ1つのファイルのみが、増えていく動きをするようになりました。

関連するQ&A