こんばんは。
私の考えが間違っていなければ、全面的にやり直さないとダメだと思います。そこで、考え方を換えて作ってみました。
えくせるふぁいる「 」-123.xls
の「 」の中に数字を入れるので、数字だけ聞いてきます。
なければ、先頭文字と、後尾文字
フォルダーの中に、数千もあるようですと、ちょっと厳しいかもしれません。ただ、今の方法が、一番速いというか、だいたい、特殊なファイルサーチプログラムも、このような考えたをしています。
'--------------------
Sub FileOpenSample2()
Dim OrgPath As String, Fname As Variant, Fnames() As Variant
Dim j As Long, i As Variant, myNo As Variant, flg As Boolean
Dim BackF1Name As String
'======================================================
'ユーザー設定
Const FrontFName As String = "えくせるふぁいる" '"先頭文字
Const BackFName As String = "-123.xls" '後尾文字
Const myPath As String = "C:\My Documents\" '調べるフォルダ
'======================================================
If InStrRev(BackFName, ".XLS", , 1) = 0 Then
BackF1Name = BackFName & ".XLS"
Else
BackF1Name = BackFName
End If
OrgPath = ThisWorkbook.Path
ChDir myPath
Fname = Dir(FrontFName & "*.xls")
If Fname = "" Then
MsgBox FrontFName & _
"該当するファイルが見つかりませんので、設定を修正してください。", 64
Exit Sub
End If
Do
ReDim Preserve Fnames(j)
Fnames(j) = StrConv(Fname, vbUpperCase)
j = j + 1
Fname = Dir
Loop Until Fname = ""
myNo = Application.InputBox(FrontFName & " ???? " & BackF1Name & vbCr & _
"番号を入れてください。", Default:=1234, Type:=2)
If VarType(myNo) = vbBoolean Or myNo = "" Then
GoTo LineEnd
End If
'入力されたファイルがあるか調べる
For Each i In Fnames
Fname = StrConv(FrontFName & myNo & BackF1Name, vbUpperCase)
If i Like Fname Then
flg = True
Exit For
End If
Next i
If flg Then
Workbooks.Open Fname
Else
'番号で見つからない場合、ファイル・オープンダイアログで、調べる
Application.Dialogs(xlDialogOpen).Show (FrontFName & "*" & BackF1Name)
End If
LineEnd:
ChDir OrgPath
End Sub
お礼
ありがとうございます ちょっと見ただけでは難しそうですね・・・ 週末で試すことができないので(家のパソにはOfficeが入っていないのです) 週明けに試してみます