advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 85 for VBA 強制終了 (0.004 sec.)
vba (14725), 強制終了 (237)
[[20110921153504]]
#score: 16176
@digest: 6e27073a08eb122a8f95f389c789b5b0
@id: 56028
@mdate: 2011-09-25T12:19:48Z
@size: 5378
@type: text/plain
#keywords: myerrorhandler (15241), 部保 (10312), 行di (5705), ・第 (5664), 定シ (4783), トラ (3953), 保護 (3004), error (2836), userinterfaceonly (2642), ラッ (2620), 推奨 (2604), shn (2550), resume (2316), 感心 (2252), sample2 (2170), 、on (2076), 護が (1944), sample1 (1874), ップ (1536), 不都 (1462), clearcontents (1431), エラ (1289), ト保 (1272), ラー (1202), officetanaka (1035), 護を (1031), 有無 (1023), ケー (923), 授願 (904), 都合 (888), ート (883), 回避 (792)
『マクロの複数シート適応』(かじころ)
よろしくお願いします。 このマクロを記述したのですが、これを4つのシートからなるブックで シート2からシート4まで実行したいのです。 Sub test() On Error Resume Next Cells.Value = Empty End Sub Arrayを使ってやってみたのですが、EXCEL強制終了になってしまいます。 良い方法がありましたらご教授願います。 WINXP EXCEL2003 ---- 以下のSample2がArrayを使った案 Sub Sample1() '特定シート「以外」実行 Dim sh As Worksheet For Each sh In Worksheets If Not sh Is Sheets("Sheet1") Then sh.Cells.ClearContents Next End Sub Sub Sample2() '指定シートのみ実行 Dim shn As Variant For Each shn In Array("Sheet2", "Sheet3", "Sheet4") Sheets(shn).Cells.ClearContents Next End Sub (ぶらっと) ---- ぶらっとさま回答ありがとうございます。 両方試したのですが、1つめは→sh.Cells.ClearContents 2つめは→Sheets(shn).Cells.ClearContents で止まってしまいます。 シートに一部保護がかかっているのですが、それが原因ですか? 下のコード単独でマクロをかけると、保護ありでも最後まで行くのですが・・・ ご教授願えれば幸いです。 Sub test() On Error Resume Next Cells.Value = Empty End Sub (かじころ) ---- >シートに一部保護がかかっているのですが、それが原因ですか? はい。そうです。あぁ、それで Error トラップをいれてあったんだね。 う〜ん。。。むやみやたらに Error トラップをいれるのは感心しないけど・・・ やるなら Sub Sample1() '特定シート「以外」実行 Dim sh As Worksheet For Each sh In Worksheets On Error Resume Next If Not sh Is Sheets("Sheet1") Then sh.Cells.ClearContents On Error GoTo 0 Next End Sub Sub Sample2() '指定シートのみ実行 Dim shn As Variant For Each shn In Array("Sheet2", "Sheet3", "Sheet4") On Error Resume Next Sheets(shn).Cells.ClearContents On Error GoTo 0 Next End Sub 別の方法としては、Errorトラップのかわりにシート保護をはずし実行して再度保護。 あるいはUserInterfaceOnly=True でのシート保護をかけるとか。 (ぶらっと) ---- ぶらっとさま回答ありがとうございます。 上の方法で実行できるようになりました。 >むやみやたらに Error トラップをいれるのは感心しないけど・・・ とありますが、なにか不都合が生じるのですか? よかったら教えてください。 (かじころ) ---- >なにか不都合が生じるのですか? ・第一には、エラーを回避できないときに、エラートラップをいれる。 ・第二には、エラー回避ロジックを書くと煩雑になりすぎる こんな場合に使うべきもの。 モルヒネのようなもので、ちょっとした切り傷につかうと、本当に大変なけがをしても 痛みを感じない結果、深刻な事態になってしまうのと同じ。 なので、使うにしても、エラー発生コードのすぐ下で、エラートラップをリセットするように したほうがいいね。 (ぶらっと) ---- 横から失礼します。 ぶらっとさんからどんな回答が付くか楽しみにしていましたが、 ぶらっとさんが推奨しているのは、 On Error Resume Next ではなく、 On Error Goto MyErrorHandler のようなエラートラップのことでしょうか。 On Error Resume Next を推奨するケースというのは本当にまれですね。 エラーが起きるのがわかっているが、エラーの後で処理を分けようとするとき ぐらいでしょうか。 http://officetanaka.net/excel/vba/file/file01.htm http://officetanaka.net/excel/vba/statement/OnError.htm http://excelvba.pc-users.net/fol6/6_8.html のあたりが一般論だと思います。 やみくもに On Error Resume Next を使用するのは臭いものにふたをしているだけで、根本解決ではありません。 目的の処理ができていよりも、エラーは出ない方が良いってケースはほとんど 皆無ではないですか? (Mook) ---- >ぶらっとさんが推奨しているのは、 >On Error Resume Next >ではなく、 >On Error Goto MyErrorHandler >のようなエラートラップのことでしょうか。 いや、そうではなく、エラートラップは基本的に使わない・・というか、どうしても必要な時以外は使わないというのが自分の基本です。 たとえばSpecialCellsで特定タイプのセルを取得しようとする、そのセルがあるかどうかは事前にはわからないわけで そのようなとき「のみ」に使うべきということです。(あくまで原則ですけど) ただ、On Error Goto ○○ と Resume Next であれば、私は絶対に後者です。 エラートラップという観点ではなく、 GoTo を使わない。これは、エラートラップ以上に、強く意識しています。 私自身は大昔のプログラマーですから、ブランチ系処理には(本当は)抵抗はないのですが、オブジェクト指向型の 言語体系のもとでは、これは「絶対に使っちゃいけない」ぐらいの強い気持ちですね。 時々、この板の回答で、「平気で?」If文の分岐の最後に Goto をいれるケースを見かけますが、いかがなものかな? 追記) 今回の質問のケースでは、シートに保護がかかっているということがわかっているわけで 本筋としては、処理前に保護を外し、処理後に保護に戻しておくのが正しい方法です。 あるいは、保護を外す->処理->再保護 が面倒であれば UserInterFaceOnlyの保護->処理 このような方式もあるということで どうしてもということでも、On Error Resume Next に「しっぱなし」といのは いけませんよということを書いたつもり。 もう1つ)田中さんのページのブックの有無をエラートラップで調べる方法、ブックのみならず シートの有無なんかにも使われたりしていますが、これも、私は使いません。 [[20110902154154]] 『セルの名前をシート名に。なければ自動追加』(すすめ) ここでご紹介したK窓の方法を使いますねぇ。 (ぶらっと) ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/201109/20110921153504.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97022 documents and 608152 words.

訪問者:カウンタValid HTML 4.01 Transitional