アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロを登録したいのですが、マクロとして登録されません。

今作りたいのは、フォルダ内の全ファイルの名前を取得するマクロです。
私自身はVBAは書けないので、ネットに落ちているものを登録して使いたいです。
どんなマクロもなぜか登録(認識?)されずに困っています。

画面キャプチャのように、「マクロ」に何も表示されないんです。

以下のように作成しましたが、手順が間違っていますか?
対応を教えてください。

====

Excelを開く→開発タブからVisualBasicを選択→挿入→標準モジュール
→出てきた画面に、以下のコードを記述(参考:http://blog.jmiri.net/?p=1763
 
 Option Explicit

Sub setFileList(searchPath)
Dim startCell As Range
Dim maxRow As Long
Dim maxCol As Long

Set startCell = Cells(5, 2) 'このセルから出力し始める
startCell.Select

'シートをいったんクリア
maxRow = startCell.SpecialCells(xlLastCell).Row
maxCol = startCell.SpecialCells(xlLastCell).Column
Range(startCell, Cells(maxRow, maxCol)).ClearContents

Call getFileList(searchPath)
startCell.Select
End Sub

Sub getFileList(searchPath)

Dim FSO As New FileSystemObject
Dim objFiles As File
Dim objFolders As Folder
Dim separateNum As Long

'サブフォルダ取得
For Each objFolders In FSO.GetFolder(searchPath).SubFolders
Call getList(objFolders.Path)
Next

'ファイル名の取得
For Each objFiles In FSO.GetFolder(searchPath).Files
separateNum = InStrRev(objFiles.Path, "\")
'セルにパスとファイル名を書き込む
ActiveCell.Value = Left(objFiles.Path, separateNum - 1)
ActiveCell.Offset(0, 1).Value = Right(objFiles.Path, Len(objFiles.Path) - separateNum)
ActiveCell.Offset(0, 2).Value = FileDateTime(objFiles)
ActiveCell.Offset(0, 3).Value = Format((FileLen(objFiles) / 1024), "#.0")
ActiveCell.Offset(1, 0).Select
Next

End Sub

=====

ちなみに、マクロの設定で「有効」にしてあります。

初心者なので情報が足りないかもしれませんが、
詳しい方、どうぞよろしくお願いいたします。

「マクロが登録できません」の質問画像

A 回答 (3件)

#1の回答者ですが、ご質問のマクロを何度か検証してみましたが、あまり芳しくありません。

そこで、今、別の質問で、解答している私のオリジナルに内容に少し手を加えてみました。
バグがどのぐらいあるかはまだ未検証ですが、一通り動いているようです。

標準モジュールで、マクロの呼出で、ボタンに登録してください。
検査するパス名は、書き出すシートの「C1」に貼り付けてください。

'//
Option Explicit
Dim i As Long
Sub FileSearchR()
 Dim objFolder As Object
 Dim objFS As Object
 Dim FolderName As String
 FolderName = Range("C1").Value
 If FolderName = "" Or Dir(FolderName, vbDirectory) = "" Then
  MsgBox "C1:フォルダー名を確認してください。", vbCritical
  Exit Sub
 End If
 i = 2
 ThisWorkbook.Activate
 With ActiveSheet.UsedRange
 If .Count > 2 Then
  .Offset(1).Resize(.Rows.Count - 1).ClearContents
 End If
 End With
 Set objFS = CreateObject("Scripting.FileSystemObject")
 Set objFolder = objFS.GetFolder(FolderName)
 Application.ScreenUpdating = False
 Cells(i, 1).Value = FolderName
 Call ShowFiles(objFolder.Files) '親
 Call ShowFolder(objFolder)
 Application.ScreenUpdating = True
 MsgBox "終了", vbInformation
End Sub
Sub ShowFiles(ByRef objFiles)
 Dim f
 If i <= 1 Then i = 2
 For Each f In objFiles
  i = i + 1
  Cells(i, 2).Value = Dir(f)
  Cells(i, 3).Value = FileDateTime(f)
  Cells(i, 4).Value = Format$(FileLen(f) / 1024, "#,##0.0")
  DoEvents
 Next
End Sub
Sub ShowFolder(ByVal objFolder)
 Dim objSubs As Object, oSb
 Dim eaFiles As Object
 Set objSubs = objFolder.SubFolders
 For Each oSb In objSubs
   Set eaFiles = oSb.Files
   i = i + 1
   Cells(i, 1).Value = oSb.Path
   Call ShowFiles(eaFiles)
   Call ShowFolder(oSb)
 Next
End Sub
    • good
    • 0
この回答へのお礼

どうもありがとうございます!
そのままコピペして、フォルダ名取得が出来ました!

一番早くにご回答いただいたこと、さらにフォローもいただきましたので
ベストアンサーにさせていただきます!

お礼日時:2018/01/31 15:17

登録できないのではなくて、[マクロ]ダイアログに表示されないということ


ですね。
http://officetanaka.net/excel/vba/tips/tips101.htm

Subプロシージャの括弧に引数があるためです。
 Sub setFileList(searchPath) ←括弧の中にあるsearchPathが引数
Callステートメントで呼び出すSubプロシージャなので[マクロ]ダイアログ
に表示する必要がないためですね。
http://www.officetanaka.net/excel/vba/statement/ …

質問にあるマクロのOption Explicitのすぐ下にあるSubプロシージャの
括弧にある引数を削除すれば表示されます。
 Sub setFileList() 
ただし、Callステートメントでこれを呼び出しても引数がないので無意味
です。
    • good
    • 0
この回答へのお礼

なるほど、全然理解していない部分でした。
リンク先も勉強になりました。
分かりやすくありがとうございました!

お礼日時:2018/01/31 15:19

もう一度、以下のサイトをよく読んでみてください。


>以下のコードを記述(参考:http://blog.jmiri.net/?p=1763

これを加えるように書かれています。
シートオブジェクト
>Private Sub CommandButton1_Click()
> Call setFileList(Cells(2, 2)) 'フォルダパスを入力するセル
>End Sub
つまり、開発タブから、ActiveX コントロールのコマンドボタンを選びなさい、ということです。
それを貼り付けて、そのコマンドボタンをダブルクリックすれば、シートオブジェクトは開けるはずですから、そこに一行 Call setFileList... を書き加えることになります。

ただし、内容のコードとしては、残念ながら、あまり洗練されていない内容です。
    • good
    • 0
この回答へのお礼

ありがとうございました!

お礼日時:2018/01/31 15:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A