Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7247 / 13644 ツリー ←次へ | 前へ→

【40196】アニメーションをなめらかにできないか? 西谷 さくら 06/7/8(土) 13:31 質問[未読]
【40197】Re:アニメーションをなめらかにできないか? ぱっせんじゃー 06/7/8(土) 13:37 発言[未読]
【40198】Re:アニメーションをなめらかにできないか? 西谷 さくら 06/7/8(土) 15:44 発言[未読]
【40206】Re:アニメーションをなめらかにできないか? ぱっせんじゃー 06/7/8(土) 22:34 発言[未読]
【40207】Re:アニメーションをなめらかにできないか? bykin 06/7/9(日) 0:15 発言[未読]
【40217】Re:アニメーションをなめらかにできないか? 西谷 さくら 06/7/9(日) 11:13 お礼[未読]
【40226】Re:アニメーションをなめらかにできないか? bykin 06/7/9(日) 20:48 回答[未読]
【40227】Re:アニメーションをなめらかにできないか? ぱっせんじゃー 06/7/9(日) 20:52 発言[未読]
【40298】Re:アニメーションをなめらかにできないか? 西谷 さくら 06/7/10(月) 22:27 発言[未読]
【40335】Re:アニメーションをなめらかにできないか? bykin 06/7/11(火) 17:49 回答[未読]
【40341】Re:アニメーションをなめらかにできないか? 西谷 さくら 06/7/11(火) 22:32 発言[未読]
【40211】Re:アニメーションをなめらかにできないか? 西谷 さくら 06/7/9(日) 6:49 お礼[未読]

【40196】アニメーションをなめらかにできないか?
質問  西谷 さくら  - 06/7/8(土) 13:31 -

引用なし
パスワード
   環境:WindowsXP、Excel2000,VBA,HomePageBuilder7
for i=1 to 10
  UserForm1.image1.picture=loadpicture("C:\Pic" & i & ".bmp")
next i
というふうに10枚のアニメーションを作ったのですが、
loadpicture するたびに画面が黒く(?)なって見にくくなります。
ホームページビルダーではアニメーションウィザードで
XXX.gifなどが切り替え目もなめらかにできるのですが、
EXCELのVBAのFormから呼び出すと、単なる1枚の静止画
になってしまいます。
どうしたら、ExcelVBAで切り替え目がパチパチしないなめらかな
アニメーションができるのでしょうか。

【40197】Re:アニメーションをなめらかにできない...
発言  ぱっせんじゃー  - 06/7/8(土) 13:37 -

引用なし
パスワード
   試してないのですが、
WAITやSLEEPなので
間隔をあけるようにして、
さらに
DoEvents
を加えるようにしてはいかがでしょう?

【40198】Re:アニメーションをなめらかにできない...
発言  西谷 さくら  - 06/7/8(土) 15:44 -

引用なし
パスワード
   SLEEPはEXCEL・VBAにはない?ようです。
WAITとDoEvents は下記のように試しましたが、
チラつき(コマの間が黒くなる)は
変わりませんでした。

