Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7894 / 13644 ツリー ←次へ | 前へ→

【36192】On Errorについて みき 06/3/24(金) 10:38 質問[未読]
【36193】Re:On Errorについて inoue 06/3/24(金) 11:00 発言[未読]
【36197】Re:On Errorについて みき 06/3/24(金) 11:30 お礼[未読]
【36201】Re:On Errorについて inoue 06/3/24(金) 12:42 発言[未読]
【36215】Re:On Errorについて みき 06/3/24(金) 16:40 お礼[未読]

【36192】On Errorについて
質問  みき E-MAIL  - 06/3/24(金) 10:38 -

引用なし
パスワード
   すみません、エラー処理が良く理解できていない
初心者です。
教えて頂けると助かります。

集計を記録マクロでつくりました。
その集計結果を表に貼り付け体裁を整えて電子メールで送るという
マクロを繰り返し、人数分電子メールで送るというところまで
できましたが、エラー処理で困っています。

集計がデータが無いと、エラー画面がでましたので、
On Error Resume Nextを集計構文の前に入れたところ
データがない人までメールが送られてしまいます。


データが無い人(集計でエラーが出るデータ)には
メールを送らず、データのある人には集計して
メールを送りたいのですが(集計でエラーが出る人だけ無視)
どのように処理をすれば良いでしょうか?

アドバイスいただけると助かります。

以下、集計の部分だけを抜粋したマクロ---------------------------

On Error Resume Next
  
  Range("B2").Select
  Application.CutCopyMode = False
  Range("A1:E18").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortTextAsNumbers
  Selection.Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(3), _
    Replace:=False, PageBreaks:=False, SummaryBelowData:=True
  ActiveSheet.Outline.ShowLevels RowLevels:=2
  Columns("B:B").Select
  Selection.Replace What:=" 合計", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
  Selection.Replace What:="総計", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
  Selection.Replace What:="集計", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

【36193】Re:On Errorについて
発言  inoue E-MAILWEB  - 06/3/24(金) 11:00 -

引用なし
パスワード
   >On Error Resume Nextを集計構文の前に入れたところ
>データがない人までメールが送られてしまいます。
「On Error Resume Next」はそれだけで使うと、
エラーがあっても無視して進めることになるので当然です。

そのメール送信の段階で、
If Err.Number = 0 Then
で判断するようにしてみてください。

【36197】Re:On Errorについて
お礼  みき E-MAIL  - 06/3/24(金) 11:30 -

引用なし
パスワード
   ▼inoue さん:
ありがとうございます!!
大変勉強になりました。
今までは、自分しか使わないマクロばかりだったので
エラー処理をおろそかにしていました。

On Error Resume Nextを構文の最初に入れると
以下のエラーが全て無視され実行となり
無視されたくないところだけ、教えていただいた
以下のif文で囲むと実行回避できると理解して
よろしいでしょうか?

If Err.Number = 0 Then
-----
End if

On Erro Go Toの使い方もまだ理解できていないので
勉強したいと思います。

本当に感謝します。

【36201】Re:On Errorについて
発言  inoue E-MAILWEB  - 06/3/24(金) 12:42 -

引用なし
パスワード
   >今までは、自分しか使わないマクロばかりだったので
>エラー処理をおろそかにしていました。
初心者で多いのは、
>On Error Resume Next
などを覚えたために動作確認もできていないマクロにこれを書いて、
うまく動かないことの原因が分からないといったことがあります。
エラー処理は最低限「まともに動いてから」実装することです。

>If Err.Number = 0 Then
>-----
>End if
もう分かると思うので試してみてください。

【36215】Re:On Errorについて
お礼  みき E-MAIL  - 06/3/24(金) 16:40 -

引用なし
パスワード
   ▼inoue さん:
有難うございました。
大変勉強になりました。

7894 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free