こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAでフォルダの中の1個のファイルを表示したい

Windows10、Microsoft 365使用の超初心者です。
毎月1回、一個だけファイルを、フォルダ「計算表」に手動で入れています。
入れるのは、翌月のファイルで、A年B月計算表完成.xlsです。
いま、フォルダ「計算表」に、2年8月計算表完成.xlsが,1個
いれてあるので、エラーが発生します。
毎月1回のエラーを回避するため、何か良い方法を知りたいです。
よろしくお願いします。

Sub 最新計算書ひらく()
Dim wb As Workbook
Dim ws As Worksheet

ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path

On Error Resume Next
Set wb = Workbooks("2年7月計算表完成.xls")
If err.Number <> 0 Then
Set wb = Workbooks.Open(ThisWorkbook.Path & "\計算表\2年7月計算表完成.xls")
err.Clear
End If
Set ws = wb.Worksheets("集計")
On Error GoTo 0
wb.Activate
ws.Select・・・・・・ここでエラーになる
End Sub

投稿日時 - 2020-07-22 18:13:07

QNo.9776034

すぐに回答ほしいです

質問者が選んだベストアンサー

ファイルがない、複数ある場合には空振りする動作なら

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


前者を推奨します。

投稿日時 - 2020-07-22 22:09:34

お礼

ありがとうございます。本当にたすかりました。

投稿日時 - 2020-07-23 09:20:29

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

マクロブック格納フォルダーの下階層にある、
フォルダ「計算表」にエクセルブックが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

投稿日時 - 2020-07-22 21:07:53

補足

ありがとうございます。99%ぼくの思い通りの結果になりました。誠におそれいりますが「ファイルがない、または複数のエクセルブックがあったら開かない」ことは皆無なので、この処理を省いたコードにして頂けるとありがたいです。

投稿日時 - 2020-07-22 21:46:10

ANo.1

>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、次の行はエラーになります。

投稿日時 - 2020-07-22 20:05:28

補足

マクロで2年7月計算表完成.xlsをひらきなさいという命令に対して、フォルダに2年8月計算表完成.xlsが入っているので、「オブジェクトエラー オブジェクト変数またはwithブロック変数が設定されていません。」となります。ぼくが一番教えてほしいことは、どんなファイル名であろうとフォルダ「計算表」に入っているファイルを表示したいです。それをここのコードに書ければいいのですが・・・。

投稿日時 - 2020-07-22 21:05:00

あなたにオススメの質問