エクセルマクロで発生しているコンパイルエラーを解決する方法

このQ&Aのポイント
  • エクセルマクロで発生しているコンパイルエラーを解決する方法について教えてください。
  • エクセルマクロを作成したものの、他のPCでコンパイルエラーが発生しています。作成者は修正ができないため、どなたか解決方法を教えていただきたいです。
  • エクセルマクロを使用している際に、WinXPでは正常に動作しているが、LAN(Bエクセル2003)や他のPC(C、Dなど)でエラーが発生しています。解決方法を教えてください。
回答を見る
  • ベストアンサー

エクセル マクロ が他の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

質問者が選んだベストアンサー

  • ベストアンサー
  • bardfish
  • ベストアンサー率28% (5029/17765)
回答No.1

Microsoft Officeのマクロはある時期に仕様がガラッと変わりました。 そのバージョンは忘れてしまいましたがご使用のバージョンあたりが怪しい。 仕様変更が原因だった場合、マクロに詳しい人でないと対処不可能です。 自動変換ツールもありますが万能ではないのであてには出来ません。 というか、2003で開いた時それっぽいメッセージが表示されませんか? バージョンが原因でないとしても「On Error GoTo ~」が使用されているのでエラーの出た場所が原因とは限りません。特にエラーフックかけているのに「On Error GoTo 0」で解除していませんからね。これだけ見せられても解読不可能です。全体を見ないことには… と言うことで、マクロを理解していない人に対してここで解決に導くことは出来ません。 対処してもらえるまでは正常に動作するパソコンを借りて急場をしのいでください。

muta7030
質問者

お礼

DLLが参照出来ないのが1つあり、再指定で解決しました 有り難う御座いました。

muta7030
質問者

補足

早速の回答有り難う御座います。エクセルのバージョンの違うPCからLANで使用してました、念のため 使えるPCがエクセル2000すので 2003を削除、2000をインストールしてもエラー発生です。念のためWin XPとWin2000のPCでも試しましたがやはり駄目でした。 ソースを全部送れないの(文字数が多くなってしまうので)でやはり判読出来ないでしょうね。 マクロを勉強しないと駄目でしすかね それとメッセージはコンパイル エラーのみです  

