• 締切済み

前の命令の実行が完了してから次を実行させたい

エクセルシートに挿入-図形から長方形を挿入し、下記のマクロを設定しました。 図形をクリックしたところ、アクション1→2→3の順には実行されず、まず2と3が同時に実行され、1のコメントは3のメッセージボックスのOKを押した後に表示されました。 1の表示が3よりも後になるのは、1の処理に時間がかかるためかと思います。 まず1が表示され、2のサウンド再生が完了するまで待ってから3のメッセージ表示という形にしたいです。 よろしくお願いいたします。 Sub Macro1() ’アクション1 ActiveSheet.Shapes(1).TextFrame.Characters.Text = "サウンドが鳴ります" ’アクション2 Shell "C:\Program Files\Windows Media Player\wmplayer.exe C:\windows\Media\Alarm06.wav", vbHide ’アクション3 MsgBox "サウンド終了です" End Sub

みんなの回答

回答No.1

>アクション1→2→3の順には実行されず その様に見えているだけです。 先ず、「ActiveSheet.Shapes(1).TextFrame.Characters.Text = "サウンドが鳴ります"」の後に「DoEvents」を入れてください。これで「1の表示が3よりも後になる」は、治るでしょう。 アクション2のShellは「プログラムを起動するだけで、完了を待たない」関数なので、確実に1→2→3の順位実行している様に見せたいなら http://hanatyan.sakura.ne.jp/vbhlp/tap_PrgEnd.htm 等を参考にしてください。

Alps5000
質問者

補足

nan93850673さん、ありがとうございます。 「DoEvents」を試してみましたが、残念ながら機能しませんでした。

