[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『GIF画像をアニメーション再生するには?』(マイケル)
Sub TEST1()
Dim WrkPicture(9) As Picture
Dim i As Long
For i = 0 To 9 Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _ & "\img\" & i & ".gif")) If i <> 0 Then WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End If Call Sleep(100) DoEvents Next i WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End Sub
Excel2002,WindowsXP
SleepというSubを用意していますか? もしかすると下の一行が抜けているのかもしれません。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
このように先頭に入れてみてください。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub TEST1() ・ ・ ・ (やっちん)
' モジュール宣言部に記述ここから −−−−−−−−−−−−−−−−−−−−−
Public Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long) ' モジュール宣言部に記述ここまで −−−−−−−−−−−−−−−−−−−−−
そこで、やっちん様から提示して頂いたコードと上記コードの両方を先頭行に追加してそれぞれ試してみましたが、どちらも「コンパイルエラー:End Sub、End FunctionまたはEnd Property以降はコメントのみが記述できます」とのエラーメッセージが出て実行出来ませんでした。
何か他にエクセルファイルやGIFファイルの保存先等に問題があるのでしょうか?
(マイケル)
こんな風にしていませんか? Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub TEST1() ' モジュール宣言部に記述ここから −−−−−−−−−−−−−−−−−−−−− Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' モジュール宣言部に記述ここまで −−−−−−−−−−−−−−−−−−−−− Sub TEST1() Dim WrkPicture(9) As Picture Dim i As Long For i = 0 To 9 Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _ & "\img\" & i & ".gif")) If i <> 0 Then WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End If Call Sleep(100) DoEvents Next i WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End Sub
下のようにしてください。 ' モジュール宣言部に記述ここから −−−−−−−−−−−−−−−−−−−−− Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' モジュール宣言部に記述ここまで −−−−−−−−−−−−−−−−−−−−− Sub TEST1() Dim WrkPicture(9) As Picture Dim i As Long For i = 0 To 9 Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _ & "\img\" & i & ".gif")) If i <> 0 Then WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End If Call Sleep(100) DoEvents Next i WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End Sub
(やっちん)
試してはないのですが、デスクトップに全てあるのであれば > Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _ > & "\img\" & i & ".gif")) ~~~~~~~
こうしたらどうですか? Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _ & "\" & i & ".gif")) ~~~
もしくは、デスクトップに「img」という名前のフォルダを作成してその中に画像を入れてください。
>ThisWorkbook.Path & "\img\" & i & ".gif" 元々のコードは「img」フォルダに画像ファイルが入っていることになっています。
(やっちん)
質問させて頂いた当初からGIFファイルはimgフォルダの中に入っているし・・・、全てやっちん様の指示通りになっているのですが・・・。 (マイケル)
私の方では動きましたよ。 画像ファイルは、「0.gif」〜「9.gif」になっていますか? シートを表示した状態で実行していますか? (やっちん)
このコードは10個のGIFファイルがひとつずつ連続して表示されるコードの様ですが、もし実行出来るのであれば、10個のGIFファイル全てがある時間(5〜10秒程度)一辺に表示されるコードでも構わないのですが。
後はパスが正しいのかどうかくらいしか思いつきませんね。 「For i = 0 To 9」 の前の行に 「msgbox ThisWorkbook.Path」を入れて実行してみてください。 デスクトップまでのパスになっているでしょうか?
もう一つの検証として >ThisWorkbook.Path _ > & "\img\" & i & ".gif" この部分を直接ファイル名までのパスを記述して動作するようであれば ファイル名までのパスを作成している部分が実際のファイルの格納先と 合っていないということになります。 もしかしてエクセルファイルもimgフォルダに入れていませんか? (やっちん)
>「msgbox ThisWorkbook.Path」を入れて実行してみてください。 「実行時エラー'1004':PicturesクラスのInsertプロパティを取得できません」のエラーとなりました。
>もう一つの検証として >ThisWorkbook.Path _ > & "\img\" & i & ".gif" >この部分を直接ファイル名までのパスを記述して動作するようであれば >ファイル名までのパスを作成している部分が実際のファイルの格納先と >合っていないということになります。 これも同じ「実行時エラー'1004':PicturesクラスのInsertプロパティを取得できません」のエラーとなりました。
>もしかしてエクセルファイルもimgフォルダに入れていませんか? imgフォルダの中はgifファイルのみです。
やっちん様の方で問題なく実行できたとすれば、コード自体には問題ないという事ですよね。 あとは、エクセルのバージョンとかが関係するのでしょうか? ちなみに、小生のはExcel2002です。
こちらはExcel2003です。
>「msgbox ThisWorkbook.Path」を入れて実行してみてください。 >「実行時エラー'1004':PicturesクラスのInsertプロパティを取得できません」のエラーとなりました。 パスが表示されませんでしたか? 実行時エラーなのでエラー箇所より先に表示されるはずですが。 エクセルファイルがデスクトップにないとうまく動きません。
Imgフォルダの画像をデスクトップにあると表現されているのでエクセルファイルもどこかの フォルダに入れられているのでしょうか?
それもなければ仰るようにバージョンの違いでしょうか。 (やっちん)
>パスが表示されませんでしたか? >実行時エラーなのでエラー箇所より先に表示されるはずですが。 >エクセルファイルがデスクトップにないとうまく動きません。 「実行時エラー'1004'・・・」のエラーメッセージしか表示されません。
>Imgフォルダの画像をデスクトップにあると表現されているのでエクセルファイルもどこかの >フォルダに入れられているのでしょうか? エクセルファイルはデスクトップ上にあります。(フォルダには入れてません)
ひとつ気になるのは、やっちん様に指摘されて後で追加記述した先頭行のコードですが、下記の様にSubプロシージャの開始行との間に区切りの線が入ってしまいます。
これが影響しているのでしょうか?
Public Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long)
(マイケル)
気になるものはためさせていただきスキルアップを図っているエクセル初心者です 自分は以下のようなコードで試しましたところ動作しました
' モジュール宣言部に記述ここから −−−−−−−−−−−−−−−−−−−−− Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' モジュール宣言部に記述ここまで −−−−−−−−−−−−−−−−−−−−− Sub TEST1() Dim WrkPicture(15) As Picture Dim i As Long
For i = 0 To 15 Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _ & "\" & i & ".gif"))
If i <> 0 Then WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End If Call Sleep(100) DoEvents Next i WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End Sub
フォルダ名を「動くエクセル」 「動くエクセル」のフォルダ内に エクセルのシートとgif(0〜15)まで作成しました 全く参考にならないと思いますが 動作したので報告をしたくなってしまいました 申し訳ありません 今後とも勉強させてください宜しくお願いいたします 環境は、XPで2002です 失礼します (アライ)
区切り線は必ず出ます。全く影響はありません。 アライさんの検証で2002でもコードの挙動は変わらないということでしょうね。
やっぱり気になるのは、画像ファイルまでのパスです。 存在しないパスを指定すると「PicturesクラスのInsertプロパティを取得できません」 と出るのでそれが原因ではないかと思うのですが。
以下のコードで表示されるパスがファイル名まで正しいのか確認してみてください。
' モジュール宣言部に記述ここから −−−−−−−−−−−−−−−−−−−−− Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' モジュール宣言部に記述ここまで −−−−−−−−−−−−−−−−−−−−− Sub TEST1() Dim WrkPicture(9) As Picture Dim i As Long For i = 0 To 9 MsgBox ThisWorkbook.Path & "\img\" & i & ".gif" Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _ & "\img\" & i & ".gif")) If i <> 0 Then WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End If Call Sleep(100) DoEvents Next i WrkPicture(i - 1).Delete Set WrkPicture(i - 1) = Nothing End Sub
(やっちん)
エクセルファイルとGIFファイルが格納されている場所は、MsgBoxに表示されるパス名通りです。 そこで、コードのPath_ &以下を正しいパス名に変えてやってみましたが、やはり「PicturesクラスのInsertプロパティを取得できません」のエラーとなります。 エクセルファイルとGIFファイルのフォルダ\imgの格納先をデスクトップからMy Documentに変えてやってみても結果は同じでした。 (マイケル)
不思議ですね。パス自体に問題があるのでしょうか? パスを変えてみましょうか。 > Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _ > & "\img\" & i & ".gif")) これを Set WrkPicture(i) = ActiveSheet.Pictures.Insert("c:\0.gif") こうしてcドライブ直下に0.gifをコピーしても動きませんか?
ここまでやって動かないとなると分かりませんね。 (やっちん)
当サイトが休校中だったため、返事が遅れました。 最後まで色々とアドバイスしてくれてありがとうございました。 アライ様も問題なく実行出来ている事から、コード的にはなんら問題は無いという事は分かりました。 自分なりにこの後も検証を続けていきたいと思います。
アライ様もコメントを寄せて頂きありがとうございました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.