関連するQ&A

  • エクセルの「コンパイルエラー」 

    何回か質問させて頂き回答を頂き 判らないながら本を片手に原因究明?理解にはほど遠い感がします。 お教え下さい。 下記がソフトの一部です、全コードを記載出来れば良いのですが、 このような一部分でも何かヒントをいただけますか。 4台のPC中1台のみエラー発生なく動いてます 他はExCEL とOSのバージョンを全く会わせてもNGです 「モジュール1でコンパイルエラー」デバッグ ステップインで 1行目から実行すると(1)で(2)に飛び(3)まで行って (4)でエラーで止まりますシートとかブックとかが足りない様な気がしますが 構文の書き方が特定のPCのみに有効になってるのでしょうか WorkBook 4行目まで記述されてます Public Sub Workbook_Open() label_101: Call Workbook_Open1-----------(1) End Sub 「ここからはモジュール1です」 Private Sub WorkSheet_Delete(Target_Sheet0 As String) 'シート削除--(4)この行で黄色の行表示で止まる On Error GoTo ErrSheetDelete Application.DisplayAlerts = False Worksheets(Target_Sheet0).Delete Application.DisplayAlerts = True GoTo ExitSheetDelete ErrSheetDelete: Error_Number = Err.Number --- Error_Number が青色で表示される Msg = "仮台帳がアクティブにできませんSub WorkSheet_Delete。Error_Number=" & Error_Number Err.Clear ExitSheetDelete: ' End Sub Public Sub Workbook_Open1() Dim Target_Sheet As String XLSFile_Dir_Name = ThisWorkbook.Path -----(2) XLSData_File_Name = XLSFile_Dir_Name & "\" & "工事台帳DB.xls" XLSSoft_File_Name = XLSFile_Dir_Name & "\" & "工事台帳DB_ソフト.xls" Target_Sheet = "仮台帳" Call WorkSheet_Delete(Target_Sheet)------(3) 以下省略

  • イベントマクロで「コンパイルエラー 因数は省略できません」

    マクロ初心者です イベントマクロを作りました Sheet2の結合されたB44:E44のセルに入力すると自動的にマクロが働いて Sheet1のW1の値のみがSheet2の結合されたB44:E44のセルに貼り付けられるマクロなのですが 実行すると「コンパイルエラー 因数は省略できません」と表示されます マクロ自体は正しく動いているのですがどういうことなんでしょう Sheet2 Worksheet Change Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target.Range("B44:E44")) Is Nothing Then Exit Sub Application.EnableEvents = False Sheets(1).Select Range("W1").Copy Sheets(2).Select Range("B44:E44").Select ActiveSheet.Paste Application.CutCopyMode = False Application.EnableEvents = True End Sub Private Sub Worksheet_Change(ByVal Target As Range)…この行が黄色になります If Intersect(Target.Range("B44:E44")) Is Nothing Then Exit Sub…intersectのところが青くなります こんな説明でわかってもらえるでしょうか?

  • Excelマクロについての質問です。

    Excelのマクロについての質問です。 マクロについての質問です。 以下のようなマクロを作成しました。 このマクロを動作させているのはこのマクロを作成したファイル上です。 Sub Macro9() Dim WBA As Workbook Dim WBB As Workbook Dim WSA As Worksheet Dim WSB As Worksheet Set WBA = Workbooks("A") Set WBB = Workbooks("B") Set WSB = WBB.Worksheets("1") For i = 100 To 3000 Step 20 Worksheets.Add Before:=Worksheets("Sheet1") Dim k As String k = i ActiveSheet.Name = (k / 100) Set WSA = WBA.Worksheets(k / 100) WSB.Range("A1:AY30").Copy Destination:=WSA.Range("A1") WSA.Range("D4:I30").Clear WSA.Range("Q4:V30").Clear WSA.Range("AD4:AI30").Clear WSA.Range("AQ4:AV30").Clear Next i Application.DisplayAlerts = False Sheets("Sheet1").Delete Application.DisplayAlerts = True Application.DisplayAlerts = False Sheets("Sheet2").Delete Application.DisplayAlerts = True Application.DisplayAlerts = False Sheets("Sheet3").Delete Application.DisplayAlerts = True End Sub そこで質問ですが、このマクロを作動させると何のエラーの表示もなく最後まで動作は完了します。 ですが、シートの作成は30まで作成できてもその後のセルのコピー&ペーストはなぜかシート6.8までしかできていません(7~30までのシートはシート作成はできているのですがコピペのみが実行されず空白のままになっています。) シートもコピペも両方ともシート30まで完了するにはどの点を改善すればいいのでしょうか? 知恵が足りずどうしても直す事が出来ません。 長文申し訳ございませんが是非皆さまのお知恵をお貸しください。 宜しくお願い致します。

  • エクセルマクロのCallとコンパイルエラー

    エクセルマクロのCallとコンパイルエラー よく、教えていただくのですが作ったマクロを呼び出すのに、 ・Call 作成したマクロ とか教えてもらいますが 標準モジュールのツリーには ・Module1 ・Module2 ・オートオープン ・リセット とかがあって ・Call リセット とかにして実行すると ・コンパイルエラー (モジュールではなく、変数またはプロシージャを指定してください) となってしまいます。 Callの後にはどういう風にすればいいのでしょうか? -------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$5" And Len(Range("B5").Value) > 1 Then Call 印刷←印刷はModule2です。 End If End Sub ------------- で印刷のマクロの一部に Call リセット をつけたたしたらなりました。 よろしくお願いします。

  • エクセル2003 シートを保護するとマクロエラー

    sub macro1()  worksheets("Sheet2").copy before:=worksheets(1)  with worksheets(1)   .range("D4:BH14").interior.colorindex = xlnone   .range("D16:BH21").interior.colorindex = xlnone   .printout  end with  application.displayalerts = false  worksheets(1).delete  application.displayalerts = true end sub 以前に、こちらの質問で回答をいただきました。 会社のプリンターは古すぎなのですが、 見事!なんとか、会社のプリンターでできました。 入力されたくないセルもあり、シートを保護しました。 すると、マクロにエラーがかかりました。 なるべく、触られたくないセルがあったり、データを入力してほしいデータもあり… セルの保護をかけながら、マクロを有効に動かしたく思います。 よろしくお願いします。

  • Excelマクロにてシートの削除を行いたいです。

    初めて投稿させて頂きます。 質問内容  Excelのマクロを使用して指定シート以外のシートの削除を行いたいです。 前条件  外部CSVファイルを取込み、データによってシートを追加して振り分けています。  再度マクロを実行した場合特定のシートを残し(フォーマット等)、他のシートを削除してからデータの振り分けを実施する予定です。 やってみた事  下記の様に書いて実施してみたのですがエラーとなってしまいます。 Sub Clear()   Application.DisplayAlerts = False   For I = 1 To Worksheets.Count     If (Worksheets(I).Name <> "sheet") Then       Sheets(Worksheets(I).Name).Select       ActiveWindow.SelectedSheets.Delete     End If   Next I   Application.DisplayAlerts = True End Sub 上記の書き方だと1シート毎削除なので、選択したシートを一括で削除出来るとうれしいです。 どなたかご存知の方お願いします。

  • 二つのエラーを発生させたい

    ひとつのプロシージャー内で、 二つのエラートラップを仕掛ける事は出来ないのでしょうか? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description On Error GoTo Err2 i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub を行うと、 i = "b" で2回目のエラーが発生した時は、 実行時エラーになってしまいます。 i = "b" で2回目のエラーが発生した時に、 「Err2のエラー: 型が一致しません。」 と表示させるにはどうすればいいでしょう? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 On Error GoTo Err2 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub にすると、 i = "a" のエラーで、 「Err2のエラー: 型が一致しません。」 へ移動してしまいます。

  • エクセル/マクロ エラー処理がうまくいきません

    エクセルマクロの質問です。エクセルのヴァージョンは2000です。 シートをコピーして新シートに任意の名前を付けるマクロを作っています。 ユーザーフォームの中に一つのテキストボックス(新シートの名前入力用)と 二つのコマンドボタンを設置し一つは実行ボタン、もう一つはキャンセルボタンとしました。 テキストボックスに不正な名前(空白、記号、すでに存在するシート名)が入力された状態で 実行ボタンを押すと新シートは作成されず、メッセージボックスで実行できない旨が表示され、 入力フォームに戻るという感じにしようと思っています。 エラー処理には下記の通りOn Errorステートメントを試してみました。が、どうもうまくいきません。 エラーが出ても新しいシートが作成されてしまい、その後にメッセージボックスが出てしまいます。 正しいエラー処理の仕方をご教示頂けると幸いです。どうぞよろしくお願いします。 Private Sub CommandButton1_Click() Dim NewSheetName As String NewSheetName = TextBox1.Value On Error GoTo Err1 Sheets("Summary").Select Sheets("Summary").Copy After:=Sheets("Summary") ActiveSheet.Name = NewSheetName Exit Sub Err1: MsgBox "Invalid name"    Exit Sub End Sub

  • セルの値をワークシート名にする(エクセル2013)

    インストラクターのネタ帳さんより http://www.relief.jp/itnote/archives/003382.php 下記「セルの値をワークシート名にする?Worksheet_Change」 を拝借し利用させていただこうと思いましたが ---------------------- Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Target.Address(False, False) = "H1" Then ActiveSheet.Name = Range("H1").Value End If Exit Sub ERR_HANDLER: MsgBox "現在のH1セルの値はシート名にできません。" End Sub ---------------------- はそのまま出来るのですが、 H1セルにデータの入力規則:リストを指定しますと エラーとなりシート名が変わりません sheet1のリストA1:A50をsheet2のH1セルにリスト表示させ その表示名をそのままシート名に出来ませんでしょうか? ---------------------- Sub copy Range("H1").Copy Range("P1") End Sub ---------------------- Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Target.Address(False, False) = "P1" Then ActiveSheet.Name = Range("P1").Value End If Exit Sub ERR_HANDLER: MsgBox "現在のP41セルの値はシート名にできません。" End Sub ---------------------- としてH1のセルをP1にコピーしたものを指定して試しましたがやはりエラーとなり うまくいきませんでした。 全くの素人で恐縮ですがよろしくお願いいたします

  • VBA シートの名前が重複するときに すでにある方を削除する

    VBA シートの名前が重複するときに すでにある方を削除する よろしくお願いします。 エクセル2003を使っています。 「入力シート 」をコピーして「DB」という名前をつける。 すでに「DB]シートがあれば「DB」シートを削除する。 その時に、もし「集計」シートと「名簿」シートがあれば一緒に削除する というコードを考えています。 集計シートや名簿シートはない場合もありますので、最初からdeleteにするとエラーになります。 どうぞお知恵をお貸しください。 sub シートの挿入と削除 () Worksheets("入力シート").Activate ActiveSheet.Copy After:=ActiveSheet On Error Resume Next 'エラーが発生しても続行 ActiveSheet.Name = "DB" If Err.Number = 1004 Then Application.DisplayAlerts = False '警告メッセージを表示しない Sheets("DB").Delete Application.DisplayAlerts = True ActiveSheet.Name = "DB" End Sub End If

専門家に質問してみよう