[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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:49
Sub Worksheet_Change(ByVal Target As Range)
↓
Sub File_Name()
↑これは例ですので、適当な名前に変更してください。 (メジロ) 2019/01/04(金) 12:12
この部分にのみに関する書き込みをしましたので
中身を見直す必要があろうかと思います。
単にプロシージャー名を変更しただけですとエラーになることになります。
例として「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
(椿) 2019/01/04(金) 14:31
インデントが付いてなくてみづらいのと、せっかく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
説明不足で申し訳ございません。
ボタンというのはオートシェイプで作成した丸い図形です
私の場合、質問の仕方から勉強がひつようですね
(椿) 2019/01/04(金) 15:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.