
No.5ベストアンサー
- 回答日時:
>Private Sub Workbook_Open()
Worksheets("Sheet1").Select 'シートの特定化
> Call selfTimerMacro
>End Sub
これって動いていないことはないけれども、基本的には、シートを特定し、開いたら、そのシートを開けるようにしないといけませんね。
#4のマクロは、アクテイブシートになっています。それを、「明示的」に、
With Worksheets("Sheet1")
If StrComp(.Range("F1").Value, "Q", 1) = 0 Then
MsgBox "終了しました。", 64
Exit Sub
Else '
.Range("F1").Value = Now ' Format(Now, "hh:MM:ss")
End If
myTime = Now + TimeSerial(0, 0, 10)
Application.OnTime myTime, "selfTimerMacro", myTime + TimeSerial(0, 0, 5)
End With
などとつけてシートを特定化してあげないといけない、ということです。
タイマーの起動中に途中で終了するとマクロが立ち上がってくるはずです。
必ず止めてから、ブックを終了させます。
途中で止める方法は、やはりマクロで行います。
>表示箇所のユーザー定義を
>d"日 "h"時"mm"分" ss"秒"
>としているにも関わらず正常な日付を表示してくれず
>1900/1/0 17:14:58 と表示されています。
Range("F1").Value = Format(Now, "hh:MM:ss")
これは、文字列を送っているだけですから、セルの表示のようにさせるなら、
Range("F1").Value = Now
とかしてみたら良いです。
No.6
- 回答日時:
>依然、マクロの実行をしないと動いてくれません。
私には、分からないですね。たぶん、こういうのは固有の問題だと思っていますから、それを解明するのは難しいです。
まあ、デバッグのテクニックの話を紹介しておくぐらいしかしありません。ただし、これは特例です。
まず、Workbook_Open でF8を押して、ステップインで、中のマクロに飛ぶかどうかチェックします。自動実行の場合は、Workbook_Openの次辺りに、Stop メソッドを置き、マクロが止まったら、後はステップイン(F8)にして、次のマクロに飛ぶか調べるわけです。
次に、セキュリティの設定で、自動実行が動かないような設定になっていないか調べます。Workbook_Openで動かなくても不思議ではありません。
もうひとつは、途中でマクロに割り込みが入っているのか、ということがあります。割り込みが入ってしまう問題は、そんなに簡単な話ではありません。特殊なツールが必要になります。
With Worksheets("Sheet2")
If StrComp(.Range("F2").Value, "Q", 1) = 0 Then
MsgBox "終了しました。", 64
'Q/qで止めるわけだから、
.Range("F2").ClearContents 'と終了時、掃除 '←Qの文字排除/あまり関係ないが、
Exit Sub
あとは、私のマクロが、ヘタを打っているということになりますが……。もちろん、この紹介したマクロは、代用の実験的なもので、10年近く前に作ったものです。多少、凝った作りにはなっているようには感じますが、そんなに難しい内容でもありません。
私が実用で使うレベルでは、最初のマクロにもう少し手の込んだことをします。しかし、このまま、2つのマクロがダメなら、この件は、もうしわけありませんが、もう何も言えないです。
何が原因なのか、こちらに振り向けられても、こちらでは分からないのです。悪くは思わないでください。
No.4
- 回答日時:
あまり、いろいろ書いても意味がないのかもしれませんが、以下は、自走型です。
5秒間隔です。最近は、以下のようなコードを書かなくなりました。タイマーを使ったマクロは、様々なものが発表されています。最終的には、RaiseEvent につながるようですが、最初は、こんなところでもつまずきます。
私も
Application.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
の使い方は、人から教わっています。知っているようで知らないものです。
(そんなことは、どうでもよいことかもしれませんが(^^;)
'//標準モジュール
Sub selfTimerMacro()
Dim myTime As Date
'----------------------------------
'終了は、セルに'Q' を入れる(小文字も可能)
'----------------------------------
If StrComp(Range("F1").Value, "Q", 1) = 0 Then
MsgBox "終了しました。", 64
Exit Sub
Else
Range("F1").Value = Format(Now, "hh:MM:ss")
End If
myTime = Now + TimeSerial(0, 0, 10)
Application.OnTime myTime, "selfTimerMacro", myTime + TimeSerial(0, 0, 5)
End Sub
No.3
- 回答日時:
> =NOW()が記述されていて、それを一定時間で更新したいと思っています。
それなら「セルをダブルクリックして確定し直し」なんてしなくても F9キーを
押すだけでいいと思いますが。
それはともかく5分置きでいいなら データベースクエリで 外部データ参照をし
て「定期的に更新する(R) 『5』分ごと」にしておけばいいだけです。
No.2
- 回答日時:
分かっていらっしゃるとは思いますが、
Dim flg As Boolean
Dim ETime As Date
この2つは、プロシージャ外のモジュール変数ですから、当該の標準モジュールの先頭に置いてください。
これがなければ、動きません。
No.1
- 回答日時:
>一定時間、例えば5分おきにAB12セルをダブルクリックし、入力状態にし、すぐに入力状態を解除して、選択状態に戻したりは出来ますか?
本来の目的は、別の所にあるのではないでしょうか?
セル上で、「マウスの左によるダブルクリックする」という物理的な動作をさせても、意味があるとは思えないのですが。
>使っていないどこかのセルを一度入力状態に出来れば問題ないです。
もしかして、再計算をさせるという意味ではないでしょうか。
もし、そうなら、セル上には、=NOW() 関数を置き、
一定の時間(5 min)で、OnTime を使い、Caluculate させれば、必要な部分が再計算します。
ただ、これを、ワークシートに何も置かないということになると、大変に不安定なコードになるような気がします。
例えば、こんなことです。時間のサイクルは、10秒にしてあります。
意味が違うようでしたら、もう少し説明をしてください。
'//標準モジュール
Dim flg As Boolean
Dim ETime As Date
Sub Start_End()
'開始と終了
flg = Not flg
TimerTest
If flg Then
MsgBox "開始しました"
Else
MsgBox "終了の命令を受け付けました。", vbInformation
'//このコードではすぐに止まりません
End If
End Sub
Private Sub TimerTest()
ETime = Now() + TimeSerial(0, 0, 10) '10秒単位
DoEvents
Application.OnTime ETime, "MacroTest"
End Sub
Private Sub MacroTest()
Application.Calculate
If flg Then
TimerTest
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルマクロ セルをクリックするたびに記号を入力 1 2022/10/13 19:47
- Excel(エクセル) エクセルでセルに数式を入力した状態で、数式バーをクリックすると添付資料のように 「数式に関連するセル 2 2022/11/25 19:36
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) Excelについて▶あるセルに文字を入力すると、別のセルに色がつく(条件付き書式) 1 2022/03/27 16:43
- Excel(エクセル) マクロを教えてください 3 2023/07/31 21:57
- Excel(エクセル) マクロを教えてください 2 2023/07/30 23:05
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- Excel(エクセル) ExcelのVBAコードについて教えてください。 1 2022/06/20 09:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロ1があります。 A1のセル...
-
Excel VBAでのWorksheet_Change...
-
エクセルで複数のシートのクリ...
-
【エクセル】フリーワード検索...
-
記録したマクロを他のシートに...
-
エクセル シート内の一番下のセ...
-
エクセルのマクロを教えてくだ...
-
Excelで数字を入れたら対応する...
-
エクセルファイルを開いた回数...
-
エクセルVBAコード
-
エクセルで特定の行だけ行削除...
-
「マクロが含まれているファイ...
-
任意のセルに貼り付けをするマ...
-
エクセルVBAで内容変更のたびに...
-
Excelのシート上のShapeにイベ...
-
セルの一部分だけを太字にする方法
-
エクセルVBAで実行中画面を...
-
B列の最終行までA列をオート...
-
エクセルで離れた列を選択して...
-
「段」と「行」の違いがよくわ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
マクロ1があります。 A1のセル...
-
エクセルで複数のシートのクリ...
-
Excelのシート上のShapeにイベ...
-
Excelで数字を入れたら対応する...
-
【エクセル】フリーワード検索...
-
エクセルで特定の行だけ行削除...
-
エクセルファイルを開いた回数...
-
エクセル シート内の一番下のセ...
-
EXCELのダイアログシートって、...
-
長い時間かかるマクロが実行中...
-
【エクセル】「実行時エラー’10...
-
指定値をマクロで検索&シート移動
-
エクセル:セル内の文字列の最...
-
excel定数の違いについて。xlAu...
-
Excelにて、同じ画像を複数のセ...
-
Excelマクロでブック全体を検索...
-
エクセルでマクロを作りすぎた...
-
セルの一部分だけを太字にする方法
-
シートではなくBOOK間で重複し...
おすすめ情報
回答ありがとうございます。
その通りです、Sheet1のF2セルに =NOW()が記述されていて、それを一定時間で更新したいと思っています。
教えて頂いたコードを標準モジュールにペーストしたんですが、何も起こらないような気がするのですが、開始にあたり必要な手順等はありますでしょうか?
よろしくお願いいたします。
はい、最初のコードすべてを、Alt+F11で開いたGeneralのエリアにそのままペーストしました。
これではダメだったんですかね?
再回答ありがとうございます。
これです、こういった物を求めていたのですが、これだとエクセル起動時に毎回マクロの開始をしないとなりませんよね?
ファイルを開いたら自動で開始させたいと思い試しに
Private Sub Workbook_Open()
Call selfTimerMacro
End Sub
として、そのシートに導入してみたのですが、なんだか動いてくれません。
これは、このマクロを入れる場所が違ったのでしょうか?
それとも、そもそもこの構文が違うのでしょうか?
また、表示箇所のユーザー定義を
d"日 "h"時"mm"分" ss"秒"
としているにも関わらず正常な日付を表示してくれず
1900/1/0 17:14:58 と表示されています。
こちらはどう考えてどう対処すれば良いのでしょうか?
お手数ですが、教えて頂けませんか。
よろしくお願いいたします。
ありがとうございます。
表示の件は解決しました。
それで、開いたら自動で実行の件ですが、教えて頂いたコードを標準モジュールに記述してみましたが、依然、マクロの実行をしないと動いてくれません。
コードは以下の通りです
Sub selfTimerMacro()
Dim myTime As Date
With Worksheets("Sheet2")
If StrComp(.Range("F2").Value, "Q", 1) = 0 Then
MsgBox "終了しました。", 64
Exit Sub
Else '
.Range("F2").Value = Now ' Format(Now, "hh:MM:ss")
End If
myTime = Now + TimeSerial(0, 0, 10)
Application.OnTime myTime, "selfTimerMacro", myTime + TimeSerial(0, 0, 5)
End With
End Sub