[[20190617160053]] 『MsgBoxが出た時、別シートに履歴を残したい。』(haru) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『MsgBoxが出た時、別シートに履歴を残したい。』(haru)

マクロで、入力規則的なことをしているのですが、

Sheets("Sheet2").Range("A1:A10").Validation.Add Type:=xlValidateDecimal, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="100", Formula2:="200"
Sheets("Sheet2").Range("A1:A10").Validation.ErrorTitle = "数値エラー"
Sheets("Sheet2").Range("A1:A10").Validation.ErrorMessage = "数値を確認。"

メッセージMOXが出た時に、別シートに履歴を残したいです。
日・時間・シート名を残すように。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 マクロで入力規則のポップアップイベントを取得出来るのかどうかは
 調べていませんが、マクロを使うなら単純にMsgboxと条件文の併用で
 行った方が履歴は取りやすいのでは無いでしょうか。外してましたら
 お許しを、お詳しい方の回答もお待ちくださいね。(^^;。。でわ
(隠居じーさん) 2019/06/17(月) 18:34

 > マクロで入力規則のポップアップイベントを取得出来るのかどうかは
 >調べていませんが

 ポップアップイベントって・・・?だらだらリストが表示された状態?
 単純にチェンジイベントでは。
(BJ) 2019/06/17(月) 20:33

 こんばんは ^^ すみません。 
ポップアップイベントなんて言葉は無いのかもしれません^^;
警告のアラート(Msgbox?)が出ますので。それを取得することは
可能なのかなぁと思っただけでして。
m(_ _)m
(隠居じーさん) 2019/06/17(月) 21:08

 これで、数字以外を入れた時と同じで取れないと思います。
 a = Application.InputBox("数字のみ", Type:=1)
(BJ) 2019/06/17(月) 21:50

 はい。ありがとうございました。m(_ _)m
 >>単純にチェンジイベントでは。
 の通りかと思います。
(隠居じーさん) 2019/06/17(月) 22:15

マクロで、入力規則的なことをしている…、のではなく、入力規則を設定するマクロじゃないですか。 入力規則だとExcelがエラー判定してしまうので、ログを出力するタイミングなんて取れません。

なので、入力規則は全部解除し、Worksheet_Changeイベント時とかで、セル毎にマクロで上下判定するように変えないと駄目でしょうね。 自分でエラー判定するなら、ログ出力は簡単でしょう。
(???) 2019/06/18(火) 09:57


隠居じーさん・BJさん・???さん回答ありがとうございます。
入力規則での履歴を残すのは無理そうですね。
Worksheet_Changeでできるか考えます。
ログ出力も難しそうですね。
やり方などご教示してもらえればうれしいです。
(haru) 2019/06/18(火) 10:52

 Sheet1 ← ログ出力(初期化される、こともある ←多分、テストしてません。 ^^;
 Sheet2  ← 入力シート(A1〜A10、対象)
 もっとスマートな方法がきっとあるとは思いますが。。。一案です。。。でわ m(_ _)m

 Sheet2モジュールへコピペ

 Option Explicit
 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.CountLarge > 1 Then Exit Sub
    If Intersect(Target, Me.Range("A1:A10")) Is Nothing Then Exit Sub
    If IsEmpty(Target) Then Exit Sub
     Application.EnableEvents = False
        If Target.Value > 200 Or Target.Value < 100 Or Not IsNumeric(Target.Value) Then
            MsgBox "数値が違います", vbCritical + vbDefaultButton1, "数値エラー"
            With Worksheets("Sheet1")
                If WorksheetFunction.CountA(.Rows(1)) = 0 Then
                    .Cells(1).Resize(, 4) = Array("入力日時", "シート名", "入力値", "入力値先頭ユニコード")
                End If
                .Range("A2:D2").Insert xlDown
                .Cells(2, 1) = Format(Now(), "yyyy/mm/dd - hh:mm:ss")
                .Cells(2, 2) = Me.Name
                .Cells(2, 3) = Target.Value
                .Cells(2, 4) = WorksheetFunction.Unicode(Target.Value)
                If .Cells(.Rows.Count, 1).End(xlUp).Row > 100000 Then
                    MsgBox "ログの書込みスペースが不足しています初期化します"
                    .Range(.Rows(3), .Rows(.Cells(.Rows.Count, 1).End(xlUp).Row)).Delete
                End If
                Target = Empty
                Target.Activate
            End With
        End If
    Application.EnableEvents = True
End Sub
(隠居じーさん) 2019/06/18(火) 12:37

隠居じーさん連絡が遅くなりすいません。
大変勉強になりました。
動作も問題ないようです。
すごく助かりました。ありがとうございます。

(haru) 2019/06/20(木) 09:41


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.