VBA

VBA for Excel



Folder Explorer

Excel&VBAの開発用パーツです。

フォルダ全体に対してなんかの作業をしたいって場合がありますよね。 たとえば、フォルダとファイルのリストを作成したいというような場合。 或いは、複数の出力ファイルを保存するための特定の作業用フォルダを設定したい場合。

ファイル名は組み込みダイアログボックスで取得できるけれど、 フォルダパスだけを取得するようなダイアログボックスは標準ではないようです。 VBなら結構簡単に作れるんですが、 ここはひとつ、VBAの標準コントロールで作ってやろうと、 無駄な努力を重ねました。

クラスモジュールの勉強がてら、ごりごりやってみました。 機能はシンプルな割にプログラムはそこそこでかくなってしまい、 どこに利点があるんだか自分でもよくわかりません。

モジュール・メンバ一覧
[frmExplorer]Explorer UserForm Module : clsDrive,clsFolder,clsFileを利用してフォルダのパスを取得する
-Variables
-[flagOK] As String :OKボタン or Cancelボタン
-Properties
-[FolderFullPath] As String (Read Only) :"FolderName\FolderPath"
-[FolderName] As String (Read Only) :フォルダの名前
-[FolderPath] As String (Read Only) :フォルダのパス
-Functions
-[SetFullPath] As Boolean : 初期化(設定完了フラグ)


[clsDrive] Drive Class Module : clsFolderを利用してドライブコレクションを作成する
-Propertis
-[TypeName] As String(Read Only) : "Drive"
-[flagInitialize] As Boolean(Read Only) : 初期化完了フラグ
-[Drives] As Collecttion(Read Only)
-[Drive] As clsFolder(Read Only)
-[CurrentPath] As clsFolder(Read Only) : カレントパス
-[CurrentDrive] As clsFolder(Read Only) : カレントドライブ
-[DriveCount] As Long(Read Only) : ドライブの数
-[DriveTypeName] As String(Read Only) : ドライブの種類
-[DriveVolume] As String(Read Only) : ドライブのボリューム
-[DriveTitle] As String(Read Only) : ドライブの種類+ボリューム
-Methods
-[Initialize]: 初期化
-[AddNewDrive]: 新規ドライブアイテムの追加
-[SetCurrentPath]: カレントパスの設定
[clsFolder]Folder Class Module : clsFileを利用してフォルダ・ファイルコレクションを作成する
-Variables
-[Name] As String : Folder名
-[Level] As Long : Folderの階層
-[Comment] As String : コメント(詳細情報その他)
-[Parent] As clsFolder : 親フォルダ
-[flagEndDir] As Boolean : フォルダのエンドマーク
-Propertis
-[TypeName] As String(Read Only) : "Folder"
-[flagInitialize] As Boolean(Read Only) : 初期化完了フラグ
-[flagRoot] As Boolean(Read Only) : ルートフォルダフラグ
-[flagOpen] As Boolean : フォルダ開閉フラグ
-[Path] As String : 親フォルダのpath
-[FullPath] As String : ファイルのpath
-[Items] As Collecttion(Read Only)
-[Item] As Object(Read Only) : clsFolder or clsFile
-[ItemCount] As Long(Read Only) : ファイル+フォルダの数
-[FileCount] As Long(Read Only) : ファイルの数
-[FolderCount] As Long(Read Only) : フォルダの数
-[ListTitle] As String(Read Only) : フォルダリストの項目
-[ListTitleHeader] As String(Read Only) : フォルダリストのヘッダ
-Methods
-[Reset]: Name,Path,Levelを設定する
-[ResetFullPath]: FullPath,Levelを設定する
-[Initialize]: 初期化する
-[AddNewFile]: 新規ファイルアイテムを追加する
-[AddNewFolder]: 新規フォルダアイテムを追加する
-[AddItem]: 新規アイテムを追加する
-[RemoveItem]: アイテムを削除する
-[RenewName]: アイテムの名前を変更する
-[FolderOpen]: フォルダを開く
-[FolderClose]: フォルダを閉じる
[clsFile] File Class Module : ファイル情報の取得、テキストファイル・ワークシートの入出力を行う。他のクラスとは独立している。
-Variables
-[Name] As String : File名
-[Level] As Long : Fileの階層
-[Comment] As String : コメント(詳細情報その他)
-[Parent] As clsFolder : 親フォルダ
-[BufArray] As Variant : Buffer(2次元配列)
-Propertis
-[TypeName] As String(Read Only) : "File"
-[Length] As Long (Read Only) : ファイルの長さ
-[DateTime] As String(Read Only) : ファイルの更新日時
-[NameTitle] As String(Read Only) : 最後の"."より前の部分
-[NameExt] As String(Read Only) : 最後の"."より後の部分
-[Path] As String : 親フォルダまでのpath
-[FullPath] As String : ファイルのpath
-Functions
-[ReadTxtFromFile] As clsFile : 文書形式のテキストファイルを読み込む
-[ReadTxtFromSheet] As clsFile : ワークシートのデータを読み込む
-Methods
-[PrintTxtToFile]: 文書形式のテキストファイルを書き出す
-[PrintTxtToSheet]: 配列変数BufArrayをワークシートに書き出す
-[PrintTxtToDebugWindow]: 配列変数BufArrayをimmediate windowに書き出す
-[SearchTxt]: KeyWordを検索して、Commentプロパティーに格納する
使用方法

上記モジュールをインポートするなどして、利用してください。 標準モジュール等で次のようなフォーム呼び出しのコードを作成し、 FolderPathを取得します。

標準モジュール

'-------------------------------------------
'frmExplorerを呼び出し、フォルダのパスを返す
'-------------------------------------------
Public Function GetFolderPath(myFullPath As String) As String
		'myFullPath:パスの初期値(例えば"C:"等)

    Load frmExplorer	'フォームをロード(まだ表示はしない)

    With frmExplorer

        .SetFullPath myFullPath	'パスの初期値を設定

        .Show			'フォームを表示
	'(フォーム上で[OK] or [Cancel]ボタンを押すと次のコードへ)

        GetFolderPath = IIf(.flagOK, .FolderFullPath, "")
		'FolderFullPathプロパティーでパスを取得
		'Cancelボタンが押された場合(flagOK=False)、""を返す

    End With

    Unload frmExplorer	'フォームをアンロード

End Function

'--------------------------------------------------
'Pathを取得し、メッセージボックスに表示するサンプル
'--------------------------------------------------
Public Sub PrintDir()
    Dim myPath As String
    
    'フォルダパスの取得 -----
    myPath = "C:"			'初期値の設定
    myPath = GetFolderPath(myPath)	'frmExplorerによるパスの取得
    If myPath <> "" Then MsgBox "Path: [" & myPath & "]"
				'ダイアログボックスへの表示

End Sub

サンプルの意味もかねて、これらのモジュールを利用して フォルダリスト作成アプリケーション(Folder List Tool) を作成しました。

注意事項

引数等の説明は面倒なので作成していませんが、 そのうちリファレンスを作ったりするかもしれません。

ソースコードに関する著作権はDamfinoにあります。 作者の許可なく配布、掲載、販売を目的に利用することを禁じます。

本プログラムによってどのような障害が出たとしても、 作者は一切の責任を負いません。

Download

クリックしてファイルに保存して下さい。 lzh形式で圧縮してあるので、lhasaなどで解凍してください。 --->FolderExp.lzh

最後に

「新規フォルダの追加」とか、いくつか追加したい機能はあるんですが、 それはいずれまた。

ご意見、ご要望があればメール・BBSでお知らせ下さい。



Program Top