• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プログラムを動かすためには)

プログラムを動かすためには

このQ&Aのポイント
  • プログラムを動かすためには、スピードの値を入力して開始をクリックすると、Sheet1からSheet8まで順番にシートを表示して簡単なアニメーションができるプログラムです。
  • しかし、思うような動き方をしてくれません。OSの32ビットと64ビットが関係しているような気がしますが、解決ができない状態です。
  • 動作環境はWindows 8.1とExcel 2013です。

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

  • ベストアンサー
回答No.2

以下の Sample1()とSample2()を作成してテスト。両者は、かなり似た動きをしました。が、異なっている点もあります。ただ、20ミリ秒では瞬間過ぎて・・・・。せめて1000ミリ秒(=1秒)前後を指定した方がいいです。 Sample1()…Pause中もExcelは動作する。 Sample2()…Sleep中はExcelも停止する。 Excel のシートを切り替えるだけであれば Sample2()のやり方でOK。でも、次の切り替えまでの待機中に別のSub()を動かしたいのであればSample1()のやり方。Sample2()ではテストしていませんが、解説を読めばそのようです。 Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Sample1()   Dim I As Integer   For I = 1 To 8     Sheets("Sheet" & I).Select     Pause 1   Next I   Sheets("目次").Select End Sub Sub Sample2()   Dim I As Integer      For I = 1 To 8     Sheets("Sheet" & I).Select     Sleep 1000   Next I   Sheets("目次").Select End Sub 【標準モジュール】 Public Sub Pause(ByVal PauseTime As Single)   Dim Finish As Single      Finish = Timer + PauseTime   Do     DoEvents   Loop Until Timer > Finish End Sub

jugyou1
質問者

お礼

ありがとうございます。Sample1のバージョンで目次シートのC5セルに入力した数値で動かすスピードを変えられるといいのですが、目次シートのC5セルの入力値をどのようにプログラムに組み込めばいいか教えていただけると助かります。

その他の回答 (2)

回答No.3

ExcelのVBAなんて書くのは生まれて初めて。質問者が提示したコードだけが頼り。で、次に示すのも質問者の真似。 Sub Sample1()   Dim I  As Integer   Dim nSec As Single      nSec = Worksheets("目次").Range("C5")   For I = 1 To 8     Sheets("Sheet" & I).Select     Pause nSec   Next I   Sheets("目次").Select End Sub nSec は Single 型ですので、1.2秒と指定します。これは、なお、1.2秒=1200ミリ秒です。

jugyou1
質問者

お礼

再度のごかいとうありがとうございました。大変参考になりました。

  • uruz
  • ベストアンサー率49% (417/840)
回答No.1

Sleep に渡す引数の単位はミリ秒(1/1000秒)ですよ。 nSec=20 では0.16秒でループを脱けてしまいます。

関連するQ&A

専門家に質問してみよう