[[20150321163237]] 『エラー回避』(ちぃさん) ページの最後に飛ぶ

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

 

『エラー回避』(ちぃさん)

いつもお世話になります。

[[20150308172244]]
コチラでの追加質問となります。

宜しくお願いします。

ご教授くださったマクロコードで私が別に追加したコードを動作させるとエラーがでる事に気づきどのように対応すればいいのかわかないので教えて頂きたいです。

1.私が別に追加したコードというのは必要部分以外を消去させる単純なものです。
 
Sheet1

 __A__ ____B____ ____C____ __D__ ____E____ ____F____ ____G____ ____H____ _____I_____
1                                            日時      合計  美装時間  繰越し
2                                              1           1       11:30  1000
3
4
5
6         1日    9:00           エクセル   aa          100
7          1日      9:15
8          1日      9:30
〜
16         1日      11:30     美装
17         1日      11:45
18         1日      12:00          エクセル      ab           1
19         1日      12:15
〜
100        1日       8:45
101        2日       9:00
102        2日       9:15
.           .         .
.           .         .

E6:G3000までが一括消去できるように
標準モジュールへ

Sub クリアー()
Range("E6:E3000") = ""
End Sub

と記述しボタンで操作する仕組みとなっています。

2.コードを動作させるとエラーがでる というのは
 1で説明しましたコードを動作させると
  「実行エラー1004

      Undoメソッドは失敗しました'Application'オブジェクト」

と出ます。

止まっている所は

  Application.Undo '変更後->変更前 あるいは 変更前->変更後
  この部分です。

どしても対応方法がわからず
現在は

    '入力された値をチェックし、処理必要な文字列かどうかを判定。

    On Error Resume Next
    '~~~~~~~~~~~~~~~~~~~
    '↑↑↑追加↑↑↑

    For x = 1 To 2  '変更前と変更後の状態をチェック
        Application.Undo    '変更後->変更前 あるいは 変更前->変更後
        For Each c In changeR.Cells
            z = Application.Match(c.Value, myTxt, 0)
            If IsNumeric(z) Then todoFlag(z - 1) = True
        Next
    Next

このようにしエラーを無視するようにしているのですが今後トラブル原因となりますでしょうか?
他に何か手がありましたら教えていただけないでしょうか。

どうか宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


https://msdn.microsoft.com/ja-jp/library/office/ff838189.aspx
 マクロを実行すると Undo情報はクリアされるので、それを把握した上でコード化する必要が
 あるかと思います。
(Mook) 2015/03/21(土) 17:06

 >このようにしエラーを無視するようにしているのですが今後トラブル原因となりますでしょうか? 
 >他に何か手がありましたら教えていただけないでしょうか。

 Mookさんから回答があるように、マクロで入力イベントの対象領域であるE列を変更した場合、
 Undo はきかなくなります。

 通常は、意図的にマクロで、対象領域を触る場合は、イベントを発生させないようにします。
 ただ、本件の場合 E列をすべてクリアするということは F2:I4 もクリアしなきゃいけませんね。

 以下のようにしてください。

 Sub クリアー()
    Application.EnableEvents = False    'イベント発生抑止
    Range("E6:E3000").ClearContents
    Range("F2:I4").ClearContents
    Application.EnableEvents = True     'イベント発生再開
 End Sub

 ★それと、Sheet2の記入セルもクリアしなきゃいけないのかな?
   Sheet2については、よくわからないので、そちらで判断してください。

(β) 2015/03/21(土) 17:23


(Mook)さん (β)さん ありがとうございます。

またまたお助け頂きましてありがとうございます。

Application.EnableEvents
覚えておきます。

ありがとうございました。
(ちぃさん) 2015/03/21(土) 19:17


コメント返信:

[ 一覧(最新更新順) ]


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