2016-04-21 13 views
0

10秒ごとに自動的に式を更新するためのタイマーを実装したスプレッドシートがあります。別のスプレッドシートを開くまで、すべてがうまくいっていました。私の前提は、まだ間違ったシートにTimer()を実行しようとしていたということでした。だから、私は絶対的な呼び出しに切り替えようとしました。Subへの完全修飾パスを持つApplication.OnTimeを呼び出しますか?

Dim TimerActive As Boolean 
Sub StartTimer() 
    Start_Timer 
End Sub 
Private Sub Start_Timer() 
    TimerActive = True 
    Application.OnTime Now() + TimeValue("00:00:10"), "timetrack.xlsm!Tracker.Timer" 
End Sub 
Sub Stop_Timer() 
    TimerActive = False 
End Sub 
Sub Timer() 
    Dim tracker As Worksheet 
    Set tracker = Workbooks("timetrack.xlsm").Sheets("Tracker") 
    tracker.Range("O1").Value = "Timer Stopped" 
    'On Error Resume Next 
    If TimerActive Then 
     tracker.Range("O2").Value = Time 
     Application.OnTime Now() + TimeValue("00:00:10"), "timetrack.xlsm!Tracker.Timer" 
     tracker.Range("N:N").Calculate 
    End If 
    tracker.Range("O1").Value = "" 
End Sub 

具体的には、私はApplication.OnTimeライン上のエラーを取得しています::!\ OneDrive ...ドキュメント\ timetrack:

マクロ '' Sを実行することはできませんここに私の完全なコードです。 xlsm '!Tracker.Timer'。このブックでマクロが使用できないか、すべてのマクロが無効になっている可能性があります。

エラーに表示されるパスは正しいです。なにが問題ですか?奇妙なのは、問題なしでStartTimer()サブで実行しているようです。

+0

私は、問題を再現することはできませんよ。コードを使用しているブックがその背後で作業している間に、別のブックを開いて作業することができます。 (Excel 2016、Win 10) – OldUgly

答えて

0

内のセルを変更する前に、目的のブックをアクティブにする必要があります。

ワークブック内のコンテンツにアクセスする前に、追加してください:実行されるマクロは「timetrack.xlsm」である場合

Workbooks("timetrack.xlsm").Activate 

は、あなたはまた、ワークブック名​​を参照避けるために、次のコードを使用することができます。

ThisWorkbook.Activate 

このワークブックは、マクロが存在するブックを参照します。

+0

それを有効にするのは何ですか?フォーカスを切り替える場合、これはオプションではありません。 –

+0

フォーカスを切り替えますが、アクティブなブックをブックとして保存し、マクロの最後のステップとしてアクティブにすることができます。フォーカスを変更できない理由 – cdatwork

1

ワークシートの手順を参照するには、あなたがWorkSheet.CodeNameないWorkSheet.Nameを使用する必要があります。

Application.OnTime Now() + TimeValue("00:00:10"), ThisWorkbook.Name & "!" & Me.CodeName & ".Timer" 
関連する問題