関連するQ&A

  • エクセルVBAでテキストボックスに文字

    Excel2016です。 ワークシート上に配置した、図形の「テキストボックス」に文字を入れるVBAについての質問です。 下記のTEST01では期待通り文字が入りますが、これはテキストボックスをSelectしなければなりません。 TEST02ならSelectせずにOKかと思ったら実行時エラーとなりました。 どのように修正したらよろしいのでしょうか? Sub TEST01()   Sheets(“Sheet1”).Shapes.Range(Array("TextBox 3")).Select   Selection.ShapeRange.TextFrame2.TextRange.Characters.Text = "TEST/TEST/2020"   Selection.ShapeRange.TextFrame2.TextRange.Font.Name = "Meiryo UI"   Selection.ShapeRange.TextFrame2.TextRange.Font.Bold = msoTrue End Sub Sub TEST02()   With Sheets(“Sheet1”).Shapes.Range(Array("TextBox 3"))     .ShapeRange.TextFrame2.TextRange.Characters.Text = "TEST/TEST/2020"     .ShapeRange.TextFrame2.TextRange.Font.Name = "Meiryo UI"     .ShapeRange.TextFrame2.TextRange.Font.Bold = msoTrue   End With End Sub

  • マクロを使って、シート印刷完了時にシートに”完了”マークをつけたいのですが 追加質問

    先ほど Thisworkbookモジュールに Private Sub Workbook_BeforePrint(Cancel As Boolean) Application.OnTime Now, "STAMP" End Sub 標準モジュールに Sub STAMP() With ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 50, 50, 50, 50) .Fill.Visible = msoFalse .Line.Visible = msoFalse With .TextFrame .Characters.Font.Name = "MS UI Gothic" .Characters.Font.Size = 48 .Characters.Font.ColorIndex = 8 .AutoSize = True .Characters.Text = "プリント済" End With End With End Sub と教えてもらったのですが。 .Characters.Text = "プリント済"の場所に 印刷日の日付も同時に表示したいのですが。 どのようにしたらよいのでしょうか。 教えてください。 宜しくお願いします。

  • テキストボックスの表示

    VBAを使って、テキストボックスに表示される内容を設定しているのですが、 下記のように記述とOKですが、 Shapes.Range(Array("Text Box 1")).Select Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "test" Selectを抜かして、 Shapes.Range(Array("Text Box 1")).ShapeRange(1).TextFrame2.TextRange.Characters.Text = "test" のように記述するとエラーになります。 原因がよくわからないのですが、なぜなのでしょうか?

  • VBAでオートシェープのテキストを取得の際、ShapesとDrawingObjects?

    エクセル2003です。 オートシェープの基本図形の「額縁」に以下のマクロを登録しました。 マクロを呼び出したオートシェープに表示してあるテキストを取得しようとするものです。 Sub test() x = Application.Caller MsgBox ActiveSheet.Shapes(x).Characters.Text End Sub ところが実行時エラーとなってしまいます。 試行錯誤の結果、ShapesをDrawingObjectsに変えるとうまくいきます。 なぜでしょうか?

  • Application.Run実行時にエラー

     Excelファイルのマクロで、デスクトップ上の別ファイル「test.xlsm」のマクロ「Macro2」を実行させるため、以下のマクロを作成し実行したところ、 以下のエラーメッセージが出て正常動作できませんでした。 何が原因でしょうか? なお、Macro2は単独で実行した場合は正しく動作しています。 よろしくお願いします。 [作成したマクロ] Sub Macro1() Application.Run "C:¥Users¥****¥Desktop¥test.xlsm!Macro2" End Sub [エラーメッセージの内容] 実行時エラー’1004’ マクロ"C:¥Users¥****¥Desktop¥test.xlsm!Macro2"を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。

  • 楕円の塗りつぶし

    色々と試してはみたのですが、なかなかうまくいきません。 Private Sub Worksheet_Calculate() For i = 1 To 100 n = (i - 1) * 3 + 8 If Cells(n, "R").Value < -10 Then c = 10 Else Select Case Cells(n, "S").Value Case Is = 0 c = 10 Case Is > -89 c = 17 Case Is < -100 c = 10 Case Else c = 12 End Select End If With Sheets("ABC").Shapes("テキスト " & i) .Line.ForeColor.SchemeColor = c .TextFrame.Characters.Font.ColorIndex = c - 7 .TextFrame.Characters.Font.Size = 6 End With If Cells(n, "W").Value = 37 Then a = 39 Else a = 3 End If With Sheets("ABC").Shapes("楕円 1") .Fill.ForeColor.SchemeColor = a - 7 .TextFrame.Characters.Font.ColorIndex = a End With Next i End Sub といった感じで作成しています。 今回 If Cells(n, "W").Value = 37 Then a = 39 Else a = 3 End If With Sheets("ABC").Shapes("楕円 1") .Fill.ForeColor.SchemeColor = a - 7 .TextFrame.Characters.Font.ColorIndex = a End With 上記の部分を追加しました。 トラブルだらけです。 読みに行ったセルの値が37なら楕円を39の色にて塗りつぶす、 それ以外なら3です。 ただ、まだ塗りつぶしの色と文字の色の関係は調べていません。 長くわかりづらいと思いますが、宜しくお願いいたします。

  • vba スライドに図形を挿入し文字を入力するには

    一番最後のスライドに、図形を挿入するところまでは出来たのですが その図形に文字を表示するにはどうすればいいでしょうか? Sub test() Dim myDocument As Variant i = ActivePresentation.Slides.Count Set myDocument = ActivePresentation.Slides(i) myDocument.Shapes.AddShape Type:=msoShapeRectangle, Left:=50, Top:=50, Width:=100, Height:=50 myDocument.Shapes.Title = "a" myDocument.Shapes.Text = "a" End Sub まではできたのですが、 myDocument.Shapes.Title = "a" myDocument.Shapes.Text = "a" がエラーになります。 別に図形ではなくてもテキストボックスが挿入できればそれでいいのですが、 図形の挿入の仕方しかわかりませんでした。

  • 引数のリセットと図形の変更

    数値の入力されたセルとその隣にあるセルの文字列を結合して、その結果を(数値と同じ名前を持った)図形にテキストとして貼りるという動作を下に向かって繰り返しています。 下記のようにするとdは前回の値を持ったままになるようで、Loopさせるとテキストの結合がどんどん増えて行ってしまいます。 .Characters.Text = dの後で、結合された値をリセットする方法は無いでしょうか。 また、図形のサイズをテキストの長さに合わせる為にAutoSizeとしていますが、以下の方法では図形は中心を基準として大きさが変わってしまいます。 マクロの記録で確認するとmsoScaleFromTopLeftで有ろう事は分かったのですが、この構文での使い方が判りません。 欲張った質問ではありますが宜しくお願い致します。 Do While minno <= maxno Range(ActiveCell, ActiveCell.Offset(0, 1)).Select For Each c In Selection d = d & c A = ActiveCell.Formula ActiveSheet.Shapes(A).TextFrame.AutoSize = True With ActiveSheet.Shapes(A).TextFrame .Characters.Text = d End With Next ActiveCell.Offset(1).Select minno = minno + 1 Loop

  • Windows Media Playerを"別のユーザーとして実行"できない

    Windows Media Playerのショートカットを右クリック→別のユーザーとして実行とすると、 C:\Program files\Windows Media Player\wmplayer.exe ディレクトリ名が無効です。 というダイアログが表示され実行できません。 そのユーザーにログオンを切り替えてから通常通り実行すれば問題無く行えます。 当然ですが、C:\Program files\Windows Media Player\wmplayer.exe は存在しています。 バージョンはWMP11で、以前のバージョンにロールバックしても直りませんでした。 考えられる原因はありますか? よろしくお願いします。

  • Excel2003で簡単な図形の表示と非表示のプログラムを作成したので

    Excel2003で簡単な図形の表示と非表示のプログラムを作成したのですが上手く出来ません UserForm1に Private Sub OptionButton1 Click() ActiveSheet.Shapes("Oval 1").Visible=True 'ワークシート1に楕円の図形1表示 ActiveSheet.Shapes("Oval 2").Visible=False 'ワークシート1に楕円の図形2非表示 End Sub Private Sub OptionButton2 Click() ActiveSheet.Shapes("Oval 1").Visible=False 'ワークシート1に楕円の図形1非表示 ActiveSheet.Shapes("Oval 2").Visible=True 'ワークシート1に楕円の図形2表示 End Sub 上記の記述では上手くいくのですが、下記の様に ワークシート2の図形3と4も同様に表示・非表示したいため追加するとエラーになります。 UserForm1に Private Sub OptionButton1 Click() ActiveSheet.Shapes("Oval 1").Visible=True 'ワークシート1の楕円図形1表示 ActiveSheet.Shapes("Oval 2").Visible=False 'ワークシート1の楕円図形2非表示 ActiveSheet.Shapes("Oval 3").Visible=True 'ワークシート2の楕円図形3表示 ActiveSheet.Shapes("Oval 4").Visible=False 'ワークシート2の楕円図形4非表示 End Sub Private Sub OptionButton2 Click() ActiveSheet.Shapes("Oval 1").Visible=False 'ワークシート1の楕円図形1非表示 ActiveSheet.Shapes("Oval 2").Visible=True 'ワークシート1の楕円図形2表示 ActiveSheet.Shapes("Oval 3").Visible=False 'ワークシート2の楕円図形3非表示 ActiveSheet.Shapes("Oval 4").Visible=True 'ワークシート2の楕円図形4表示 End Sub VBAの勉強中の初心者です。教えて頂けないでしょうか。