- ベストアンサー
VBAでフォルダの中の1個のファイルを表示する方法
- Windows10、Microsoft 365使用の超初心者が、毎月1回フォルダにファイルを入れているとエラーが発生し、それを回避する方法を知りたいです。
- VBAを使用して、特定のフォルダ内の1つのファイルを表示する方法について教えてください。
- ファイル「2年8月計算表完成.xls」をフォルダ「計算表」に手動で入れたところ、エラーが発生したため、毎月のエラー回避方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ファイルがない、複数ある場合には空振りする動作なら Sub Sample2() Const tgDir = "計算表" Dim tgFile As String Dim cnt As Long Dim buf As String Dim wb As Workbook Dim ws As Worksheet cnt = 0 buf = Dir(ThisWorkbook.Path & "\" & tgDir & "\*.xls") Do While buf <> "" cnt = cnt + 1 tgFile = buf 'MsgBox buf buf = Dir() Loop If cnt = 1 Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & tgDir & "\" & tgFile) Set ws = wb.Worksheets("集計") ws.Select End If End Sub 必ずエクセルブックが1つだけあることが保証されるなら Sub Sample3() Const tgDir = "計算表" Dim buf As String Dim wb As Workbook Dim ws As Worksheet buf = Dir(ThisWorkbook.Path & "\" & tgDir & "\*.xls") Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & tgDir & "\" & buf) Set ws = wb.Worksheets("集計") ws.Select End Sub 前者を推奨します。
その他の回答 (2)
- HohoPapa
- ベストアンサー率65% (455/693)
マクロブック格納フォルダーの下階層にある、 フォルダ「計算表」にエクセルブックが1つだけあったら、 ファイル名を問わずに開き、"集計"シートを選択する。 ファイルがない、または複数のエクセルブックがあったら開かない ↑のような制御でよければ、 以下のコードを試してみてください。 Sub Sample1() Const tgDir = "計算表" Dim tgFile As String Dim cnt As Long Dim buf As String Dim wb As Workbook Dim ws As Worksheet cnt = 0 buf = Dir(ThisWorkbook.Path & "\" & tgDir & "\*.xls") Do While buf <> "" cnt = cnt + 1 tgFile = buf 'MsgBox buf buf = Dir() Loop If cnt = 1 Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & tgDir & "\" & tgFile) Set ws = wb.Worksheets("集計") ws.Select Else MsgBox "ファイルが無い、または複数ある" End If End Sub
補足
ありがとうございます。99%ぼくの思い通りの結果になりました。誠におそれいりますが「ファイルがない、または複数のエクセルブックがあったら開かない」ことは皆無なので、この処理を省いたコードにして頂けるとありがたいです。
- imogasi
- ベストアンサー率27% (4737/17069)
>ws.Selec に関連して http://paz3.hatenablog.jp/entry/20090824/1251086123 Excelでワークシートを選択する場合にSelectではなくActivateを使った方がよい理由 に解説があります。 >しかし、非表示のWorksheetに対してはActivateのみが使用できます。非表示のWorksheetにSelectした場合には「アプリケーション定義またはオブジェクト定義のエラーです」というエラーが表示されます。 ーーーー 例えば、 Sub test01() Set wb = ActiveWorkbook Set ws = wb.Worksheets("Sheet3") On Error GoTo 0 wb.Activate ws.Select MsgBox ActiveSheet.Name MsgBox Selection.Name End Sub では、先のMsgBox行はOK、次の行はエラーになります。
補足
マクロで2年7月計算表完成.xlsをひらきなさいという命令に対して、フォルダに2年8月計算表完成.xlsが入っているので、「オブジェクトエラー オブジェクト変数またはwithブロック変数が設定されていません。」となります。ぼくが一番教えてほしいことは、どんなファイル名であろうとフォルダ「計算表」に入っているファイルを表示したいです。それをここのコードに書ければいいのですが・・・。
お礼
ありがとうございます。本当にたすかりました。