• 締切済み

マクロで真っ暗     (エラートラップについてです見捨てないで~)

ARCの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

> システムがエラーとして検知した<まくろ本文>を取得する”公式” (それ一文のみの記述で全ステートメントに有効な) のようなものがあればなあ~とおもい当質問にいたったのでした。 うーん、これは現時点ではどうしようもないですねぇ。 仰るように、エラー処理は昔っからどうしようもなく手間がかかるものでして、私もプログラムしながら何度「もっと楽になったらなぁ。」と思ったか分かりません。 仮に、エラーの起こった行を取得したとしても、その行の構文を解析して、 Set mySheet = Workbooks(0).Worksheets("ほげほげ") から「ほげほげ」を取得するのは想像以上に厄介です。 SheetNo = 1 Set mySheet = Workbooks(0).Worksheets("Sheet" _   & SheetNo + 1) なんて書き方をされた日にゃ、これを解析するプログラムを作るだけでソフト1本分以上の手間がかかってしまうかも(^^; もっと簡単そうなのは、自作関数を使う手でしょうか。 Public Function CheckSheet(SheetName As String, Optional TargetBook As Workbook) As Worksheet  On Error Resume Next  If TargetBook Is Nothing Then   Set TargetBook = Workbooks(0)   If Err <> 0 Then    MsgBox "ワークブックが開いていない。"    Err.Clear    Exit Function   End If  End If  Set CheckSheet = TargetBook.Worksheets(SheetName)  If Err <> 0 Then   MsgBox "指定したワークシートは存在しません。" & vbNewLine _    & SheetName   Set CheckSheet = Nothing   Err.Clear  End If End Function ってなコードを書いておいて、ワークブックを開くときに、 Set mySheet = CheckSheet("Sheet1") みたいな感じで呼び出すと、比較的簡単にエラーチェック出来ます。 あと、エラー処理に関しては、多分Officeの次の次のバージョンあたりで、「例外処理」という考え方が取り入れられると思います。 これを使えば、今よりは若干エラー処理がやりやすくなるものと思います。 (といっても、コードが見やすくなるだけで、エラー処理の手間自体は大して変わらないんですが。)

nao_2
質問者

お礼

貴重な時間をありがとうございます。  (質問側がレスポンス遅いのは恥ずかしいかぎりです…) ご提示いただいた参考文は、 --同類対象への似たような行動については、ひとまとめにパックしといて、 必要の都度カンタンな呪文で呼びだせば・・・。--  ということですよね(きっと)。  いずれにしても、現時点では、自分でいろいろ 考えたり(=ハマッたり)しながらゴリゴリ作りこむしかないようで…。^^); 大変参考になりました。  またなんか気づくことがあるかもしれないので、 この質問は、締めずにおいときます。 (気分は”良々回答200pt贈”です) ありがとうございました。

