• 締切済み

エクセルVBA

VBAの素人です。 以下のようなVBAを実行しようと、何とか形にしました。 単独のBOOKではうまくいくのですが、同時に他のBOOKを開くと 「インデックスが有効範囲にありません」とエラーになります。 エラー箇所は、With Sheets("Sheet1").Range("B1")部分です。 修正をご教示頂ける方、何卒よろしくお願い致します。 全くVBA無知なのにすみません。 Private Sub Workbook_Open() test01 test02 Application.OnTime Now + TimeValue("00:10:00"), "終了" End Sub Sub 終了() Application.OnTime Now + TimeValue("0:00:02"), "test01", , False ThisWorkbook.Close Savechanges:=False Application.Quit End Sub Sub test01() With Sheets("Sheet1").Range("B1") .Value = Time .NumberFormatLocal = "mm:ss" End With Application.OnTime Now + TimeValue("0:00:02"), "test01" End Sub Sub test02() With Sheets("Sheet1").Range("B2") .Value = Time .NumberFormatLocal = "mm:ss" End With End Sub

みんなの回答

回答No.3

どのBookのSheet1なのか指定されてないからです。なので、シート名の前にWorkBooks(″ブック名″).を追加しブックを特定してあげましょう。

Maruk2013
質問者

お礼

成功しました。有難うございました。 簡単だったんですね。こんなことも、分からず・・・でした。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

積極的に奨めるつもりはありませんので、 ただ、ご提示のコードについて現在の問題に対処する修正だけです。 修正点:★ 注意点;◆ ' ' ThisWorkbookモジュール Private Sub Workbook_BeforeClose(Cancel As Boolean)  '  ★   Application.OnTime dtClose, "終了", , False  '  ★   Application.OnTime Now, "終了"  '  ★ End Sub  '  ★ Private Sub Workbook_Open()   test01   test02   dtClose = Now + TimeValue("00:00:10")  '  ★終了のスケジュールを記録   Application.OnTime dtClose, "終了"  '  ★ End Sub ' ' 標準モジュール Public dtClose As Date  '  ★終了のスケジュールをキャンセルする為には正確な時刻が必要 Private dtNext As Date  '  ★次のスケジュールをキャンセルする為には正確な時刻が必要 Sub 終了()   Application.OnTime dtNext, "test01", , False   ThisWorkbook.Close Savechanges:=False   Application.Quit  '  ←↑ ◆どちらか1行のみ有効 End Sub Sub test01()   With ThisWorkbook.Sheets("Sheet1").Range("B1")  '  ★ブックを指定     .Value = Time     .NumberFormatLocal = "mm:ss"   End With   dtNext = Now + TimeValue("0:00:02")  '  ★次のスケジュールを記録   Application.OnTime dtNext, "test01"  '  ★ End Sub Sub test02()   With ThisWorkbook.Sheets("Sheet1").Range("B2")  '  ★ブックを指定     .Value = Time     .NumberFormatLocal = "mm:ss"   End With End Sub

Maruk2013
質問者

お礼

全体にわたりご指導いただき、ご丁寧に有難うございました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

ThisWorkbook.Activate With ThisWorkbook.Sheets("Sheet1").Range("B1") にしてみてはいかがでしょう。

Maruk2013
質問者

お礼

有難うございました。うまくいきました。

関連するQ&A