- ベストアンサー
システムの時刻を利用しながら800ミリ秒毎のイベント発生
freemankの回答
- freemank
- ベストアンサー率75% (3/4)
VBだとTimerがあり問題ないのだけど、VBAなのですね! 時間があれば作ろうと思っていたので、作ってみました。 精度がどれほどのものかわかりませんが参考にしてみて下さい。 ボタン2つにテキスト3つの画面で作ってあります。 Dim miEnd As Integer □□開始ボタンのクリック□□ Private Sub CommandButton1_Click() 'フラグの初期化 miEnd = False 'ループ開始 Call LoopSub End Sub □□終了ボタンクリック□□ Private Sub CommandButton2_Click() 'ループ終了指定 miEnd = True End Sub □□メインループ□□ Private Sub LoopSub() Dim lSCount1 As Long Dim lSCount2 As Long Dim lECount1 As Long Dim lECount2 As Long Dim lMiri As Long Dim sSTime As String '指定ミリ秒の取得 lMiri = Val(TextBox1.Text) '比較秒の取得 sSTime = Format(Now, "SS") '初期化 lSCount1 = 0: lSCount2 = 0 lECount1 = 0: lECount2 = 37000 Do '1秒にかかるカウント集計(毎秒数値を確認) lSCount1 = lSCount1 + 1 If sSTime <> Format(Now, "SS") Then sSTime = Format(Now, "SS") lSCount2 = lSCount1 lSCount1 = 0 End If 'ミリ秒 lECount1 = lECount1 + 1 If lECount1 > lECount2 Then lECount1 = 0 '指定ミリ秒に相当するカウント数を毎回算出 lECount2 = Int(lSCount2 / 1000 * lMiri) □□イベントの記述□□ TextBox2.Text = lSCount2 TextBox3.Text = lECount2 □□□□□□□□□□□ End If 'ループ脱出処理(無限ループに注意) DoEvents If miEnd = True Then Exit Do Loop End Sub 処理中の誤差が少しでも少なくなるように 毎秒算出し、ヒットの度に再計算させてあります。 あと無限ループには充分ご注意ください。 長々とすんません…頑張ってください。
関連するQ&A
- ミリ秒を○時間○分○秒にしたい
http://www.excellenceweb.net/vba/api/what_windows_api.html のページを参考にPC起動時間を取得したいのですが サンプルは単位がミリ秒になっています。 -------------------------------------------------- Declare Function GetTickCount Lib "kernel32.dll" () As Long Sub TEST1() Dim Tickcount As Long 'GetTickCount関数から、起動からの時間が返される Tickcount = GetTickCount() MsgBox "PC起動から " & Tickcount & " ミリ秒経過しています" End Sub -------------------------------------------------- ○時間○分○秒にしたいのですが どうすればいいでしょうか? Formatを使うと思うのですが どういうコードを書けばいいのかわかりません。 ご教授よろしくお願いします。
- ベストアンサー
- Visual Basic
- 現在時刻をミリ秒まで取得
お疲れ様です 現在時刻をミリ秒まで取得がしたいです。 今はtime_tを使って秒までは取得したのですがミリ秒は構造体にないらしく同じようにとってはこれないのでしょうか? また別のやり方だとどんなのがあるか教えてください。 現在は下記のように取得してyyyymmddhhmmssの形を作ってます。 これをyyyymmddhhmmsssssのようにミリ秒を増やしたたいのです。 長くなってしまいましたがよろしくお願いします time_t timer; time(&timer);/* 現在の時刻を取得 */ struct tm *local; local =localtime(&timer);/* 地方時の構造体に変換 */ CString time; //CString用の時間 time.Format("%4d%02d%02d%02d%02d%02d" ,local->tm_year + 1900,/* 年 */ local->tm_mon+1,/*月は0から始まるので1を+*/ local->tm_mday,/* 日 */ local->tm_hour,/* 時 */ local->tm_min,/* 分 */ local->tm_sec);/* 秒 */
- 締切済み
- C・C++・C#
- VBAから変更した時だけイベントを発生させない方法
Excel VBA で、コンボボックスの選択をユーザーが変更した時はイベントハンドラが呼び出されて処理をしていますが、VBAのコードからコンボボックスの選択を変更した時には、このイベントハンドラが呼び出されないようにしたいのですが、どのように記述すればよいでしょうか。 例えば、下記のコードの (A) の部分で、VBAのコードからコンボボックスの選択を変更していますが、ここでイベントが発生しないようにしたいのですが、Application.EnableEvents = False を記述してもイベントが発生していますがなぜでしょうか。どのように記述すれば (A) の部分でイベントが発生しなくなりますでしょうか。 よろしくお願いします。(Windows7 , Excel2010 ) ---Module1---------- Option Explicit Sub main() UserForm1.Show End Sub ---UserForm1-------- Option Explicit Private Sub UserForm_Initialize() Dim i As Integer ComboBox1.Style = fmStyleDropDownList For i = 1 To 30 ComboBox1.AddItem Format(i, "00") Next i End Sub Private Sub CommandButton1_Click() Dim num As Integer Dim index As Integer num = ComboBox1.ListCount index = ComboBox1.ListIndex If index = num - 1 Then Application.EnableEvents = False ComboBox1.ListIndex = -1 '<----------(A) Application.EnableEvents = True Else ComboBox1.ListIndex = index + 1 End If End Sub Private Sub ComboBox1_Change() MsgBox ("ComboBox1_Changeイベント発生") End Sub ------------------------------------
- ベストアンサー
- Excel(エクセル)
- 「システム時刻の同期は とれていません」のイベントの警告が記録されます。
イベントの種類: 警告 イベント ソース: W32Time イベント カテゴリ: なし イベント ID: 36 日付: 2005/2/7 時刻: 20:44:06 ユーザー: N/A コンピュータ: *** 説明: タイム プロバイダが使用可能なタイム スタンプを提供できていないため、 システム時刻を 49152 秒同期することができません。システム時刻の同期は とれていません。 このようなイベントの警告ログが記録されます。これは一体どういう事なのでしょうか?何かシステムに不具合があるのでしょうか? PCはNECのVALUESTAR WinXP SP2です。
- ベストアンサー
- Windows XP
- エクセル: Changeイベントが発生しないのはなぜ?
エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 エクセルのセル に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのですがセルをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセル: Changeイベントが発生しないのはなぜ?
エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 セル"A1" に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのでセルにをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。
- 締切済み
- Windows XP
- VBA:Callステートメントでいつでもイベント発生可能な準備をしたい。
タイトルどおり、Callステートメントでいつでもイベント発生可能な準備ができるようにしたいと考えています。しかし、Sub 実行準備SUBでエラーが出ています。どこをどう直せばよいのか教えて頂きたいです。 Private Sub Auto_Open() MsgBox "Ctrl + t でイベント実行準備を行います。" Application.OnKey "^{t}", "実行準備SUB" End Sub '--------------------------------------------------- Sub 実行準備SUB() Dim Target As Range Target = Range(Cells(1, 1), Cells(100, 100)) Call Worksheet_Change(ByVal Target) End Sub '--------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range For Each r In Target If r.Column = 2 Then r.Offset(0, -1).Value = Now End If Next r End Sub イベントは、シートの2列目のセルに変更があれば、1列目に日付時刻を記入するというものです。宜しくお願い致します。
- ベストアンサー
- Visual Basic
- VB2005でのミリ秒の取得について(Mobile)
お世話になります。 現在、Windows Mobile5.0 向けのアプリケーションを VB2005で作成しています。 アプリケーションの各処理の処理時間を細かく知りたいと思い、 ログに処理時間をミリ秒まで出力しようとしています。 Dim dtNow As DateTime = DateTime.Now outputStr = "[" & dtNow.ToString("yyyy/MM/dd HH:mm:ss") & dtNow.Millisecond.ToString & "]" と記述したのですが、ミリ秒の部分が 0 しか返しません。 普通のWindowsアプリケーションの場合だと上記記述で取得できるのですが、 Mobile5.0/ .NET CF2.0 では異なるのでしょうか? ご存じの方、教えてください。
- ベストアンサー
- Visual Basic
- VBのEVENT発生とCONTROLの有効範囲
visual basicのeventとcontrolについての質問です。 初心者で苦労しています。以下のようなcodeingをしましたが上手く行きません。宜しくお願いします。 1.下記のcall updatefileによりupdatefile内でcombobox内のdataを設定します。これは次のdialogで 設定どおりに出ています。しかし元のsub startdialog1に帰ってdialogを表示してみるとcombobox 内は空となっています。 subroutineが変わるとformの controlは消えるのでしょうか。 もしそうならどの様にすれば良いのでしょうか。 (pushdata変数等をpublicとして再度comboに入れることもやりましたがNG) 2.STARTDIALOG1の初めに RADIO BUTTONの変更のCODEが有りますが、此処でEVENTが 発生しUPDATEFILEに行きます。 DIALOGを出すまでは初期値を設定しDIALOG上でCLICK等して変更をするCODEなので 不具合です。 (ほかにもいろいろ同じCODEが入っていますので) CODE上の設定変更はEVENTが発生しないように、DIALOGからの変更はEVENT発生としたい のですがどの様にしたら良いでしょうか。(普通そうなので何か勘違いしてるかも) INTERNETで見るとAddHandler,AddressOf,REmoveHandlerなどが記載されていますが、 書き方と何処に書くのか判りません。(本当に必要かも?) よろしくお願いします。 (以下のcodeは読みやすいように簡略化しています、code errorは大目に見て下さい。 ---------------------Form1.vbに記載--------------------------------------- Sub STARTDIALOG1() '此処から処理が始まる with cform2 as Fform2 .Radio_btn1.Checked = True ’ここへくるとbuttonのeventが発生,routineにいき,updatefileへいく Call UpdatePfile(1) 'ここはcomboboxの初期値を設定する(UPDATEPFILEを使う) .ShowDialog() ’UpdatateFileでは入っていたがCOMOBOXの中は空になっている この後comboboxのdataの選択などをdialogue上で設定値を変更する。 end with end sub -----------------------form1.vbに記載---------------------------------- sub UpdatePfile(ByVal cntlNO) 'PushDataはこの前にREADして設定している、keがそのDATAの個数 For k = 1 To ke cForm2.Combo_P.Items.Add(pushdata(k)) ’COMBOBOX Comb_Pに一覧として入れる Next k cForm2.ShowDialog() 'ここではCOMBOBOXにPUSHDATAが入ったLISTがでる end sub --------------------------------------------------------------------------- DisalogはForm2に作成 radioボタン Radio_btn1とRadio_btn2,combobox combo_P等をsetしている '---------------------------Form2.vbに記載------------------------------------ Private Sub push_button(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Radio_BTN1.CheckedChanged,Radio_BTN2.CheckChanged Dim cls As Form1 RDBTN = 1 If RDBTN > 0 Then Call cls.UpdatePfile(RDBTN) end Sub
- ベストアンサー
- Visual Basic
- clock_gettimeでミリ秒の時間差分の取得
Linux(CentOS)、C言語で2点の時間の差分をclock_gettimeでミリ秒単位で取得したいと考えています。 マニュアルを参照しましたが、 引数のtimespecの構造と単位が理解できませんでした。 できれば、サンプルコードをつけて教えていただけないでしょうか? よろしくお願い致します。
- 締切済み
- C・C++・C#
お礼
今回がはじめてのプログラミングであり、 VBAの基本がわかっていないことに気づきました。 Excelのツール→マクロ→Visual Basic Editor→ 標準モジュールを追加→上記のコードをコピペ→ 「□」の行の頭へコメント化のために「'」をつけたり、 Sub毎に標準モジュールに別々にコピペしたり、 試行錯誤しておりました(汗) まだ出来ておりませんが、なんとかやってみせます。 ご回答、ありがとうございました。