エクセルマクロでスライドショーを実現する方法

このQ&Aのポイント
  • エクセルマクロを使用してスライドショーのような機能を実現したいと思っています。
  • セルに写真の名前を入力し、ユーザーフォームのコマンドボタンを押すと写真が切り替わるスライドショーを作りたいです。
  • 現在のコードではセルは移動するが写真が途中で切り替わらず、最後の写真だけ表示されてしまいます。また、他の要素が入っている場合には途中の写真が表示されない現象が起きるようです。
回答を見る
  • ベストアンサー

エクセルのマクロでスライドショーをやりたい

エクセルマクロでスライドショーのようなことをやりたい 参考書だけでマクロに挑戦している超初心者です。 セルに写真の名前が並んで入れてあります。 ユーザーフォームにイメージとコマンドボタンを配置 ボタンを押すとスライドショーが始まるようにしたい。 次のように作ってみたが、セルは移動するが 写真は途中変わらず、最後の写真だけ表示される。 ところがもう一度ボタンを押すときちんと一枚づつ表示する。  参考書には、「変数iは1回目は定義されていないが 2回目は記憶している」というようなことが書かれていますが このことと関係しているのでしょうか? Private Sub CommandButton1_Click() Dim i As Integer Dim ImgName As String For i = 1 To 5 Application.Wait (Now + TimeValue"0:0:01")) ImgName = ActiveWorkbook.Path & "\" & ActiveCell.Value Image1.Picture = LoadPicture(ImgName) ActiveCell.Offset(1, 0).Activate Next i Exit Sub End Sub 実はフォーム上には、その他のものもあるのですが 質問用にこれだけを作り実行してみたところきちんと 1枚づつ表示されました。 ほかの要素が入っていると、1回目のみ、途中が表示されないという 現象が現れるようです。 質問の仕方が悪くて申し訳ありません。よろしくお願いします。

  • ksrnt
  • お礼率82% (14/17)

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 私の環境(win2000/xl2000)では >もう一度ボタンを押すときちんと一枚づつ表示する。 とはなりませんでしたが、とりあえず >Image1.Picture = LoadPicture(ImgName) の下に DoEvents の1行を挿入してみてください。

ksrnt
質問者

お礼

早速ありがとうございます。  残念ながら「DoEvents」では変化はおきませんでした。

ksrnt
質問者

補足

申し訳ありません。 回答をいただいて、すぐ試したとき間違いました。  ご指導いただきましたとおり「DoEvents」で期待する結果が得られました。ありがとうございました。

その他の回答 (1)

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

解決のようですが、一応。 今回のケースは >DoEvents より Me.Repaint が良かったかもしれません。

ksrnt
質問者

お礼

大変ありがとうございました。 超初心者で、初めての質問。 お礼ポイントのつけ方がわかりませんので失礼します。

