- ベストアンサー
Excel VBA プログラムを止める命令
以前にも同じ趣旨の質問をしたのですが、 一度締め切った後も結局解決せず、少し自分でも質問の仕方が まとまって来たと思うので、再度質問させてください。 Ontimeメソッドで、あらかじめ時刻を指定し(これは複数あります) 印刷をかけさせるというプログラムをつくっているのですが、 そのプログラムを丸ごと止めるボタンというのをつくりたいのです。 Crtl+Breakをsendkeyで送るというのを考えたのですが、 私の環境(win2000+Excel2002)では、Crtl+Breakを押してもEscを押しても 反応している様子がなく、マクロの自動記録でも記録されないので、 果たしてそれを設定して有効かどうかもわからず、 具体的にどう記述すれば十分なのかも調べ切れませんでした。 Ontimeをピンポイントで止める、というのも 前回の質問でいただいた回答の中にあったのですが、 Ontimeというより、プロシージャもしくはモジュールを すべて停止させたいのです。 考える糸口だけでも、何かアイディアありましたらお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (5)
![noname#60992](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_100_3.gif)
![noname#60992](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_100_3.gif)
- hana-hana3
- ベストアンサー率31% (4940/15541)
![noname#60992](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_100_3.gif)
- hana-hana3
- ベストアンサー率31% (4940/15541)
関連するQ&A
- Excel VBAでセルに書いた時刻を取得したいのに・・・
ExcelのVBAで、OnTimeを使い、 定時に印刷させるプログラムを組んでいます。 今までOnTimeの時刻設定に直接時刻を入れ込んでいたのですが、 ワークシートに登録した時刻を使うようにしたいと思い、 次のようにしたのですが、 Setのところの変数名で「オブジェクトが必要です」エラーが出ます。 ・・・何が悪いのでしょうか? Dim routinetime1 As String Dim routinetime2 As String Dim routinetime3 As String Set routinetime1 = Range("A1").Value Set routinetime2 = Range("B2").Value Set routinetime3 = Range("C3").Value Application.OnTime TimeValue(routinetime1), "印刷プロシージャ" Application.OnTime TimeValue(routinetime2), "印刷プロシージャ" Application.OnTime TimeValue(routinetime3), "印刷プロシージャ" よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- OnTimeの取り消しについて
ヘルプには次のように記述がありますが、指定時刻に 実行させるプロシージャーの取り消しはサンプルの手順 で動作しますが、何秒後・・・を指定した場合のサンプル はうまく取り消せません。"実行時エラー '1004'"と なります。 この場合、どのように記述すればいいのでしょうか? 使用例 次の使用例は、現在から 15 秒後に my_Procedure を実行します。 Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure" 次の使用例は、午後 5 時に my_Procedure を実行します。 Application.OnTime TimeValue("17:00:00"), "my_Procedure" 次の使用例は、前の使用例で設定した OnTime メソッドの設定を取り消します。 Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ Procedure:="my_Procedure", Schedule:=False
- ベストアンサー
- オフィス系ソフト
- VBAにてメッセージボックスを最前面に表示させる
エクセルVBAにて、指定時刻になったらメッセージボックスを、最前面に表示させるプログラムを作成中です。 時刻の指定は、ontimeメソッドの使用でできました。 しかし、最前面(他のアプリケーションを開いていても、メッセージボックスが手前に表示される)がどうしてもできません。。 VBだとAPI関数を使って、フォームを常に最前面表示はできました。 メッセージボックスで、このような表示方法は実現可能なのでしょうか? どなたか教えて下さい。よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- VBAプロジェクトのパスワード解除について
VBAプロジェクトのパスワードを解除した後VBAプロジェクトにあるモジュールを削除するというコードを書きました。 解除まではできていますが、モジュールを解除するコードにくると保護されているというエラーが出て進めません。 いくつかのことを確認しましたが、解決に至らなかったので、ご教示いただけないでしょうか。 確認した内容は以下のとおりです。 (1)パスワード解除後にブレークポイントを設定して、VBAプロジェクトを触ってみましたが、モジュールは展開されず、パスワードも要求されません。 (2)パスワード解除後プログラムを強制終了して、解除したエクセルをダブルクリックして開き、VBAプロジェクトを触ると、パスワードは解除されていて、モジュールも展開されました。 (3)パスワード解除とモジュール削除を別々のプロシージャにして、パスワード解除をしてプロシージャを終わらせて、改めてモジュール削除のプロシージャを実行してみましたが、VBAプロジェクトが保護されていますと出て、モジュール削除のコードが実行できない。 VBAで処理するのは不可能であるなら、PowerShellとの組み合わせなどでできるようになるのでしょうか? とりあえずは、xlsmをxlsxで保存し直すことでモジュールを削除するという目的は達成しておりますが、上記の方法でもやってみたいのでご教示お願いします。
- ベストアンサー
- Excel(エクセル)
- エクセルのVBAについて。
エクセルのVBAのことは全く分かりませんが、他人の書いたVBAを使わせてもらい、自動で一定の間隔ごとに私が記録したマクロを動すようにしています。 そこで質問なのですが、午前8時00から、午前2時00まで5分おきに動かしたいのですが、日付が変わると動作しなくなってしまいます。どこが悪いのでしょうか? Option Explicit Dim mcolTask As Collection Sub 実行予約() Dim i As Date Dim strProcName As String Dim datBigin As Date Dim datEnd As Date Dim datInterval As Date Dim datTimeout As Date Dim blnJustTime As Boolean ' Setting------------------------------------------------------- datBigin = TimeValue("08:00:00") ' 開始時刻 datEnd = TimeValue("02:00:00") ' 終了時刻 datInterval = TimeValue("00:05:00") ' 実行間隔(少なくとも数秒以上で) datTimeout = TimeValue("00:02:00") ' 実行待機タイムアウト blnJustTime = True ' datInterval で丸めるか strProcName = "MACRO1" ' 実行するマクロ名 '--------------------------------------------------------------- ' 既に実行予約されているか確認 If mcolTask Is Nothing Then ' 日付シリアル値を加算 datBigin = datBigin + Date datEnd = datEnd + Date ' 終了時刻が開始時刻より小さければ日をまたぐので補正 If datEnd < datBigin Then datEnd = datEnd + 1 ' 現在時刻が既に終了時刻を過ぎている場合 If datEnd < Now() Then MsgBox "終了時刻を過ぎているため予約できません。", vbCritical, "終了" Exit Sub End If ' 現在時刻が開始時刻を過ぎていれば補正 If datBigin < Now() Then ' 開始時刻を datInterval で指定された値で丸めるか If blnJustTime Then datBigin = Application.Floor(Now() + datInterval, datInterval) Else datBigin = Now() + datInterval End If End If ' 初期化 Set mcolTask = New Collection ' メイン部分 For i = datBigin To datEnd Step datInterval ' 後から取り消せるようにコレクションに退避 mcolTask.Add CStr(i) & "," & strProcName ' Application.Ontime で実行予約を行う Application.OnTime EarliestTime:=i, _ Procedure:=strProcName, _ LatestTime:=i + datTimeout, _ Schedule:=True Next i Else MsgBox "既に実行中です", vbInformation End If End Sub
- ベストアンサー
- Visual Basic
- 指定した時刻になるとセルに色がつくようにしたい
初心者です。エクセルのVBAで設定した時刻になったらセルに色がつくようにしたいです。 例えば、17:00時にA1セル、18:00にA2セルに色を自動でつくようにしたいと思っています。 OnTimeを使ったらよいと思っていろいろ試しましたが、設定した時刻になってもなにも起こりません。 標準モジュールに以下の内容を記述して、パソコンの時計を変更して確認しています。 できたらクリックしないでファイルオープンしてなにもせずに設定時刻に実行されるようにしたいです。 最初の3秒でB1に現在の時間を取得。 セルA1とA2をクリアしてから設定時間に色をつけるようにしたつもりです。 下記が記述内容です。 Sub 指定時間にマクロを開始() Dim stime As Date Range("A1") = "" Range("A2") = "" Range("B1").Select stime = Now + TimeValue("00:00:03") Application.OnTime TimeValue(stime), "マクロ実行内容", TimeValue("00:05:00") End Sub Sub 時刻の設定1() Application.OnTime EarliestTime:=TimeValue("17:00:00"), Procedure:="Test" End Sub Sub Procedure() Range("A1").Interior.ColorIndex = 8 End Sub Sub 時刻の設定2() Application.OnTime EarliestTime:=TimeValue("18:00:00"), Procedure:="Test" End Sub Sub Procedure2() Range("A2").Interior.ColorIndex = 9 End Sub 実行マクロは有効にしています。 ご教授よろしくお願いします。
- 締切済み
- Excel(エクセル)
- Office2007におけVBA
お世話になります。 現在、職場ではMSのOffice2003を利用しており、2007を導入する事を検討しております。 そこで、噂では2003で作ったVBAなどのExcelプログラムで動かないメソッド(?)があると聞いたのですがネットで調べても ピンポイントで該当ページが見つかりません。 ただの噂なのかはっきりさせたいので、こちらに質問させて頂きました。 どうか、ご教授ください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- VBAの初歩的な質問
VBAの基本的な事なのですが(すいません、あまりに初歩的な事なのでこちらに質問させていただきました。) よく、プログラミングを書く時に、プログラム途中で、行が1つ2つ続けて空いている時ありますよね。あれは、何か意味があるのですか。 改行した所で、一つの処理が終わってますよね?(1行、2行・・空いて無くても処理は変わらないですよね?) それと、プログラム途中で、書き出しの頭がそろえる時とづらす時もありますよね。 あれも、何か意味があるのですか?(ここからここまでの処理と見やすくするため?) 例 づらしてない時 Sub test01() With Sheets("Sheet1").Range("A1") .Value = Time .NumberFormatLocal = "h:mm:ss" End With Application.OnTime Now + TimeValue("0:00:01"), "test01" End Sub づらしている時 Sub test01() With Sheets("Sheet1").Range("A1") .Value = Time .NumberFormatLocal = "h:mm:ss" End With Application.OnTime Now + TimeValue("0:00:01"), "test01" End Sub それと、もう一つすいません VBAの→標準モジュールの→モジュール1内にプログラムが一つ入っています。 そのプログラムはシート1でDDEで取り込んだデータ(シート1の特定のセルに入っている)を計算、蓄積、記録など処理するようにプログラムが入っています。 そのシート1と同じ処理をシート2、3、4、(セル位置は一緒)にも同じくさせたいのですが、(それぞれのシートでDDEのデータが変わってくるのですが) そのような場合は、基本的な考え(作り方)として 標準モジュールのプログラム内で書き換えるだけで対処出来るのでしょうか? それとも、エクセルオブジェクト内→シート1やシート2などに、個別にプログラムを(多少書き換えて)入れていく感じになるのでしょうか? どなたか、ご存じの方おられましたら、よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- 難し過ぎるエクセルVBAを何故簡単にできないのか?
エクセルを始めて2年位になりますが、ようやく簡単なマクロを作ったりできるようになりました。 もっと便利な自動化手順をマスターするにはVBAを勉強する必要があります。 少しばかり参考書を読みましたが、英語の記述が非常に分かりにくく、大変奥の深いものと思います。 複雑な条件(条件分岐等)処理をするにはマクロだけではできませんが、VBAはプロシージャ、コード、モジュール、ステートメント等、聞き慣れない用語が多く、あまりにもレベルが高すぎて続きそうもないなぁという気がしています。 万人が理解でき、使いこなせる代物とは思えません。正直、これをマスターされている方はどのように勉強されたのか知りたいほどです。何も知らない素人が独学でマスターできるようには思えません。 私の理想として何で、英語でなく日本語で記述していないのかと腹が立ちます。 MSエクセルも都度、バージョンアップがされていますが、この辺の内容は全然、分かりやすくはなっていないと強く思います。 何故、もっと簡単に、日本語でも操作できるようにはならないものかと怒りを覚えます。 プログラムの構成上、無理なんでしょうか?難しいプロシージャやコード名を覚えなくても、単純なマクロのように操作を記録し、その操作を忠実に実行再現できるようになっておればどんなに『便利なのになぁ』と思います。これで誰でも使えるとマイクロソフトは思っているのでしょうか? 私としては英語記述を入力しなくても、日本語の操作目次があって、この操作したら日本語で解説されるまた、日本語コマンドでコード入力ができるようにして欲しいのです。MSにはそんな気がないのですかね。多くの日本のエクセルユーザーそんな思いは持っていないのでしょうか?
- ベストアンサー
- オフィス系ソフト
- Excel TimeValueをしようしたループマクロの待機中のCPU開放について教えて頂けませんでしょうか?
質問1: 10秒間隔で”解析1”のマクロを実行する下記のPrgですと待機の10秒間 ビジーになってしまいます。解決方法ご存知の方教えて下さい。 Sub 解析1実行用ループマクロ() Do 指定時刻 = Now + TimeValue("0時00分10秒") '10秒後 待ち時間 = TimeValue("0時00分05秒") Application.OnTime TimeValue(指定時刻), "解析1", TimeValue(待ち時間) Loop End Sub (マクロ集引用しただけで理解はあまりできていません。) 質問2: ループを終了させるのにEscで終わらせています。Escをボタンに登録しようと思ってますが他にスマートな方法有りますでしょうか?
- ベストアンサー
- オフィス系ソフト
- フォークリフトの求人に応募し採用されたが、手作業で運搬する仕事であり、実際の仕事内容と期待がずれていたため、半日で退職したことが問題になっている。
- 友人知人からは「我慢してやれ」と非難を浴びたが、リフトで運ぶと書かれた求人情報が手作業だったため、腰痛やヘルニアになりやすく、半日で辞めたことは非常識ではないかと考えている。
- 求人情報と実際の仕事内容のギャップが問題になっている中、半日で退職したことについて、理不尽と非常識の両論が飛び交っている。
補足
ありがとうございます。 前回の質問というのは、これです。 「Excel VBAで「プログラム実行」ボタンと「プログラム停止」ボタンをつけたい」 http://okwave.jp/qa2370027.html とり急ぎ。 お礼はまた、お答えを理解した時点で、 余裕を持って書かせていただきますね。 それまで失礼いたしますのをお許しください。