VBAに詳しい方、教えて下さい!
内容ですが、VBAでストップウォッチ機能を追加し決まったシートに
その秒数を張り付けていきたいです。
その中で今困っていることが下記のところです。
【やりたいこと】
1 START/STOPボタンを1回押すとB2:C3セルが時間観測を開始します
2 ENTERキーを押していくと作業内容の上側のセルだけ秒数が入ります
(2行飛ばしで秒数が入っていきます)
↑この実行はNo1の時間観測中だけ有効にしたいです。
時間観測していないときはENTERキーを押しても処理しないようにしたいです。
3 {RIGHT}”→”キーを押していくと6行目(作業内容1)の次の列に秒数が入ります
これもNo2と同じようにNo1の時間観測中だけ有効にしたいです。
時間観測していないときは{RIGHT}”→”キーを押しても処理しないようにしたいです。
今現在のコードは下を参照下さい
お手数おかけしますがご教授願います。
Option Explicit
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private cnt As Range
Private blnStop As Boolean
Private blnStart As Boolean
Private dblTimer As Double
Private bLap As Double
Private cntLap, No, No2, i, j, k, S, F, X, Z, V, R As Long
Sub StartStop()
If blnStart = True Then
blnStop = True
Exit Sub
End If
bLap = 0
cntLap = 0
blnStart = True
blnStop = False
dblTimer = Timer
Do Until blnStop = True
Cells(2, 2) = Int((Timer - dblTimer) * 100) / 100
Sleep 1
DoEvents
Loop
blnStart = False
blnStop = False
End Sub
Sub Enter_set1()
'キー割り当て用
Application.OnKey "{ENTER}", "nui" 'テンキーのエンターキーのみ
Application.OnKey "~", "nui" 'キーボードのエンターキーのみ
End Sub
Sub nui()
'X = 18
V = 6
R = Cells(Rows.Count, 1).End(xlUp).Offset(-6, 0).Row - 1
If 2 >= Z Then
Z = 2
If R >= No2 Then
No2 = No2 + 2
Sleep 1
Cells(No2 + 4, Z) = Round(Timer - dblTimer, 2)
Else
Z = Z + 1
No2 = 0
No2 = No2 + 2
Sleep 1
Cells(No2 + 4, Z) = Round(Timer - dblTimer, 2)
End If
Else
If R >= No2 Then
No2 = No2 + 2
Sleep 1
Cells(No2 + 4, Z) = Round(Timer - dblTimer, 2)
Else
Z = Z + 1
No2 = 0
No2 = No2 + 2
Sleep 1
Cells(No2 + 4, Z) = Round(Timer - dblTimer, 2)
End If
End If
End Sub
Sub RIGHT_set1()
'キー割り当て用
Application.OnKey "{RIGHT}", "RGT" 'キーボードのエンターキーのみ
End Sub
Sub RGT()
Z = Z + 1
No2 = 0
No2 = No2 + 2
Sleep 1
Cells(No2 + 4, Z) = Round(Timer - dblTimer, 0)
End Sub
Sub LapSplitClear()
S = 6
F = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row - 2
'F = 25
Do While F >= S
Range(Cells(S, 2), Cells(S, 16)).ClearContents
S = S + 2
Loop
Cells(2, 2) = 0
Z = 0
No2 = 0
End Sub
因みに
ThisWorkbook には下記コードが入ってます
Private Sub Workbook_Open()
Call Enter_set1
Call RIGHT_set1
End Sub
Sheet1(Sheet1) には下記コードが入ってます
Private Sub Worksheet_Activate()
Call Enter_set1
Call RIGHT_set1
End Sub
Private Sub Worksheet_Deactivate()
Application.OnKey "~"
Application.OnKey "RIGHT"
End Sub
No.16ベストアンサー
- 回答日時:
No15です
>たまにですが、セルに値が入らないときがあります。
どの方法に対するコメントなのか不明ですが、No13に対するものであるなら・・・
No13に説明がありますので、調整してみてください。
(キーボードの感知ミスの可能性かもという気もしますが‥)
キータッチにむらがありすぎて調整不能なようであるなら、No14様の方法に切り替えるのも一法と思います。
(まとめてチェックしているのを、個別に行うように変えた方が良いかもです)
No.15
- 回答日時:
No13です
>希望通りの動作になりました!
なんとかなったようですので、よかったです。
勘違いと、見落としが多くて申し訳ありませんでした。
>実際コードを入れてみたのですがセルが移動してしまいます。。
はい、No8から気にはしていましたが、どちらになさりたいのか不明でしたので、そのままにしてあります。
現在のキーだけで良ければ、無効にする方法はNo8に記してあります。
具体的には、ほぼNo2の記述のような内容ですが、No8に記したように「処理をしないサブルーチン」を呼び出すようにしておくのが良いでしょう。
Sub hoge()
End Sub
みたいなものです。
しかしながら、EnterとRightだけ無効にしても、この調子だと次は「Tabきーを←キーを↑キーを・・・」となりそうな気がします。
Onkeyによる方法は対象とするキーの数が少ない間は良いですが、多くなると個々に設定しているのでは面倒になってきます。
ざっと、調べてみたところ、キー入力そのものを無効にすることもできないことも無さそうですが、私にはほとんど知識がない範囲なので、すみませんが、これまでのようにすぐに対応というわけにはいきそうもありません。
また、No11に指摘のある「シートを変えてしまう場合の対応」に関しては、No11とNo12の後半にコードの例とともに示されていますので、そちらを参考になさるのが宜しいと思います。
No14にご提示の方法は、keyUpを確認したら次を受け付けるという方法なので、確認方法としては、時間で測るよりもより確実と言えると思います。
一方で、長押しで連続入力したい場合にどうなるのか不明です。(←確認をしていませんので、私がわからないだけなのですが…)
また、現状だと、両方のキーをほぼ同時に押し下げした場合に、片方の処理しか行われない可能性があるような気がします。(←こちらも未確認なので「気がする」だけですけれど…)
回答ありがとうございます。
いろいろご丁寧にありがとうございます。
本当に助かります。
因みに
Sub StartStop()
If blnStart = True Then
blnStop = True
' キーを無効化
Application.OnKey "{ENTER}"
Application.OnKey "~"
Application.OnKey "RIGHT"
Exit Sub
End If
' キーを有効化
Call Enter_set1
Call RIGHT_set1
上記コードでセル移動の有効/無効は設定できるんですよね?
一回入れてみたのですが、セルが移動してしまいました。。
慌ててやったのでもう一回明日確認してみますが。。。
No.14
- 回答日時:
#12です
既に回答が出ていますので、参考ロジックとして
#12の回答ついでに帰宅してからコードを書き検証しましたが、
使用要件が分からない所もあり確証はないのですが、やはりストップウォッチ機能はVBAでなく他のアプリケーションを作成または参照して連携するようにした方が良いように思います。
または、入力操作をユーザーフォームから行うなどでも代替え出来るかも知れません。
最大の理由はストップウォッチ実行時、登録外のキー入力をした場合、入力モードになりVBAストップウォッチ機能が終了してしまう為です。(良く検証していませんが)仕様に耐えるのであれば良いのですが、、いかがでしょう。
ご質問への回答としての意味合いはありませんが、一応、ここまで書いたのでWindowsのキー反応に依存するコードを書いてみました。
(想像するに1回は1回で止めたいと思いますが、通常のキー反応と同等速度で繰り返し実行されるもです。)
脅かすつもりはありませんが、WindowsAPIは環境依存性があり不安定な事もありますので、不具合発生に備えコピーファイルで保存してから実行し、不具合発生時はタスクマネージャーでExcelを強制終了するなどして下さい。また、開けないなどの不具合が発生した場合は、タスクにインスタンスが残っていないかなど確認の上、該当タスクを強制終了してください。場合によってはOSの再起動を行ってください。OS自体に不具合が発生する場合は、OSのトラブルシューティングなどに従って修復を行ってください。
(WindowsAPIなどを参照しテストする場合の対応方法の一部です)
下記コードでの不具合リスクはかなり低いです。
該当箇所のみ
Option Explicit
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private cnt As Range
Private blnStop As Boolean
Private blnStart As Boolean
Private dblTimer As Double
Private bLap As Double
Private cntLap, No, No2, i, j, k, S, F, X, Z, V, R As Long
Private flag As Boolean
Function PressKey() As Boolean
Const KEY_PRESSED = -32768
PressKey = (GetAsyncKeyState(vbKeyRight) _
Or GetAsyncKeyState(vbKeyReturn) _
Or GetAsyncKeyState(vbKeySeparator) _
And KEY_PRESSED) = KEY_PRESSED
End Function
Sub StartStop()
If blnStart = True Then
blnStop = True
blnStart = False
Exit Sub
End If
dblTimer = Timer
Do Until blnStop = True
Cells(2, 2) = Int((Timer - dblTimer) * 100) / 100
If PressKey = False And flag = True Then flag = False
If GetAsyncKeyState(vbKeyRight) And flag = False Then
Call RGT
flag = True
ElseIf GetAsyncKeyState(vbKeyReturn) And flag = False Or _
GetAsyncKeyState(vbKeySeparator) And flag = False Then
Call nui
flag = True
End If
Sleep 1
DoEvents
Loop
blnStart = False
blnStop = False
End Sub
Application.OnKey設定はしていません。
定数 -32768 を -32767 とすると走ってしまいます。
参考 https://www.tokovalue.jp/function/GetAsyncKeySta …
作成途中と思われますが、深そうですね。全体の要件などを再考する必要があるかも知れませんが、 検討を祈ります。
No.13
- 回答日時:
No10です。
>No11様へ
私の見落としを先見の明で事前にご指摘いただき、考える時間を省くことができています。
ありがとうございます。
さて、本題。
質問者様が調整可能なように、(既に利用している)Timerを用いて一定時間はキーの連続入力をカットする仕組みにしました。
一方で、実際の使い方がわかりませんけれど、メインの表示時間が1/100秒単位なので、どの程度までの正確さを要求されるのかを判断することができませんでした。
下記のコードで、
Const keyWeight = 100
としているのが、ミリ秒単位でのウェイト値です。
前のキー押し下げから、この時間内(=上記の例では0.1秒)での同じキーの押し下げは、一回の押し下げと判断して処理をしないようにしています。
もしも、これが長すぎるようでしたら数値を小さくしてください。
ただし、一回のキー押し下げでこの時間以上かかっていると、別の入力と見做しますので、利用状況に合わせた調整をお願いいたします。
値を長く設定し過ぎると、キーを連打しても1回の入力にカウントされてしまいますので、上記と両方をにらみながら値を決めることになると思います。
仮設定の0.1秒だと、最大で1秒間に10回の連打(実質的にはは7~8回程度か?)まではカウントされることになりますが、多分、ここまでの連打はなさらないのではないかと想像しました。
数値の意味をご理解いただければ、調整しやすいものと思いましたので…
以下に、修正方法を記します。
質問文にご提示のコードの最初の、
>Option Explicit
>Sub StartStop() ~ End Sub
までの部分を、丸ごと以下に置き換えてみてください。
Option Explicit
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private cnt As Range
Private blnStop As Boolean
Private blnStart As Boolean
Private dblTimer As Double
Private bLap As Double
Private cntLap, No, No2, i, j, k, S, F, X, Z, V, R As Long
Private keyTimer(0 To 1) As Double
Sub StartStop()
If blnStart = True Then
blnStop = True
Exit Sub
End If
bLap = 0
cntLap = 0
blnStart = True
blnStop = False
dblTimer = Timer
Do Until blnStop = True
Cells(2, 2) = Int((Timer - dblTimer) * 100) / 100
Sleep 1
If GetAsyncKeyState(vbKeyRight) Then Call keyControl(0)
If GetAsyncKeyState(vbKeyReturn) Or _
GetAsyncKeyState(vbKeySeparator) Then Call keyControl(1)
DoEvents
Loop
blnStart = False
blnStop = False
End Sub
Sub keyControl(ByRef n As Long)
Dim dt As Double
Const keyWeight = 100 '←キーの感度をこの値で調節
dt = Timer - keyTimer(n)
If dt < 0 Then dt = dt + 86400
If dt < keyWeight / 1000 Then Exit Sub
keyTimer(n) = Timer
If n = 0 Then Call RGT Else Call nui
End Sub
※ キー別に時間を記録しなくても大丈夫とは思いましたが、今回はどうも失敗が多いので、念のため個別に記録する方式にしておきました。
※ No11にご指摘のある、本来のキー機能を停止させる件については、No8でも言及したところですが、要/不要の判断がこちらではつきませんので、上記のコードではキー機能はそのままの状態にしてあります。
(実質はセル移動だけなので、↑や←キーで戻せるとも思いますので…)
※ もう一つ、No11でご指摘のある、StartStop実行中にシートを移動する件については対応していません。
ごもっともなご指摘ですので、ご留意ください。
回答ありがとうございます!
希望通りの動作になりました!
ありがとうございます!
セルの移動はやめたいのですがNo6のやり方では不可能でしょうか?実際コードを入れてみたのですがセルが移動してしまいます。。
すみませんが教えて下さい。
No.12
- 回答日時:
>Call myStopとCall StartStopが必要ということでいいんでしょうか?
因みにですがstartstopボタンでカウントスタートしカウント中にENTERキーとrightキーを押すとセルに書き込まれ、またstartstopボタンを押すとカウントストップする。という動作で間違いないでしょうか。
はい、そのような動作になります。あくまでmyStopは、シートがアクティブでなくなった時、startstopボタンをstopの目的で押したのと同じ事になります。stopの状態の時は、、あ これも必要ですね(ボタン効かなくなるかも)
Sub StartStop()
If blnStart = True Then
blnStop = True
blnStart = False 'これ
Exit Sub
End If
・
・
蛇足ですが、Application.OnKeyについて
セットはプロシージャがありますがリセットも作成してはいかがでしょう。
名前は違いますが、
Sub Key_SET()
'キー割り当て用
Application.OnKey "~", ""
Application.OnKey "{RIGHT}", ""
Application.OnKey "{ENTER}", ""
End Sub
Sub KEY_RESET()
Application.OnKey "~"
Application.OnKey "{RIGHT}"
Application.OnKey "{ENTER}"
End Sub
使う場所
Sub StartStop()
Call Key_SET
If blnStart = True Then
blnStop = True
blnStart = False
Call KEY_RESET
Exit Sub
End If
・
・
・
Call KEY_RESET
End Sub
Private Sub Worksheet_Deactivate()
Call myStop
(Application.OnKey "~" Application.OnKey "{RIGHT}"は、上記により不要になります)
End Sub
念のためThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call KEY_RESET
End Sub
すでに回答にあるように、時間観測中だけなら、
_Open、_ActivateにはCall Key_SETはいらないかと。。
スレッドの表題と違う内容の回答なので参考まで。。
また長くなってしまいました。
No.11
- 回答日時:
質問者様、fujillin様
fujillin様の回答を待つ状況ですが、失礼します。
自身の回答(アドバイス)に間違いがある事に気が付きましたので、訂正をいたします。すみません。
#9 Application.OnKeyを設定する必要もなくなり良いかと思います。
これは、GetAsyncKeyStateを使用してもRIGHTキーやENTERキーの性質上選択セルが移動してしまうため、必要になります。Offsetなどで代替えする場合シートオプションの移動設定による不具合の可能性があります。
なので、Enter_set1、RIGHT_set1 などか #3にあるように無効化する必要があります。
#9での 既に代替え案があるのでサンプルコードは割愛します。
については、やはり、考えを示しておきます。(気になってしまいました)
ご質問と関係のない事柄なので読み飛ばして頂いてかまいません。
ご掲示のコード
Private Sub Worksheet_Deactivate()
Application.OnKey "~"
Application.OnKey "RIGHT"
End Sub
とありますが、タイマーカウントが実行されている場合、
アクティブになったシートB2セルで表示(書き込み)されてしまうのではないかと思います。
単純に止める為、下記のようにすると
Private Sub Worksheet_Deactivate()
Call StartStop ’呼び出し実行
Application.OnKey "~"
Application.OnKey "{RIGHT}"
End Sub
実行されている時は期待通りになると思いますが、タイマーカウントを実行していない時にシート移動をした時にアクティブになったシートB2セルでタイマーカウントが実行が始まってしまいます。
従って、フラグの設定で止める方法が必要になると思いました。
(#7の回答文)
一例としては、Stop用のプロシージャを加えます。(標準モジュール)
Sub myStop() '強制ストップ
blnStart = True
Call StartStop
End Sub
blnStartフラグを設定して(実行中フラグ)StartStopをコールします。
シートモジュールのWorksheet_Deactivateは
Private Sub Worksheet_Deactivate()
Call myStop
Application.OnKey "~"
Application.OnKey "{RIGHT}"
Application.OnKey "{ENTER}"
End Sub
もっとも、カウントを止めたくないのであれば、エラー対策をして
Cells(2, 2) = Int((Timer - dblTimer) * 100) / 100 部分に手を加える必要があると思います。(これはまた別の話)
横から失礼して関係ない所を色々すみません。 参考まで
回答ありがとうございます!
いえいえ!ご丁寧に。本当に助かります!
ありがとうございます!
シートモジュールには
Call myStopとCall StartStopが必要ということでいいんでしょうか?
因みにですがstartstopボタンでカウントスタートしカウント中にENTERキーとrightキーを押すとセルに書き込まれ、またstartstopボタンを押すとカウントストップする。という動作で間違いないでしょうか。
教えていただけるとありがたいです。
お願いします
No.10
- 回答日時:
No8です
>3~4回分、一気に値が入ってしまいました。何か問題があるのでしょうか?
>すみませんが教えて下さい。
う~~ん。
No9様がすでにご指摘なさっている通りのことが起きていると思われますね。
Loopの中で重みを付けて、GetAsyncKeyStateを呼び出すタイミングを減らすとかすれば良いのでしょうかね。
でも、それだと感知機能そのものが落ちてしまうので、キーの検出だけはしておいて、処理ルーチンを呼び出すタイミングを調整した方が良さそうですね・・・
なんとなくのアイデアは思いつきましたが、今日は時間がないので、帰ってからやってみます。
No.9
- 回答日時:
#5#7です。
>Worksheet_Deactivateには、フラグ判別で処理とはどのような処理でしょうか?
Sub StartStop()でblnStartフラグにより制御されていて、Application.OnKeyで入力キーを設定している場合、他のシートを選択した場合などにApplication.OnKeyを戻す必要があるかなと考えました。(Stopをしなかった場合)
既に代替え案があるのでサンプルコードは割愛します。
>理解できないところが多々あり
すみません。
おそらくDo~Loop処理が原因であるなら、このLoop処理を他のプログラムで実行させ VBAからは、他のプログラムの起動、終了などだけを行えば、Do~Loopが不要になるのではと考えました。例で javascript としたのは、タイマーなどのソースコードは簡単に見つけられると思うのとシートにブラウザを(カウント表示の為)埋め込めたという記憶があった為です。
#8さんの回答にあるように、Do~Loop内から実行コードを呼び出せば、上記の問題はなくなります。
すでにSleep Lib WindowsAPIも使用しているようですし、GetAsyncKeyState Libをループ内で使用した方が、Application.OnKeyを設定する必要もなくなり良いかと思います。
少し気になるのは、全く実行コードを検証していないので不確かではありますが、VBAは遅いと言ってもループ、Call先プロシージャは高速と思います。
確かキーを押し続けてもGetAsyncKeyStateはtrueが返ってくるのでは、、なので複数回、Callが行われるのではないでしょうか、もしそうであれば、
GetAsyncKeyState True>>False で Falseになるような追加フラグが必要な気がします。
No.8
- 回答日時:
No6です
何度も勘違いしまして、大変失礼いたしました。
OnTimeはNo7様の指摘にもあるように1秒単位なのですが、ご提示のタイマーは1/100秒単位で表示しようとしていますので、確かに若干問題があるかもしれないのですが…
試しに1秒単位で実行してみると、キーの制御も可能になりました。
そこで、0秒にして連続実行してみると、タイマーは1/100秒で動作するようになりますが、キーの割り込みを受け付けなくなり、ほぼ暴走状態になってしまいました。(汗)
(ということで、↑失敗でした!)
仕方がないので、ご提示とは別の方法になってしまいますが、キーを直接監視する方法に切り替えてみました。
すこしややこしいですが、以下の手順でお試しください。
1)コードの最初の
>Option Explicit
の後に以下の1行を追加します。
(質問者様の環境は64ビット環境と推測して、書いております)
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer
2)ご質問文に最初にご提示の StartStop()のままのものに、以下のコードを追加します。
>DoEvents
>Loop
の間に2センテンス(改行しているので3行分)を追加します。
DoEvents
If GetAsyncKeyState(vbKeyRight) Then Call RGT
If GetAsyncKeyState(vbKeyReturn) Or _
GetAsyncKeyState(vbKeySeparator) Then Call nui
Loop
以上で、ご質問の内容を実現できると思います。
(今回は実行確認しておりますので、多分、大丈夫だと思います。)
※ vbKeySeparatorはテンキーの側のEnterキーということになっていますが、私のキーボードではこちらもvbKeyReturnだったので、もしかすると不要かもしれませんが、一応、入れてあります。
※ 直接にキーを監視する方式に変えてしまったので、ご提示のOnkeyによる変更等は不要になります。
ご提示のうちの、
Private Sub Workbook_Open() ~ End Sub
Private Sub Worksheet_Activate() ~ End Sub
Private Sub Worksheet_Deactivate() ~ End Sub
Sub Enter_set1() ~ End Sub
Sub RIGHT_set1() ~ End Sub
が不要になるという意味です。
(下の二つは残しておいても、呼び出されないだけなので、問題はありません。)
ただし、Onkeyの切り替えではキー操作が無効になっていたと思いますが、上記の方法ではキー操作は無効になりません。(例えば、「→」キーを押すと、選択セルが右に移動します)
それで問題なければ、そのままで宜しいと思います。
※ もしも、実行中に「→」キーなどだけは無反応(=本来のセル移動をしなくするという意味)にしたければ、No2の方法でOn、Offしてあげれば可能ですが、有効化の際に「何もしないサブルーチン」を呼び出すように変えておいたほうが無難です。
(キー操作による移動をしなくするだけなので…)
なお、お恥ずかしながら、No2にもタイポがありましたので、併せて訂正しておきます。
誤:Application.OnKey "RIGHT"
↓ ↓
正:Application.OnKey "{RIGHT}"
回答ありがとうございます!
コード入れて動作確認しましたが
実行中だけ有効になっていました!
しかしENTERキー rightキーを押すと
3~4回分、一気に値が入ってしまいました。何か問題があるのでしょうか?
すみませんが教えて下さい。
No.7
- 回答日時:
#5です
コードを読んだだけですので試していませんが、
Application.OnKeyでキー操作を設定していますが
Application.OnKey "{RIGHT}", "RGT"の場合、RIGHTでRGTプロシージャを実行しなさいと言う命令です。
すでにマクロが実行中の場合、VBEで実行ボタンがグレイアウトしている状態では、他のプロシージャを実行できないと思います。
blnStartフラグを利用して解除というのは、#4さんの回答を参考に出来るのではと思いました。
例えば
Do Until blnStop = True
Cells(2, 2) = Int((Timer - dblTimer) * 100) / 100
Sleep 1
DoEvents
Loop
を
if blnStop = True then
Cells(2, 2) ="カウント中"
Call Enter_set1
Call RIGHT_set1
else
Cells(2, 2) ="待機中"
Application.OnKey "~"
Application.OnKey "RIGHT"
end if
とすれば、待機中のキー操作はデフォルトに戻っているのではと
Workbook_Openは必要ないかもしれませんが、Worksheet_Deactivateには、フラグ判別で処理を入れた方が良いと思います。
ちなみに、カウント中であってもキー操作の処理は行われていると思います
nui、RGTプロシージャが実行できないだけと思いますが、いかがでしょう
ちょっと複雑なので確認していませんが、 blnStart、blnStop フラグの設定、判別が、、すっきり分かりませんので申し訳ないです。
#5の
>(例えば、javascriptでタイマーを作成しておきVBAから呼び出し表示、終了など)
2013あたりのExcelからシート上にWebBrowserオブジェクトを挿入できなくなったので代替え案としては不十分です
OnTimeに関しては1秒単位だったと記憶していますので表示的にどうかと言う疑問と表示するためにはやはり書き込む(更新)必要が出るのではないでしょうか。ステータスバー表示でも同様?
自分でもようわからんこと書き始めてしまいましたので、、参考まで
回答ありがとうございます!
Worksheet_Deactivateには、フラグ判別で処理とはどのような処理でしょうか?
自分が#5さんほど詳しくないので
理解できないところが多々あり
すみません。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Excelにて、ユーザーフォームで作成したテンキーの、表示している数字を セルに転記したい
Yahoo!ショッピング
-
エクセルの画面にユーザーフォームでテンキーを表示させたい
Excel(エクセル)
-
【タブレットPC】フォーム画面にキーボードを作成して入力したい
Access(アクセス)
-
-
4
エクセルVBA フォーム上でOnkeyがうまく出来ない
Excel(エクセル)
-
5
Excel VBAでスクリーンキーボードを起動
Excel(エクセル)
-
6
EXCEL VBAでテンキーコントロールはないの
Excel(エクセル)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
ユーザーフォームのテキストボックスにテンキーの小数点が入力できない
Microsoft ASP
-
9
フォントの大きさ
Visual Basic(VBA)
-
10
コマンドボタンがあるかどうかを取得するには?
PowerPoint(パワーポイント)
-
11
エクセル NUMLOCKキーの常時オンについて
その他(Microsoft Office)
-
12
キーボードの数字キー及びテンキーを無効にするマクロ
Excel(エクセル)
-
13
エクセルVBAでNumLockキーの状態を確認する
Excel(エクセル)
-
14
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスの入力文字を1...
-
タブキー押下時のイベントをひ...
-
一定時間操作されないと自動で...
-
エクセルVBAのテキストボック、...
-
WPFでの時刻入力コントロールに...
-
Visual Basic 6.0 コンボボック...
-
特定のキーを押すまでループさ...
-
VB6で電卓を作っているのですが...
-
C# DateTimePicker をキー入力...
-
(VBA)チェックボックスのclick...
-
コマンドボタン(入力)をクリッ...
-
IEで、BackSpaceで「戻る」機能...
-
キーバッファについての質問
-
【VB】タブ切り替え時のイベント
-
Access データ表示 完了時のイ...
-
コンボボックスにキー入力をさ...
-
プログラミングc# Windowsフォ...
-
onchangeでイベントが発生しません
-
VBでイベント処理を追加する...
-
キーイベントを擬似的に発生さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB】タブ切り替え時のイベント
-
タブキー押下時のイベントをひ...
-
特定のキーを押すまでループさ...
-
(VBA)チェックボックスのclick...
-
WPFでの時刻入力コントロールに...
-
Visual Basic 6.0 コンボボック...
-
一定時間操作されないと自動で...
-
コンボボックスにキー入力をさ...
-
Excel VBA マクロ実行中のみテンキ...
-
VB.NETのDropDownListをReadOnl...
-
フォーカスについてお教えください
-
キーイベントを擬似的に発生さ...
-
IEで、BackSpaceで「戻る」機能...
-
エクセルVBAのテキストボック、...
-
VB.NETでフォームがない...
-
KEYPREVIEW=TRUEについて。意味...
-
EXCEL VBA でIEを制御して、INP...
-
自作ダイアログボックス中のエ...
-
テキストボックスの入力文字を1...
-
Objective-Cでキーボードイベン...
おすすめ情報
No1さん
すいません。
STOPが効かないのは自分が不手際でした。
たまにですが、セルに値が入らないときがあります。エンターキーなどは反応していると思われますが。。