関連するQ&A

  • PowerPointスライドショーのマクロ

    Office XPのPowerPointのマクロで2つのスライドショーを制御したいと考えています。 <想定している動作> 1)スライドショーAはエンドレスで流れている 2)スライドショーA内にあるリンクボタンを押すと、スライドショーBが流れ始める(マクロを実行) 3)スライドショーBは1回流れるとスライドショーAに切り替わる 4)スライドショーAがエンドレスで流れ始める マクロを途中まで作成したのですが、4)で、スライドショーAがリンクボタンを押した状態のまま固まってします。 ソースは以下です。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub slide()   PowerPoint.Presentations.Open ("C:\スライドB.ppt") With     ActivePresentation.Slides.Range.SlideShowTransition .AdvanceOnClick = msoFalse .AdvanceOnTime = msoTrue       '表示秒数  .AdvanceTime = 30000 End With With ActivePresentation.SlideShowSettings .ShowType = ppShowTypeSpeaker .LoopUntilStopped = msoFalse '繰り返し上映はしない .ShowWithNarration = msoTrue .ShowWithAnimation = msoTrue .RangeType = ppShowAll .AdvanceMode = ppSlideShowUseSlideTimings .PointerColor.SchemeColor = ppForeground .Run End With   Sleep (1000) SlideShowWindows(Index:=1).View.Next Sleep (1000) SlideShowWindows(Index:=1).View.Next Sleep (1000) SlideShowWindows(Index:=1).View.Exit Sleep (1000) ActivePresentation.Close PowerPoint.ActiveWindow.Activate End Sub どなたかお分かりになる方いらっしゃいますか? 上のソースをベースにしなくても良いので、ぜひアドバイスお願いします!

  • 【エクセルマクロVBA】写真のスライドショーしたい

    毎日100枚の写真が、ある特定のフォルダーに保存されます。 これらは、一日経つと、自動で削除されます(バッチファイルで) これらの写真を、エクセルに取り込んで、 簡単に閲覧できるようにしたいのです。 写真を100枚挿入するマクロは書けるのですが、 その挿入した写真をどのように集め、スライドショーにするか、という 方法について悩んでいます。 コードは自分で調べるので、 どのような仕組みにしたらいいか、知恵をお貸し頂けますでしょうか? 例えば: (1)ユーザーフォームを使う (2)フォトビューアーをエクセルで立ち上げる (3)スピンボタンを使う (4)スライドショーにしないで、ワークシートに順番に表示 ※できれば、この方法は避けたい。写真の数が多いので・・・ よろしくお願いします・・・

  • 実行中のマクロを中止(中断)したい。

    エクセル2003でマクロを勉強中です。 ユーザーフォームにボタンを二つ配置し「ボタン1」は次の命令で アクティブセルがタイマーで移動します。 この移動中(マクロの実行中)に「ボタン2」クリックで中止させる命令が可能でしょうか? Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 100 ActiveCell.Value = 1 ActiveCell.Offset(1, 0).Activate Application.Wait (Now + TimeValue("0:0:01")) Next i End Sub

  • Excel VBAで「セルが選択されたら…」

    任意の列のセルが選択されたら、マクロを実行したいんですが、どのようにしたらいいのでしょうか? 「セルを変更したら…」っていうのはわかるんですが。。 Private Sub ***() Dim i As Integer i = ActiveCell.Row ***の部分がわかりません。 よろしくお願いします。

  • Excelマクロ 曜日自動入力方法

    マクロ初心者です。 こちらのサイトから日付の自動入力の方法がわかりました。 Sub Macro1() Dim f As String f = ActiveCell.NumberFormat ActiveCell = Now End Sub ↑の右セルに曜日を自動入力したいのですが・・・ 追加するコード?を教えてほしいです。 (選択したセルA1には"7/24"をセルB1"土" のマクロ)

  • エクセルマクロで教えてください

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • エクセルマクロ教えて下さい。

    業務の中でエクセルマクロによる効率化が望めそうなので見様見真似でマクロを作ってみました。 動作は思った通り行くのですが検索が上手くいきません。 どなたかご教示お願い致します。 以下コード Dim Ran As String Dim Hn As String Dim i As Long i = 0 Do While i < 300 Ran = 1+i Hn = Range("K" + (Ran)) Cells.Find(What:=(Hn), After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate ActiveCell.Offset(0, -7).Activate Range("G" + (Ran), "K" + (Ran)).Cut ActiveCell i = i + 1 Loop End Sub 上記コードのFIND文で検索をした際にセルの値が100やB50等は正常に見つかるのですが 100Aや100E等数値の後に英語がくるとFindの検索にひっかかりません。 改善しようと努力してみたもののわかりませんでした。 添削やアドバイス、改善方法を教えて下さい。

  • 行方向の同じ値のセルを結合するマクロ

    ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。 どうぞよろしくお願いいたします。 Sub セル結合() Dim r As Integer '行数 Dim i As Integer 'カウンタ r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1 Application.DisplayAlerts = False For i = 1 To r Cells(i, 1).Activate '項目の一つ下のセルをアクティブに If ActiveCell.Value = ActiveCell.Offset(1).Value Then Range(ActiveCell, ActiveCell.Offset(1)).Merge End If Next Application.DisplayAlerts = True End Sub

  • エクセルのマクロで

    お世話になります 下記のマクロで実行した所 100まで書式設定で保護、ロックしたいのですが b3:l3はロックするものの 4行目以降はロックしません どうしたらいいでしょうか もう1つ、このシートはいつもc3からはじめたいのですが If ActiveCell.Value >= "" Then の部分はどうしたらいいでしょうか よろしくおねがいいたします 初心者でバカな質問ですみません Sub マクロ1() Dim i As Integer For i = 1 To 100 If ActiveCell.Value >= "" Then Range("B3:l3").Select Selection.Locked = True Selection.FormulaHidden = False End If ActiveCell.Offset(1, 0).Select Next End Sub

  • スライドショーが出来ません

    友達から写真集をもらったのですが、スライドショーを展開して、次のイメージなどのボタンを押しても画像が変わりません。もちろんスライドショーも出来ません。どうすればいいのでしょうか?

専門家に質問してみよう