- ベストアンサー
プログラムを動かすためには
- プログラムを動かすためには、スピードの値を入力して開始をクリックすると、Sheet1からSheet8まで順番にシートを表示して簡単なアニメーションができるプログラムです。
- しかし、思うような動き方をしてくれません。OSの32ビットと64ビットが関係しているような気がしますが、解決ができない状態です。
- 動作環境はWindows 8.1とExcel 2013です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
以下の 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
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
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ミリ秒です。
お礼
再度のごかいとうありがとうございました。大変参考になりました。
- uruz
- ベストアンサー率49% (417/840)
Sleep に渡す引数の単位はミリ秒(1/1000秒)ですよ。 nSec=20 では0.16秒でループを脱けてしまいます。
お礼
ありがとうございます。Sample1のバージョンで目次シートのC5セルに入力した数値で動かすスピードを変えられるといいのですが、目次シートのC5セルの入力値をどのようにプログラムに組み込めばいいか教えていただけると助かります。