for i=1 to 10
  DoEvents
  image1.picture = loadpicture("C:\Pic" & i & ".bmp")
  Application.Wait(Now()+TimeValue("00:00:01")
next i

WAIT の使い方が間違っていたでしょうか?

【40206】Re:アニメーションをなめらかにできない...
発言  ぱっせんじゃー  - 06/7/8(土) 22:34 -

引用なし
パスワード
   失礼!
SleepはAPI関数です。
標準モジュールの先頭に

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

と記述してください。
標準モジュールがなければ挿入してから↑を記述してください。

ユーザーフォームのほうには、

Sleep 100

などと記述してください。

1000で1秒になります。

なお、西谷さんご提示のコードは↓のようにするとうまく動くと思いますよ。

Dim i As Long
 For i = 1 To 10
   Image1.Picture = LoadPicture("C:\Pic" & i & ".bmp")
   Application.Wait (Now() + TimeValue("00:00:01"))
   DoEvents
 Next i

【40207】Re:アニメーションをなめらかにできない...
発言  bykin  - 06/7/9(日) 0:15 -

引用なし
パスワード
   ↓このご質問は放ったらかしでっか?
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=39104;id=excel

質問したら最後まで責任とっておくれやす。
ほな。

【40211】Re:アニメーションをなめらかにできない...
お礼  西谷 さくら  - 06/7/9(日) 6:49 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
Wait,Sleep とも動きました。しかし、画像切り替え時の
ちらつき(一瞬黒くなる)は解消しませんでした。
しかし、Sleep が手軽なタイマーであることが
わかり感動していまーす。ありがとうございます。

【40217】Re:アニメーションをなめらかにできない...
お礼  西谷 さくら  - 06/7/9(日) 11:13 -

引用なし
パスワード
   ▼bykin さん:
>↓このご質問は放ったらかしでっか?
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=39104;id=excel
>
>質問したら最後まで責任とっておくれやす。
>ほな。
==> すみませんでした。上の質問の方へお礼書きました。(できました!)

【40226】Re:アニメーションをなめらかにできない...
回答  bykin  - 06/7/9(日) 20:48 -

引用なし
パスワード
   こんばんわ。

>できました!

了解です。今後はご自身のご質問は名前で検索かけるとかして
最後まで確認しておくれやす。

で、このスレッドのご質問のほうでっけど・・・

LoadPictureをアニメ用のループの中で使うから上手いこといかんのです。
こういうのは最初に全部読み込んでおくのがコツです。

↓こんな感じ。

1.Userform1にイメージコントロール10個(Image1〜10)と、
  コマンドボタン1個(CommandButton1)を配置する。
  (イメージコントロールの配置は適当でよい)

2.フォームモジュールに下記のコードを書く。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub CommandButton1_Click()
  Dim i As Long
  Dim j As Long
  
  For i = 1 To 10
    For j = 1 To 10
      Me.Controls("Image" & j).Visible = False
    Next
    DoEvents
    Me.Controls("Image" & i).Visible = True
    DoEvents
    Sleep 100
  Next
End Sub

Private Sub UserForm_Initialize()
  Dim i As Long
  
  For i = 1 To 10
    With Me.Controls("Image" & i)
      .Picture = LoadPicture("C:\Pic" & i & ".bmp")
      .AutoSize = True
      .Left = 0
      .Top = 0
      .Visible = False
    End With
  Next
End Sub

試してみてな。
ほな。

【40227】Re:アニメーションをなめらかにできない...
発言  ぱっせんじゃー  - 06/7/9(日) 20:52 -

引用なし
パスワード
   >LoadPictureをアニメ用のループの中で使うから上手いこといかんのです。
>こういうのは最初に全部読み込んでおくのがコツです。

勉強になりましたです。
ありがとうございます。

【40298】Re:アニメーションをなめらかにできない...
発言  西谷 さくら  - 06/7/10(月) 22:27 -

引用なし
パスワード
   ▼bykin さん:
>こんばんわ。
うまく、いきません。やっぱり、ドンドンドンと
切り替え時に一瞬黒くなってパチパチします。
image を10個作ってあらかじめ全部Loadしておいたのに。
頂いた回答を見ながら打ったからコードには
間違えはないのですが。???

【40335】Re:アニメーションをなめらかにできない...
回答  bykin  - 06/7/11(火) 17:49 -

引用なし
パスワード
   こんばんわ。

>切り替え時に一瞬黒くなってパチパチします。

あきまへんか?(^^;;
わての環境ではちょっとちらつくけど黒くなったりはしまへんが・・・
マシンスペックが原因なんかな?

そしたら、イメージコントロールをもう1個追加(Image11)して・・・

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub CommandButton1_Click()
  Dim i As Long
 
  For i = 1 To 10
    Me.Image11.Picture = Me.Controls("Image" & i).Picture
    DoEvents
    Sleep 100
  Next
End Sub

Private Sub UserForm_Initialize()
  Dim i As Long
 
  For i = 1 To 10
    With Me.Controls("Image" & i)
      .Picture = LoadPicture("C:\Pic" & i & ".bmp")
      .AutoSize = True
      .Left = 0
      .Top = 0
      .Visible = False
    End With
  Next
  With Me.Image11
    .Left = 0
    .Top = 0
    .Width = Me.Image1.Width
    .Height = Me.Image1.Height
    .Visible = True
  End With
End Sub

こんなんでどーかな?
ちらつきはマシになると思うけど・・・
試してみてな。
ほな。

【40341】Re:アニメーションをなめらかにできない...
発言  西谷 さくら  - 06/7/11(火) 22:32 -

引用なし
パスワード
   ▼bykin さん:
>こんばんわ。
>
>すみません。やってみましたが、あまり良くなりません
でした。たぶん、HomePageBuilderのアニメーション
ウィザードで平行して作ったのがすごくきれいなので
落差を感じてしまうのだと思います。
もぅちょっとなにかトライしてみます。
ありがとうございました。

7247 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free