2016-05-17 7 views
1

私はワークシートを通って営業部門で使用する一種のスライドショーとして循環するために以下のコードを書いています。このコードは、デバッグモードでステップスルーしたときに完全に機能しますが、マクロを実行すると間欠的にしか動作せず、アプリケーション機能を更新する画面を再アクティブ化せずにワークシートを選択することがあります。ここで断続的なVBAマクロエラー

は、私がこれまでに作成したコードです:

Sub Runshow() 

Dim ws As Worksheet 

On Error GoTo exit_ 
Application.EnableCancelKey = xlErrorHandler 

For Each ws In ThisWorkbook.Worksheets 
    ws.Protect 
Next 

Application.DisplayFullScreen = True 
Application.DisplayFormulaBar = False 
ActiveWindow.DisplayWorkbookTabs = False 
ActiveWindow.DisplayHeadings = False 
ActiveWindow.DisplayGridlines = False 
ActiveWindow.DisplayHorizontalScrollBar = False 
ActiveWindow.DisplayVerticalScrollBar = False 
Application.Calculation = xlManual 

Let y = 0 
Do Until y = 80 

    Application.ScreenUpdating = False 

    Workbooks.Open("c:\users\admin\downloads\crm.xlsx").Activate 
    Application.Calculate 

    ActiveWorkbook.Close savechanges = False 
    Application.ScreenUpdating = True 
    ThisWorkbook.Activate 

    Let x = 0 
    Do Until x = 23 

     For Each ws In ActiveWorkbook.Worksheets 
      ws.Select 
      Application.Wait (Now + TimeValue("00:00:10")) 
      x = x + 1 
     Next 

    Loop 

    y = y + 1 
Loop 

exit_: 

For Each ws In ThisWorkbook.Worksheets 
    ws.Unprotect 
Next 

Application.DisplayFullScreen = False 
Application.DisplayFormulaBar = True 
ActiveWindow.DisplayWorkbookTabs = True 
ActiveWindow.DisplayGridlines = True 
ActiveWindow.DisplayHorizontalScrollBar = True 
ActiveWindow.DisplayVerticalScrollBar = True 
Application.Calculation = xlAutomatic 

End Sub 
+0

どのようなエラーが表示されますか?また、 'Do Until x = 23'のループは何もしていないようですね。あなたは各ワークブックをループして、このループを23回繰り返すが、何もxを使うことはない。また、同じループで 'y = y + 1'の理由が2回あると、' y = y + 2'を一度使うことはできませんか?そして、私は 'y'ループが何であるかは分かりません。 –

+0

私はあなたがVBAで 'Let'を使うことができるとは気づきませんでした。あなたの質問をありがとう、私に何か教えて! – BruceWayne

+1

パワーポイントを使ってみませんか? – findwindow

答えて

0

私は似た何かを、いくつかの簡単なコードを一緒に入れて、よく働きます。あなたがここから構築することができます - あなたが理解していないものがあれば質問してください。

Sub Slideshow() 
    Dim ws As Worksheet 

    PrepareView True 

    For Each ws In ThisWorkbook.Worksheets 
     ws.Activate 
     Application.Wait (Now + TimeValue("00:00:10")) 
    Next ws 

    PrepareView False 
End Sub 

Function PrepareView(status As Boolean) 
    If status = True Then 
     ActiveWindow.DisplayWorkbookTabs = False 
     ActiveWindow.DisplayHeadings = False 
     ActiveWindow.DisplayGridlines = False 
     ActiveWindow.DisplayHorizontalScrollBar = False 
     ActiveWindow.DisplayVerticalScrollBar = False 
    ElseIf status = False Then 
     Application.DisplayFullScreen = False 
     Application.DisplayFormulaBar = True 
     ActiveWindow.DisplayWorkbookTabs = True 
     ActiveWindow.DisplayGridlines = True 
     ActiveWindow.DisplayHorizontalScrollBar = True 
     ActiveWindow.DisplayVerticalScrollBar = True 
    End If 
End Function 
+0

このCallumをありがとう、すごくいいですね!関数の作成についても私に洞察を与えてくれます。 – Boovda

+0

こんにちは@Boovda。助けてくれてありがとう。あなたの質問に答えたことが分かった場合は、この回答の左側のチェックマークをクリックして回答を受け入れてください。 – CallumDA

関連する問題