VBA 複数のホルダー・Sheet名を変数に
VBAの初心者です。
サーバ内の各ホルダーに入っているファイル情報をSheetに書き出しさらにそのファイル名にハイパーリンクをつけてファイルを参照するマクロをWebから例を参照させて頂き作成しました。
マクロを作成した目的は、頻繁に更新されるネットワーク越しのファイルを
ユーザ単位で指定したホルダー分参照出来るようにしたい為です。
そして、VBAを意識せず安易に誰でもこのマクロを実行出来るようにする事です。
とりあえず、下記マクロ文で、M:\01_仕事\10_仕様書ホルダー内のファイル情報を
Sheet名=仕様書へ書き込む事は出来て、ハイパーリンクも貼れてファイル内の参照は出来ています。
作成したSheetを画像添付しました。
しかし、下記点が旨く出来ません、ご教示頂けたらと思います。
・このマクロ内で複数、参照したいファイルのホルダー名と書き出すSheet名を、変数や配列などに
記述して一挙に作成したい。
・下記マクロ内のPrivate Sub FileDisp(strPath, i)ではWorksheetsの所で変数名が使えない為、
Worksheets("仕様書").Cells(i, 2)などと、Sheetの名前をいちいち記述しました。
複数のホルダーに対応させるにはどうしたら良いか?
---------以下はマクロ文 -------------------------------------------------------------------------------------
Private Sub test7()
'Private Sub Auto_Open()
Dim a As String
Dim b As String
a = "仕様書"
b = "M:\01_仕事\10_仕様書"
Call SHEETNAME(a)
Call FORDERR(a, b)
End Sub
Sub SHEETNAME(a)
'SheetAddDelの使用例
SheetAddDel (a)
End Sub
Sub SheetAddDel(shname As String)
'現在のWorkbookに同名のSheetがないか確認する。
'あれば、そのSheetを削除する。
'それから、新しいSheetを挿入する
Dim sh As Object
For Each sh In Worksheets
If sh.Name = shname Then
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
End If
Next sh
Sheets.Add.Name = shname
End Sub
Private Sub FORDERR(a, b)
strPath = b
Range("c1").Value = strPath
Worksheets("仕様書").Cells(3, 2) = " "
Range("A3", ActiveCell.SpecialCells(xlLastCell)).ClearContents
Range("A3").Select
i = 3
FileDisp strPath, i
End Sub
Private Sub FileDisp(strPath, i)
Dim WSname As String
Dim WSvalue As String
'Application.ScreenUpdating = False '画面を固定する事により高速化しま
Set objFs = CreateObject("Scripting.FileSystemObject")
Set objFld = objFs.GetFolder(strPath)
Worksheets("仕様書").Cells(i, 2) = objFld.Path 'sak
With Worksheets("仕様書").Cells(i, 2).Font 'sak
.Bold = True 'sak
End With 'sak
With Worksheets("仕様書").Cells(i, 2).Interior 'sak
.ColorIndex = 6 'sak
.Pattern = xlSolid 'sak
End With 'sak
i = i + 1 ' サブフォルダ名を入れるsak
For Each objFl In objFld.Files
Worksheets("仕様書").Cells(i, 2).Select
WSname = objFl.ParentFolder.Path & "\" & objFl.Name 'hyperlink用sak
WSvalue = objFl.Name
'ヘルプの「Addメソッド」から「Hyperlinks オブジェクトの Add メソッド」を参照
Worksheets("仕様書").Hyperlinks.Add anchor:=Cells(i, 2), _
Address:=WSname, ScreenTip:=WSname, TextToDisplay:=WSvalue
With Worksheets("仕様書")
.Cells(i, 2).Font.Size = "11"
.Cells(i, 3) = objFl.ParentFolder.Path & "\" & objFl.Name ' フルパスに変更sak
.Cells(i, 4) = Int(objFl.Size / 1024)
.Cells(i, 5) = objFl.Type
.Cells(i, 6) = objFl.DateCreated
.Cells(i, 7) = objFl.DateLastAccessed
.Cells(i, 8) = objFl.DateLastModified
End With
i = i + 1
Next
For Each objSub In objFld.SubFolders
FileDisp objSub.Path, i
Next
End Sub
------------------------------------------------------------------------------------------------------------------------------
お礼
昨夜リストの結果を検証して間違いないことを確認しました。 特定の部署のフォルダーが一式抜けていることが分かりました。 恐らくフォルダーを移動させたと思われます。 この業務は最近引き受けたものでメンテの方法が見えました。 前回のご回答を含め、改めて感謝!&お礼申し上げます。
補足
早々のご回答、試してみて驚きの結果です。 なんと1発で全997件の検索結果が、しかも希望通りのリスト表記で得られました。(やはり多くのファイルが移動、削除されていました) 詳細な検証結果はこれからやりますのでBS(締め切り)はそれからにさせて頂きます。(当方の場合何か起こると対処できないレベルですので) ●質問にアップしたコードは >別の方から回答頂いた下記のコードで動作確認できたのでBSを選んで締め切った・・・ ということでHohoPapaさんではありません。 ============================== <別件> 先日教えて頂いた、”エクセルシートをpdfファイルで添付して、メールを起動させる”、というコードは試行してみて動かなかったので、「当方には難しすぎて使えそうもない」とギブアップ宣言してあきらめたのですが、その後良くヨク見て、どうもセル番地が(1,1)(1,2)となっているようなので、無駄と思いながら試しに所定のセルの行,列を入れて見たところ、なんと目的の結果が得られ、ビックリX2しました。 定型書式が多いのでセル番地が同じなので、シート名に関係なく全シートで使えるのは本当に有用です。 ワードからのコードのコピペで他ファイルへの適用が可能! しかし、補足欄もお礼欄も使ってしまっていましたので、この場をお借りして改めて御礼申し上げます。(これが今回指名させて頂いた理由の1つでもあります) お手数をお掛けしました。 今後ともよろしくお願い致します。(長々と失礼)