• 締切済み

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

  • VBAでハイパーリンクをつける

    仕事で画像のファイル名をExcelに書き出し、書き出しものにハイパーリンクで見がうまくいきません。下記のものです。どこが悪いのでしょうか? Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim 貼付行 As Integer Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" フォルダ = "分析" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" ファイル名 = Dir(パス & 拡張子) 貼付行 = 0 Do While ファイル名 <> "" 貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ファイル名, TextToDisplay:=ファイル名 ファイル名 = Dir() Loop End Sub 実行すると初めの一行だけリンクができ後は一行もできません。よろしくお願い致します。

  • VBA 一つのフォルダの中のフォルダ名とファイル名

    一つのフォルダの中のフォルダ名とファイル名を取得したい場合は ************************************** Sub test() Dim MyFileName As String Dim MyFolderName As String Dim myFSO As Object Dim MyFolder As Scripting.Folder MyFolderName = "C:\" 'フォルダを取得 MyFileName = Dir(MyFolderName & "*.*") Do While MyFileName <> "" Debug.Print MyFileName MyFileName = Dir() Loop 'ファイルを取得 Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO With .GetFolder(MyFolderName) For Each MyFolder In .SubFolders Debug.Print MyFolder.Name Next End With End With Set myFSO = Nothing End Sub ************************************** の様に ファイル名・フォルダ名をそれぞれループして取得しないとダメでしょうか? もうちょっとスマートなコードはありますか?

  • エクセル VBA フォルダを閉じる

    いつもお世話になっております。 下記のプロシージャでフォルダを開いているのですが、このフォルダを閉じる場合はどのように記述すればよろしいのでしょうか? よろしくお願いいたします。 Sub opn_fld() Dim myFol As String, mymsg As Integer Dim IE As Object myFol = "C:\ABC\" Shell "C:\Windows\Explorer.exe " & myFol, vbNormalFocus End Sub

  • FSOでエクセルファイルを作成したい

    FSOでエクセルファイルを作成したいのですが、 ファイルの作成はできますが、作成したファイルが開けません。 Sub 新規Excelファイルを作成する() Dim MyFile As String Dim myFSO As Object MyFile = "管理簿.xlsx" Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO.CreateTextFile("C:\" & MyFile) .Close End With Set myFSO = Nothing End Sub で、エラーにならずうまくいっています。 が、その出来上がったファイルを開こうとすると 「ファイル形式またはファイル拡張子が正しくありません」 と言う旨のメッセージが表示されます。 何が間違ってますか? よろしくお願いします。

  • エクセルマクロでフォルダのコピーがしたい

    こんにちわ 色々調べてフォルダのコピーはできたのですが、色々いじっていて分からないことが出てきたので質問に来ました。 やりたいことはフォルダをコピーしたいのですが、それぞれ名前を自動で変えようと思い下記(1)を元に下記(2)を作ってみましたが、動きませんでした。 (1)いくつかのサイトを見て動いたマクロ sub test() Dim myFSO As New FileSystemObject myFSO.CopyFolder "C:\test", "C:\test2" End Sub (2)ちょっといじって動かないマクロ sub test() Dim myFSO As New FileSystemObject Dim name As String Dim name2 As String name = "C:\test" name2 = "C:\test2" myFSO.CopyFolder "name", "name2" End Sub 「パスが見つかりません」と出てきたので、読み込んでいないのだとは思うのですが、どうしたら動くかアドバイスをいただきたいです。 よろしくお願いします。

  • VBA フォルダー内のファイル名・サイズの書き出し

    教えて下さい。 フォルダー名をダイアログを表示して選択する場合は、下記のコードを利用します。 Sub Test() Dim folderPath As Variant With Application.FileDialog(msoFileDialogFolderPicker) .Show folderPath = .SelectedItems(1) End With このfolderPathを利用して  フォルダー内のファイル名(B列)とサイズ(C列)をセルに書き出したいのです。 (ただし、ファイルサイズが2GBを超えるファイルも存在します。) -------------------------------------------------------------------- 下記が参考なりそうですが、フォルダー名の取得の仕方が  上記コードと異なるので思考が停止しています。 'Excel VBAでフォルダ内のファイルリストを作成 Private Sub ExGetFileList(strPath As String) Dim i As Long Dim tSfo As Object Dim tGf As Object Dim tFi As Object Dim tSub As Object Set tSfo = CreateObject("Scripting.FileSystemObject") Set tGf = tSfo.GetFolder(strPath) i = 4 For Each tFi In tGf.Files 'ファイル名 Cells(i, 2) = tFi.Name 'ファイルサイズ KByte Cells(i, 6) = Int(tFi.Size / 1024) i = i + 1 Next End Sub Private Sub CommandButton1_Click() ExGetFileList "e:\MyDir" End Sub どのように整合させれば良いですか ?

  • エクセル以外のファイルサイズを取得するには?

    例えば画像ファイルのサイズを取得しようとしているのですが Sub ファイルサイズ取得() Dim MyFileName As String MyFileName = "D:\My Documents\My Pictures\画像.bmp" Debug.Print FileLen(MyFileName) End Sub これではダメでした。 Sub ファイルサイズ取得() Dim MyFileName As String MyFileName = "D:\My Documents\My Pictures\画像.bmp" Debug.Print CreateObject("scripting.filesystemobject").GetFolder(MyFileName).Size End Sub これもダメでした。フォルダならいけるのですが。 テキストや画像ファイルなどエクセルファイル以外のサイズを取得する方法を教えてくださいませ。 オフィス2003です。

  • エクセルVBA 名前の競合と一括移動

    フォルダの中にある複数のサブフォルダを一度に移動先フォルダに移動させたいと考えています。いろいろ参考にして、下のようにコードを用意しています。これで移動前のフォルダを指定した後、移動後のフォルダをしていして、移動することができました。ただしこれだと一つ一つのフォルダについて選択しなくてはならず、理想とはいえません。 改良して次の点を付加したいのですが、どのようにするのかわからずつまずいています。 (条件) ・移動先のフォルダの中にはサブフォルダがある階層。 ・フォルダ名は英数字6~9文字 追加したい点は 1.一度に「移動前」のフォルダ内のサブフォルダを「移動先」フォルダの中に移動する。 2.名前が競合した場合は、「移動先」フォルダの中にすでにあるサブフォルダの中に移動する という機能を付加したいのですが、行き詰っています。お知恵を拝借できないでしょうか? Sub FolderMove() Dim SourcFolderSpec, DestFolderSpec As String Dim SourcFolder_Object, DestFolder_Object As Object Dim FileNamePath As Variant SourcFolderSpec = FolderPath If SourcFolderSpec = "" Then End End If DestFolderSpec = FolderPath If DestFolderSpec = "" Then End End If Set SourcFolder_Object = CreateObject _ ("Scripting.FileSystemObject").GetFolder(SourcFolderSpec) DestFolderSpec = DestFolderSpec & "\" SourcFolder_Object.Move DestFolderSpec End Sub

  • エクセル2007でVBAが動きません、助けて下さい

    先日、使用していたエクセルを2003から2007に変更した所、 オブジェクトのテキストが読み込めなくなってしまいました。 マクロの記録なども試したのですが、問題が解決せず 困っています。 原因が分かる方が入らしたら、ぜひとも教えてください。 =================================== Sub namae() Dim namae1 As String Dim namae2 As String namae1 = Application.Caller namae2 = ActiveSheet.Shapes(namae1).TextFrame.Characters.Text MsgBox namae2 End Sub

  • エクセルVBA ファイル取得方法?

    エクセル2000のVBAにて 外付ハードディスクにあるファイルを取得しようとして、 下記のように書き込みました。 Private Sub CommandButton1_Click() Dim myFSO As New FileSystemObject Dim myFolder As Folder Dim myFiles As Files Dim myFile As File Set myFolder = myFSO.GetFolder("L:\製品実現プロセス書類\作業標準書\ ComboBox1") Set myFiles = myFolder.Files For Each myFile In myFiles ComboBox2.AddItem myFile.Name Next End Sub Private Sub UserForm_Initialize() Dim myFSO As New FileSystemObject Dim myFolders As Folders Dim myFolder As Folder Set myFolders = myFSO.GetFolder("L:\製品実現プロセス書類\作業標準書\").SubFolders i = 1 For Each myFolder In myFolders ComboBox1.AddItem myFolder.Name Next ComboBox1.ListIndex = 0 '初期値 End Sub コンボボックス1には フォームを開いたときにハードディスクLの製品実現プロセス書類フォルダ内の作業標準書フォルダー内のフォルダをすべてを書き込むようして、 コンボボックス2にはコマンドボタン1をクリックしたときに コンボボックス1で選択したフォルダ内のファイルを取得したいのですがパスが見つかりませんのエラーが出ます。 たぶん、コンボボックス1の書き込み方を間違えていると思いますが わかりません?? 教えていただけないでしょうか?