忍者ブログ
  • 2025.05《
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 》 2025.07
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2025/06/19 23:24 |
ErrSet1
Excelマクロのモジュールをそのまま貼り付け。
(会社とか家とか出先とかで見るため)
「Option Compare Binary」以下を標準モジュールに貼り付ければ、Myマクロ辞典に!
貼り付け後、「■Sub 」を「Sub 」に置き換えよう!
※公開している以上、利用は自由ですが、自己責任で。


Option Compare Binary
Option Explicit
'
'エラー関連マクロ
Public ProcName As String

■Sub エラー処理テスト1()

On Error GoTo エラー処理テスト 'エラー発生時にジャンプする先

'ChDir "c:abc" 'わざとエラーを発生させる
エラー処理テスト3 'または別のプロシージャに飛んでエラーを発生させる

Exit Sub '正常終了

エラー処理テスト: 'エラー発生時の処理
'プロシージャ名を取得(→プロシージャ名の取得)
ProcName = ThisWorkbook.VBProject.VBComponents("ErrSet1").CodeModule.ProcOfLine(10, 0)
MsgBox "エラー処理テスト1" & vbNewLine & ProcName & vbNewLine & Err.Number

エラー処理テスト22

End Sub

■Sub エラーへの対策()
'「On Error GoTo」の次行以降にエラーが起こった場合は、すべてエラー処理のラベルにジャンプする。
'エラー処理のための行き先ラベルの前には「Exit Sub」を入れて、エラーがないときはエラー処理の前で終了するようにする。

On Error GoTo エラー処理 'エラー発生時にジャンプする先

ChDir "c:abc" 'わざとエラーを発生させる

Exit Sub '正常終了

エラー処理: 'エラー発生時の処理
'プロシージャ名を取得(→プロシージャ名の取得)
Dim ProcName As String
ProcName = ThisWorkbook.VBProject.VBComponents("Other").CodeModule.ProcOfLine(230, 0)
' ↑モジュール名 ↑プロシージャ内の行指定
エラーへジャンプ

MsgBox "作業を中止します。原因を取り除いてからやり直してください。   " & vbNewLine & vbNewLine & _
"場所: " & ProcName & "   " & vbNewLine & _
"内容: " & Error(Err) & "(" & Err.Number & ")", _
vbCritical, "エラー発生"

'Application.DisplayAlerts = False '閉じる際に確認メッセージを出さない
'Close 'ファイルをすべて閉じる
'Application.Quit 'エクセルを終了する


'Str(Err) = Err.Number:エラー番号
'Error(Err) = Err.Description:エラーの種類

'※親プロシージャがある場合は、親は終了しないので「End」を置く。


'★上記で「実行時エラー '1004'」が出るときは、以下の通り設定変更する。
' 1.Excelのメニューバー[ツール]-[マクロ]-[セキュリティ] をクリック。
' 2.[信頼できる発行元] タブをクリック。
' 3.[Visual Basic プロジェクトへのアクセスを信頼する]チェックボックスをオン。
' 4.[OK]をクリック。


End Sub

Function エラーへジャンプ()

MsgBox Str(Err) & ":" & Err.Description, vbCritical, "プロシージャのジャンプもOK。"

End Function

■Sub プロシージャ名の取得()

Dim ProcName As String
ProcName = ThisWorkbook.VBProject.VBComponents("Other").CodeModule.ProcOfLine(30, 0)
MsgBox ProcName

'"Other" はモジュール名(Module1など)
'CodeModule.ProcOfLine(line, prockind)
'line …  モジュールのプロシージャ内の行番号(プロシージャの1行目じゃなくてもよい)
'複数のプロシージャが1つのモジュールに記述されている場合は、そのモジュールの行内を指定。
'prockind … プロシージャの種類を表す数値。
'一般的なSubプロシージャやFunctionプロシージャを指定するときは0を指定。

End Sub

■Sub プロシージャをダイアログに表示しない()
'メニュー[ツール]-[マクロ]-[マクロ]ダイアログに
'プロシージャ名を表示(マクロの実行)させたくない場合は、

'Function プロシージャ名() ‥本来はユーザー関数を定義するプロシージャ
'Private Sub プロシージャ名()


'プロシージャ マクロの実行 呼び出し ユーザー定義関数 戻り値
'Sub(Public Sub) 表示される すべてのモジュール 表示されない 返すことができない
'Private Sub 表示されない 同じモジュールのみ 表示されない 返すことができない
'Function 表示されない すべてのモジュール 表示される 返すことができる
'Private Function 表示されない 未確認 表示されない 返すことができる

'Friend オブジェクトモジュールでのみ使用可(デフォルト)

End Sub

PR
2015/04/14 22:14 | Excelマクロ(VBA) | コメント(0)
<<Cells | ホーム | ErrSet2>>
コメント
コメントの投稿















前ページ | ホーム | 次ページ