関連するQ&A

  • マクロ シートの選択

    いつも回答して頂き、とても感謝しています。 マクロを実行したブックを指定する時はTHISWORKBOOKですよね。マクロを実行したシートを指定する時にもTHISWORKBOOKみたいな記述方法があるのでしょうか? あるのであれば教えて下さい。 今、作成中のマクロで解決出来ない問題が発生しています。FINDを使う記述の箇所で一回目はすんなり最後までいくのですが、続けて同じマクロを実行すると、エラーが発生してしまいます。 たぶん、2回目の時違うシートを見てるからだと思います。どのシートを見てるか分かりませんが。 で、FINDで検索するシート名を変数をとって指定しています。 Dim ws1 as WorkSheet Set ws1 = ThisWorkBook.ActiveSheet これが悪いのかな?と思い質問しました。よろしくお願いします。

  • マクロ実行時のエラー処理について

    VBAのエラー処理の方法について教えて下さい。 エクセル2007を使用しています。 VBAでシートの名前を以下のように変更しようとしています。 シート名1 ← "1" シート名2 ← "2" シート名3 ← "3" 記述内容は以下の通りです。 '〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 On Error GoTo Err1  For i = 1 to 3   Sheet(i).Name = i  'Sheet(i)の名前を変数"i"に変更する。 Err1:   Sheet(i).Delete   '上記処理でエラーが発生した場合はそのシートを削除する。  Next i '〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓  以上の処理を実行しようとした場合、同じ名前の既存シートが存在していたり、シート名に含まれてはいけない文字列が含まれていたりした場合、エラーが発生しますが、On Errorステートメントを使用してエラーが発生した場合の処理を実行したいのですが、1回目のエラーについてはOn Errorが働くのですが、2回目になるとOn Errorが働きません。  2回目以降のエラーも1回目と同様に処理したいのですが、コードの記述の変更方法や又は他の処理方法を教えて下さい。 エラーの種類は以下の通りです。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 実行時エラー'1004': シートの名前をほかのシート、Visual Basicで参照されるオブジェクト ライブラリまたは ワークシートを同じ名前に変更することはできません。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 以上。 尚、On Error Resume Nextは処理を無視するだけなので使用したくありません。 以上、宜しくお願い致します。

  • 【VBA】マクロのルールについての文章 解説

    マクロのルールについて記載された一文について、次の内容を噛み砕いて教えていただけますか。 さっぱりわかりません。。。 「イベントを利用するマクロはオブジェクトのモジュールに記述する」 ワークシートをアクティブにすると、アクティブになったワークシートでActivateイベントが発生します。このイベントを利用して、ワークシートが切り替わった時自動的に起動するようなマクロは、Worksheetオブジェクトのモジュールに記述しなければなりません。

  • EXEL2000のマクロが2010でエラーになる

    当方、VBA初心者です、よろしくお願いいたします。 EXEL2000で動作していたVBAマクロが2003では動作、2007、2010では 以下のエラーが発生して動作しません。 「実行時エラー1004、アプリケーション定義またはオブジェクト定義のエラーです」 マクロ自体はワークシートにグラフを書くものです。 Dim cho As ChartObject, rng As Range エラー箇所の記述は以下の部分です。 Set cho = ws.ChartObjects.Add( _ ws.Range("B4").Left, _ ws.Range("B4").Top, _ ws.Range("B4:AB4").Width, _ ws.Range("B4:B13").Height) バージョンアップの仕様変更で記述が変わったと言うことでしょうか? そうだとしたらあわせて何がどう変わったのか、解説されてるサイトとか ご存じでしたらお知らせください。 以上よろしくご教授のほどお願いいたします。

  • マクロを組むとこんなエラーが出るようになりました

    捺印君:Vel 1.25→(エクセルのフリーソフトです) PicturesクラスのPasteプロパティを取得出来ません。 予期せぬエラーが発生しました。 とエラーが出ます。 ちなみに組んでいるマクロは下記です Sub 全シートの保護() Dim Sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each Sh In Worksheets Sh.Protect Password:=myPassword Next End Sub Sub 全シートの解除() Dim Sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each Sh In Worksheets Sh.Unprotect Password:=myPassword Next End Sub このマクロがおかしいからエラーが出るんですよね? 違うマクロにすれば問題ないでしょうか? ちなみにマクロは「全シートの保護一括解除」と「一括保護」で パスワード付きの物をとなっております。

  • マクロ フォームのオブジェクト名

    マクロのフォームを利用して、入力シートを作成しています。 セルに入力したフォームのオブジェクト名を利用して、繰り返し記述を作ったのですが、エラーが発生してしまいます。 Form名.List = ary_d → 「オブジェクトが必要です」のエラー セルに入力したフォームのオブジェクト名では無理なんでしょうか? 解決方法があれば、参考にしたいので宜しくお願いします。

  • excelのマクロで質問です

    皆様、いつも親切に教えて頂いて、感謝しております。 初心者です。 excelのマクロなんですが、 Private Sub Worksheet_Calculate() で、あるシートにコードの記述があります。 そのワークブックを開いて、同時に他のワークブックで作業すると このコードが実行されて、エラーが出てしまいます。 コードの記載されてるワークブックだけで、このコードを有効にしたいのですがどうすれば良いでしょうか? 文章が拙くすみません。 宜しくお願いします。

  • エクセル マクロ が他のPCでコンパイル エラー

    作成してもらったマクロです、作成者多忙で修正は即不可ですので、何とか解決したいのですが自分はマクロを理解できないので、どなたか教えてください。 症状は現在(仮りにAとします)WinXPで正常に動いております(エクセル2000)このソフトをLAN(仮称B エクセル2003)でも使用しておりましたが、LANでエラー発生。ほか(仮称 C、D)などにAからデータとソフトをコピーしてもエラー発生、現状はAではつかえてますがLANで使いたいので、、 全部のソースは文字数の関係で貼り付け不可ですので エラーらしきところを張りつけます「エラーは非表示モジュラー1でコンパイルエラー」です 1行目で黄色反転して11行目でとまってます。 Private Sub WorkSheet_Delete(Target_Sheet0 As String) 'シート削除 'ActiveBookのシート「Target_Sheet0」があれば「削除」、 '無ければそのまま '無い物を削除実行はアラーム表示となるので On Error GoTo ErrSheetDelete Application.DisplayAlerts = False Worksheets(Target_Sheet0).Delete Application.DisplayAlerts = True GoTo ExitSheetDelete ErrSheetDelete: Error_Number = Err.Number ' その後、オートメーション エラーの発生を調べます。 Msg = "仮台帳がアクティブにできませんSub WorkSheet_Delete。Error_Number=" & Error_Number Err.Clear ' Err オブジェクトのプロパティをクリアします。 ExitSheetDelete: ' 'Stop End Sub

  • Excel2007のマクロ(excel4.0)のSELECT関数でマクロエラーが発生する

    Excel VBAで開発されたソフトの改造を行ってますが、Excel2007で動作しないマクロがあり困ってます。 <開発環境> ・WindowsXP Pro SP3 ・Celeron 540(1.8GHz) ・メモリ1GB ・Excel2007 SP1 (Microsoft Office2007) 改造元ソフトはOffice2000で開発されており、Excel2007で動作するとマクロエラーが発生する処理があります。 因みにまだソフト改造はしてなく、そのままExcel2007で動作させるだけでマクロエラーが発生します。 発生する箇所はマクロ(excel4.0)で定義されており、下記のコマンドです。 =SELECT(!選択エリア) マクロエラーの内容は下記になります。 ------------------------------- マクロエラー [dbg.xls]マクロ(excel4.0)BV28 ------------------------------- やりたい事はシートの特定の範囲を選択することです。 "選択エリア"は正しく定義されていることは確認してます。 (=シート名!$D$4:$CY$103 と定義してます) Excel2000やExcel2003ではマクロエラーが発生せずに正常に選択されます。 Excel2007のマクロセキュリティ設定を「すべてのマクロを有効にする」にしてます。 開発者向けのマクロ設定を「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックしても改善しません。 ネットで調べましたが判らず、ここで質問させて頂きました。 判りにくい説明で申し訳ありませんが、よろしくお願いします。

  • エクセルのマクロでエラー

    いつもお世話になっています、マクロ初心者です、Vlookupを使うとエラーになってしまいます。  Sheets("401回~").Select Application.Goto Reference:="回" AA = VLookup(I1, 回, 3) を実行すると コンパイルエラー Sub又はFunctionが定義されていません と表示され、Vlookupの部分が青くなります。 Windows Xp、Office2000です、sheet内で、同じ文を使っているのですが、マクロ用に何か定義が必要なのでしょうか? 初心者で、手元には図書館で借りた入門書しかありません。 アドバイスお願いします。