マクロを登録したいのですが、マクロとして登録されません。
今作りたいのは、フォルダ内の全ファイルの名前を取得するマクロです。
私自身は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
=====
ちなみに、マクロの設定で「有効」にしてあります。
初心者なので情報が足りないかもしれませんが、
詳しい方、どうぞよろしくお願いいたします。
No.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
どうもありがとうございます!
そのままコピペして、フォルダ名取得が出来ました!
一番早くにご回答いただいたこと、さらにフォローもいただきましたので
ベストアンサーにさせていただきます!
No.2
- 回答日時:
登録できないのではなくて、[マクロ]ダイアログに表示されないということ
ですね。
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ステートメントでこれを呼び出しても引数がないので無意味
です。
No.1
- 回答日時:
もう一度、以下のサイトをよく読んでみてください。
>以下のコードを記述(参考:http://blog.jmiri.net/?p=1763)
これを加えるように書かれています。
シートオブジェクト
>Private Sub CommandButton1_Click()
> Call setFileList(Cells(2, 2)) 'フォルダパスを入力するセル
>End Sub
つまり、開発タブから、ActiveX コントロールのコマンドボタンを選びなさい、ということです。
それを貼り付けて、そのコマンドボタンをダブルクリックすれば、シートオブジェクトは開けるはずですから、そこに一行 Call setFileList... を書き加えることになります。
ただし、内容のコードとしては、残念ながら、あまり洗練されていない内容です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
マクロが登録できません
Excel(エクセル)
-
EXCELのVBAでRange(A1:C4")を変数にする方法を教え"
Visual Basic(VBA)
-
エクセルでエラーが出て困っています。
Excel(エクセル)
-
-
4
EXCEL:マクロの登録ができない・・・
Excel(エクセル)
-
5
EXCELのボタンによるマクロの登録名にファイル名が入ってしまう
PowerPoint(パワーポイント)
-
6
UserForm1.Showでエラーになります。
工学
-
7
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
8
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
9
英語で「個数」「件数」は?
英語
-
10
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
11
エクセルVBAで、ボタンの文字を変えたい
Excel(エクセル)
-
12
VBAで「致命的なエラー」が出ました。どのくらい致命的なんでしょうか?
Access(アクセス)
-
13
Excel VBAにて
その他(Microsoft Office)
-
14
エクセル マクロ名にブック名が付いた場合の修正方法
Excel(エクセル)
-
15
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
16
マクロの「SaveAs」でエラーが出るのを解消したいです
Visual Basic(VBA)
-
17
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
18
マクロボタンを作ってのマクロ実行ができない
Excel(エクセル)
-
19
DoEventsがやはり分からない
Visual Basic(VBA)
-
20
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのマクロボタンが編集...
-
Application.Runエラー(1004)
-
別シートのマクロを実行する方法
-
エクセルVBAで、ボタンの文字を...
-
Access終了時にマクロまたはVBA...
-
マクロ 戻るボタンを押したらシ...
-
マクロが登録できません
-
特定のシートだけ印刷はマクロ...
-
access2010 コマンドまたはアク...
-
プロシージャが大きすぎます!
-
今日の日付の範囲を指定して印...
-
private sub にしたらマクロが...
-
AccessでExcelファイルを印刷
-
エクセルのマクロ
-
「Access」のフォームを...
-
ACCESS エラーメッセージ表示...
-
シート保護を掛けたまま並べ替...
-
オートシェイプの黄色いハンド...
-
エクセルのマクロ名一覧
-
Workbook_Openを起動時以外に呼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのマクロボタンが編集...
-
別シートのマクロを実行する方法
-
Application.Runエラー(1004)
-
Access終了時にマクロまたはVBA...
-
シート保護を掛けたまま並べ替...
-
access2010 コマンドまたはアク...
-
エクセルVBAで、ボタンの文字を...
-
マクロ 戻るボタンを押したらシ...
-
マクロが登録できません
-
エクセル VBA SendKeys ループ...
-
InputBox内の表示について
-
ExcelのVBAでDisplayalertsで警...
-
特定のシートだけ印刷はマクロ...
-
今日の日付の範囲を指定して印...
-
マクロとモジュールの違いを教...
-
エクセルの右クリックにオートS...
-
Workbook_Openを起動時以外に呼...
-
プロシージャが大きすぎます!
-
別シートのトグルボタンを指定...
-
アクセス:検索フォームボタンに...
おすすめ情報