がファイル名かどうかを確認するために
Dim fName As String
If Dir(RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2))<>"" Then
fName = RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2)
ElseIf Dir(RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ".xlsm")<>"" Then
fName = RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ".xlsm"
Else
fName = RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ".xlsx"
End If
Set InBook = Workbooks.Open(Filename:=fName, UpdateLinks:=False, ReadOnly:=True)
この意志最初のテストに
Set InBook = Workbooks.Open(Filename:=RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2), UpdateLinks:=False, ReadOnly:=True)
から、あなたのコードを変更し
、必要に応じて実行されませんB列に記録されているとおりに有効です。そうでない場合は、拡張子が "xlsm"のファイルが存在するかどうかを確認し、存在する場合は使用します。それ以外の場合は、ファイルに "xlsx"という拡張子が付いていると見なされます。 (おそらく同様に、CSVやTXTファイルで作業します)
別の方法は、次のようになります。
Dim fName As String
'The Dir command will just return the filename.extension portion of the first file that matches the specification
fName = Dir(RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ".*")
If fName = "" Then
'No matching file was found
MsgBox "File requested (" & RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ") does not exist"
Else
'Concatenate the path and filename.extension together and open the file
Set InBook = Workbooks.Open(Filename:=RefSheet.Cells(file, 1) & fName, UpdateLinks:=False, ReadOnly:=True)
End If
P.S.すべての宣言を前もって終わらせたい場合は、fNameの宣言をSub(またはFunction)の先頭に移動することができます。
vbaを共有するコードはありますか?一致する場合は関連するタグを追加してください –
ファイル名(RefSheetのB列)にファイル拡張子が含まれていないため、使用するファイルがわからないという問題がありますか? – YowE3K
ご返信ありがとうございます。実際にテストする必要があるのは、フォルダ内の実際のファイルの形式です。パス名をテストするのは簡単ですが、実際のファイルが.xlsxか.xlsmかどうかを確認する必要があります。次に、列Bの名前を.xlsxまたは.xlsmに応じて変更する必要があります – rCorn