プロが教えるわが家の防犯対策術!

以下のコードを順番に使って、InputBoxに入力した複数桁の番号を、フォルダ内のPDF名から近いものを開いて表示させています。
しかし何も入力していない状態で、キャンセルボタンを押すとフォルダ内のPDFがたくさん開いてしまい困っています。
InputBoxの右上の×を押しても同様です。
キャンセルボタンを押したらファイル自体を閉じれるようにしたいです。
できればInputBoxの右上の×を押した場合はInputBoxだけ閉じたいです。

宜しくお願いいたします。

Sub 入力()
Dim ans As String

flg = False
Do
ans = InputBox("検索したい番号を入力してください", "番号入力")
If StrPtr(ans) = 0 Then Exit Sub
If IsNumeric(ans) Then flg = True
Loop Until flg = True

If ans <> "" Then
Range("A1").Value = ans
End If

End Sub


Sub PDFを開く()

Dim MyPath As String
Dim f As Object

MyPath = "C:\○○○\×××\Desktop\番号管理"

With CreateObject("Scripting.FileSystemObject")

For Each f In .GetFolder(MyPath).Files

If InStr(f, Range("A1").Value) >= 1 Then

CreateObject("Shell.Application").ShellExecute f

End If

Next f
End With
End Sub

A 回答 (3件)

InputBox をApplication.InputBoxにしてみたら・・


ans = Application.InputBox(prompt:="番号入力", _
Title:="検索したい番号を数値入力で入力してください", _
Type:=1)
If TypeName(ans) = "Boolean" Then
xもここになりますけれど
MsgBox "キャンセル": Exit Sub
End If

>キャンセルボタンを押したらファイル自体を閉じれるようにしたいです。
できればInputBoxの右上の×を押した場合はInputBoxだけ閉じたいです。

自前のUserFormを作る方が簡単?
OKボタン・キャンセルボタン・テキストボックス 設置

右上の×を押した場合
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
?.Close

とか・・・
    • good
    • 0
この回答へのお礼

無事解決できました。ありがとうございました!

お礼日時:2022/07/25 12:38

こんばんは



>キャンセルボタンを押すとフォルダ内のPDFがたくさん開いてしまい困っています。
ご提示のプロシージャは2つの別々のものなので、
「キャンセルボタンを押すとフォルダ内のPDFがたくさん開く」ようなことはないはずです。
それとも、これらを連続して実行するような、マスター的なマクロを実行しているということでしょうか?
(そもそも、一つの機能をなぜ二つに分けているのかも不明ですが・・)


「Sub 入力()」に関して言えば、キャンセルを押せばそれで終了するだけです。
(値を入力しても、PDFは開きません)

「Sub PDFを開く()」に関して言えば、A1セルが空白の状態で実行すると、全てのPDF(PDFに限りませんが)を開くようになっています。
どのようにして、こちらのプロシージャが実行されているのか不明なので、直接の対策は書きにくいですが・・・
ご質問のようなことの対策としては、無条件で実行せずにA1セルの値をチェックしてから実行するようにすれば良いのではないでしょうか?
ついでに言うなら、入力のプロシージャでも書き込むのみで、キャンセルの際のA1セルの値は成り行きになっていますので、こちらでもきちんと制御しておいた方が宜しいように思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご指摘の通り、連続でマクロを実行して使っています。
修正したいと思います。

お礼日時:2022/07/25 12:40

>何も入力していない状態で、キャンセルボタンを押すとフォルダ内のPDFがたくさん開いてしまい困っています。



If StrPtr(ans) = 0 Then Exit Sub
Range("A1").ClearContents は?

何処にもRange("A1").Valueの値を初期化していませんね
・・良いのでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
pdfが開いたあと、ファイルを保存しないで閉じるマクロを実行します。
説明不足でした。

お礼日時:2022/07/25 12:43

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