[[20190104103514]] 『VBA コマンドの意味』(椿) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA コマンドの意味』(椿)

VBAにて下記コードを変更したいのですがご教授頂けないでしょうか。

Sub Worksheet_Change(ByVal Target As Range)
Dim FSO As Object, File As Variant
Dim pos As Long
Dim FileName As String
If Target.Column = 1 Then
Application.EnableEvents = False
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each File In FSO.GetFolder("D:\TEST").Files
pos = InStrRev(File.Path, "\")
FileName = Mid(File.Path, pos + 1)
If Left(Range("A1").Value, 6) = Right(Left(FileName, InStr(FileName, ".") - 1), 6) Then
Target.Offset(0, 1) = FileName
End If
Next File
Application.EnableEvents = True
End If
End Sub

あるセルに文字列を入力すると、その文字列をファイル名として
検索するのですがセルへの入力直後ではなく
入力後、ボタンを設置してクリック後に処理させたいのでが
ボタンにマクロ登録しようと思っても、このコードが
表示されません。
変更や追加設定が必要なのでしょうか

< 使用 Excel:Excel2013、使用 OS:Windows10 >


このプロシージャーはイベントプロシージャーですのでボタンなどに登録できません。
このプロシージャーを標準モジュールにコピーしてプロシージャー名を変更します。
(メジロ) 2019/01/04(金) 11:05

ありがとうございます。
Sub Worksheet_Change(ByVal Target As Range)
この部分を変更するのでしょうか
出来れば、どのように変更すればいいのか
ご教授いただければ幸いです。

(椿) 2019/01/04(金) 11:49


標準モジュールにコピーされているとしてプロシージャー名を変更します。

Sub Worksheet_Change(ByVal Target As Range)

     ↓

Sub File_Name()

      ↑これは例ですので、適当な名前に変更してください。
(メジロ) 2019/01/04(金) 12:12

登録は出来るようになりましたが、実行時エラー424にて
動かなくなりました。
このコードでは無理なのでしょうか
(椿) 2019/01/04(金) 12:43

>ボタンにマクロ登録しようと思っても、このコードが
>表示されません

この部分にのみに関する書き込みをしましたので
中身を見直す必要があろうかと思います。

単にプロシージャー名を変更しただけですとエラーになることになります。
例として「Target」をどう把握するかを検討する必要があると思います。

(メジロ) 2019/01/04(金) 13:41


出来ればシートモジュールにて使用したいと考えております

「Target」をどう把握するかを検討するとは

(椿) 2019/01/04(金) 14:04


横から失礼します。

Target
元々のコードではシートイベントの引数ですので、
これを何らかの形で指定してやる必要があります。
(とおりすがり) 2019/01/04(金) 14:11


ByVal Target As Range

これからも分かるように、変数の型はRange型
です。引数で指定したRangeを対象にしています。
(とおりすがり) 2019/01/04(金) 14:15


無知すぎてごめんなさい
こういう事ですか
Set Target=Range("A1")

(椿) 2019/01/04(金) 14:31


質問の回答自体はメジロさんのとおりとして、これ↓の続きですよね。
[[20190101102221]] 『VBAにてファイル検索してセルに表示』(椿)

インデントが付いてなくてみづらいのと、せっかくFSO使ってるなら文字列操作をがんばらなくてもいいんじゃないかな〜とおもうところがあるので、ちょっと改造。

    Sub さんぷる()

        Dim FSO As Object, MyFile As Object        
        Set FSO = CreateObject("Scripting.FileSystemObject")

        For Each MyFile In FSO.GetFolder("D:\WORK").Files
            If Left(Range("A1").Value, 6) = FSO.GetBaseName(MyFile.Name) Then
                Range("B1").Value = MyFile.ParentFolder
                Exit For
            End If
        Next MyFile

    End Sub

ただ、前トピにも同種の答え付いてますけど、探すフォルダが固定されているから、検索す意味が無いような・・・
最終的には再帰処理にしてサブフォルダまで探すように改良したいとか、ファイルの存在チェックをしたいとかそういった派生を考えているんでしょうか?

また、
>出来ればシートモジュールにて使用したいと考えております
とのことですが、意味がよく分かりません。とりあえず
>ボタンにマクロ登録
とのことですから、ボタンはActiveXコントローラーではなく、フォームコントローラーで作成しているのだと思いますけど・・一度シートモジュールに書いたら失敗したんでしょうか?
ちなみに、「Sheet1」のモジュールに記述しておいて、「Sheet2」に設置したボタンから呼び出したいとかであれば、「Private Sub 〜〜」ではダメです。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_020.html
https://ameblo.jp/web-ashiato/entry-12080001844.html
ほかのシートからも呼び出しをかけるなら、標準モジュールに記述する方が標準的だと個人的にはおもいます。

(もこな2) 2019/01/04(金) 15:31


探すフォルダーが固定というのは、1つの検索に対しフォルダーが1つ
同じような検索が別フォルダーに対し10種以上ありますので
手動でフォルダーを手繰り手繰り×10回を
最初に必要な検索条件を入力してそれを元に検索して
一気に表示、その中から任意に必要なファイルをクリックしてオープンさせるというもので

説明不足で申し訳ございません。
ボタンというのはオートシェイプで作成した丸い図形です
私の場合、質問の仕方から勉強がひつようですね

(椿) 2019/01/04(金) 15:57


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.