Excelマクロ実行時エラーについての回避方法

このQ&Aのポイント
  • Excelのバージョンによってマクロ実行時にエラーが発生する問題があります。
  • 特に、2007年と2010年のExcelでは「プログラミングによるVisual Basicプロジェクトへのアクセスは信頼性に欠けます」というエラーメッセージが表示されます。
  • このエラーを回避するためには、コード内の特定の部分を修正する必要があります。詳細は以下の回答をご参照ください。
回答を見る
  • ベストアンサー

2007から2010excel マクロ実行時エラー

2007のexcelだと上手く動くのですが、2010のexcelだと”実行時エラー1004” 「プログラミングによるVisual Basicプロジェクトへのアクセスは信頼性に欠けます」 と表示されます。デバックすると下記の部分に色がつきます。どのような記述にしたら 回避できるか教えてください。 For Each objVBCOMPO In NewWkbook.VBProject.VBComponents←黄色になります! With objVBCOMPO.CodeModule ' コードを削除(全行) lngLines = .CountOfLines If lngLines <> 0 Then .DeleteLines 1, lngLines End With Next objVBCOMPO

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

  • ベストアンサー
回答No.1

こんにちは。 それ自体は、単なるセキュリティの問題でしょう? セキュリティセンターのマクロの設定で、(開発タブからでも可) □VBAプロジェクト オブジェクトモデルへのアクセスを信頼する にチェックが入っていないのだと思います。 ところで、このマクロって何ですか? NewWkbook というのは、クラスで設定されていることを意味するように思えます。ふつうでは考えられないコードです。これは自ブックで行えば自爆型マクロという名称が付くのですが、この場合は、新しく開いたブックに、マクロ(ウィルス)が入っていたら、それを削除しろという意味に取れます。 私はいろんなことをマクロで試してきましたが、それでも、このようなマクロは書きませんでした。 悪いと言っているわけではないのですが、もし、私の想像が正しければ、一般的ユーザーには書かないコードです。アンチウイルスソフトに依存した方がよいと思います。

pop2003
質問者

お礼

本当にありがとうございました。あまり知識がないのでネットでみたものを考えてしました。

関連するQ&A

  • EXCEL2000VBA実践プログラミングリファレス「著者:大村あつし

    EXCEL2000VBA実践プログラミングリファレス「著者:大村あつし、栗山 恵吉、田中 博人、出版社エーアイ出版」のサンブルマクロが動かない。 マクロの初心者です。 私のパソコンはエクセル2007を利用しています。 サンプルマクロを動かす以前に、全てのサンプルに With ThisWorkbook.VBProject.VBComponents("Module1") に黄色のエラーが出てしまいます。 なぜかわかればご教示お願いします。 'コードを表示 Function GetCode(ByVal NowProc As String, ByVal NextProc As String) As String Dim myStartLine As Integer Dim myEndLine As Integer 黄色のエラー箇所⇒With ThisWorkbook.VBProject.VBComponents("Module1") myStartLine = .CodeModule.ProcBodyLine(NowProc, vbext_pk_Proc) If NextProc <> "" Then myEndLine = .CodeModule.ProcStartLine(NextProc, vbext_pk_Proc) Else myEndLine = .CodeModule.ProcCountLines(NowProc, vbext_pk_Proc) + myStartLine End If GetCode = .CodeModule.Lines(myStartLine, myEndLine - myStartLine) End With End Function

  • 実行時エラー 2001

    http://officetanaka.net/excel/vba/vbe/05.htm を参考に VBAコードを取得したいのですが Declare Function GetTickCount Lib "kernel32" () As Long Public sampledata As String Sub Sample9() Dim Code As String Code = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(7, 5) MsgBox Code End Sub を実行すると 実行時エラー 2001 'VBProject'メソッドは失敗しました:'_Workbook'オブジェクト が、 Code = ThisWorkbook.~ の行で発生します。 何が間違ってますか?

  • EXCEL2003VBA 「マクロでモジュール解放」

    質問番号:5548045の関連質問です。 EXCEL2003VBA で、セキュリティ設定で『Visual Basic プロジェクトへのアクセス』にチェックを入れて、Module1に下記のように「モジュール解放」マクロを作成しましたが、Module1が削除されません。(1)を削除して、手動操作で変更を保存でファイルを閉じるとModule1も削除されます。 Module1の削除も全てマクロで行うやり方を教えてください。 With ThisWorkbook.VBProject.VBComponents .Remove .Item("Module1") .Remove .Item("Module2") .Remove .Item("Module3") End With ActiveWorkbook.SaveAs Filename:="D:\TEST" ActiveWorkbook.Close ・・・(1)

  • シート・別ファイルを使用せずに、テキストデータを保存できないでしょうか。

    オフィス2003のデータで、数ヶ月に一度項目名とセル番地が変わるので、デフォルト設定をするマクロを作ろうと考えています。 以下のコードで、モジュール内のコードを置換するので解決しそうですが、 「ツール」→「マクロ」→「セキュリティ」で「□Visual Basicプロジェクトへのアクセスを信頼する」にチェックを入れないといけないので、やりたくないのです。 ------------------------------------------ Sub tikan() Dim i As Integer With ThisWorkbook.VBProject.VBComponents(\"Sample\").CodeModule For i = 1 To .CountOfLines If .Lines(i, 1) = \"置換前\" Then .ReplaceLine i, \"置換後\" End If Next i End With Target.Save End Sub ------------------------------------------ シート・別ファイルを使用せずに、デフォルト設定のテキストデータを記録する場所はないものでしょうか? ご存知の方、教えてください。

  • 過去レス「マクロでモジュール解放を記述出来るか」

    '08.1.15のご質問No.3682185「マクロでモジュール解放を記述出来るか?」 のご回答が以下でした。 -------- まず Excelのマクロのセキュリティ設定で『信頼できる発行元』タブにある『Visual Basic プロジェクトへのアクセス』にチェックを入れておきます VBEで参照設定に『Microsoft Visual Basic for Application Extensibility 5.3』を追加します これでモジュールに対するアクセスができるようになります 実際のアクセス方法ですが Dim oVBE as VBE, oPrj as VBProject, oComp as VBComponent ' oCompがモジュールになります Set oVBE = Me.Application.VBE Set oPrj = oVBE.VBPrjects("VBAProject") for each oComp in oPrj.VBComponents   if oComp.Name = "開放したいモジュール名" then     oPrj.VBComponents.Remove oComp   end if next といった具合になります 【ここから質問です】 私のはエクセル2000ですが、上記をやると、 「コンパイルエラー:Meキーワードの使用方法が不正です」と出ます。 どこを直せば動くようになりますか?

  • Excel2010のVBAで起動時に連番表示&保存

    【再掲載&追加情報です】 ずっとwindowsXP SP3を使用していたのですが(Excel2002 SP3もそのまま) 今回急遽社内のパソコンが2台(1台は自分のです)だけWindows7に変わりました。 その2台だけExcelも2002から2010に変わったのですが、使用しているファイルで記述してる FileSearchが使えないとあとから知りました。(泣) ネットで検索してFileSystemObjectを代わりに使用するというのを知りましたが 初心者の為理解が難しく・・・。 申し訳ありませんが記述の変更方法を教えていただけないでしょうか? (1)フォルダーは ”C:\指示\記入済” に出来たExcelファイルを保存してます (2)番号は指定フォルダ内のエクセルファイルをカウントしてその数+1を   U1のセルに表示させています。 (3)作成した保存ボタンで新見積書を保存する    但し、マクロコードとボタンを削除したものを保存する (4)新見積書の保存後はブック、エクセルともに終了する **************現在使用中データ************** --- Module1 ---- Public Const FPath = "C:\指示\記入済" 'xlsファイル検索 Sub Auto_Open() With Application.FileSearch .NewSearch .Filename = "*.xls" .FileType = msoFileTypeAllFiles .LookIn = FPath .SearchSubFolders = False .Execute Cells(1, 21).Value = .FoundFiles.Count + 1 Cells(1, 21).NumberFormat = "0000" End With End Sub --- Module2 ---- Sub ファイルに名前を付けて保存()  Dim 既定ファイル名 As String  Dim 保存ファイル名 As Variant 既定ファイル名 = FPath & "\" & Range("T1") & Format(Range("U1"), "0000") & Range("B1") & ".xls" 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名)   If 保存ファイル名 = False Then     MsgBox "保存は中止されました"     Exit Sub   End If  ActiveWorkbook.SaveCopyAs 保存ファイル名  Dim NewBook As Workbook  Set NewBook = Workbooks.Open(保存ファイル名)  Dim myVBA As Object  For Each myVBA In NewBook.VBProject.VBComponents    With myVBA     If .Type = 100 Then      .CodeModule.DeleteLines 1, .CodeModule.CountOfLines     Else      Application.VBE.activeVBProject.VBComponents.Remove myVBA     End If    End With  Next myVBA  NewBook.ActiveSheet.Shapes(1).Delete  NewBook.Close True '●●●  Set NewBook = Workbooks.Open(保存ファイル名)  NewBook.Close True '●●● 'ブックとエクセル終了  Application.Quit  ThisWorkbook.Close False End Sub ******************************************** 上記がExcel2002で問題なく動いている記述です。 最初Excel2010で起動してエラーが出たので検索したとき、てっきりFileSearchだけが問題 だと思っていたのですがもしかして他にもあったのでしょうか? --- Module1 ----は、先ほど質問したときに Public Const FPath = "C:\指示\記入済" 'xlsファイル検索 Sub Auto_Open() Dim tmp as String Dim i as Long tmp = Dir(FPath & "¥*.xls") Do While tmp <> "" i = i + 1 tmp = Dir() Loop Cells(1, 21).Value = i+1 Cells(1, 21).NumberFormat = "0000" End Sub に変更したら動くようになりました。 ただ、作成した保存ボタンを押すと指定した場所に指定したセルの文字を拾って ファイル名を表示させるまでマクロに登録(Module2)したのですが、 指定したフォルダは開いてるのですがファイル名が空欄のままです。 更にそれに手打ちでファイル名を打ち、保存すると 実行時エラー1004 プログラミングによるVisualBasicプロジェクトへのアクセスは信頼性に欠けます と表示されます・・・。 デバックを押すと For Each myVBA In NewBook.VBProject.VBComponents の部分が黄色くなってました>< 他に情報としては このファイルはxlt(テンプレート)にしています。 使用者たちにはファイル名を打たせないように上記のようにしました。 再度宜しくお願いします・・・。 何度もお手数をおかけしまして申し訳ありません。。。

  • CreateEventProc()2回目実行するとEXCELが落ちる

    EXCELが落ちてしまう現象が解決できずに困っています。 詳しい方がいらっしゃったら教えて下さい。 データ数分ボタンを配置したいので、No.321427の質問を参考にコードを書きました。 EXCEL VBAで下記のコードのtest1()を実行するとEXCELが落ちてしまいます。 ちなみに、vInsertButton()の下側をコメントアウトして ボタンを1つだけ配置すると正常に処理が完了します。 vInsertButton()の処理に問題がありましたら教えていただけませんでしょうか? CreateEventProc()あたりに問題がありそうなのですが分かりません。 VISTA&EXCEL2007では、この現象は発生しませんでした。 WinXP&EXCEL2000とWinXP&EXCEL2003でこの現象が再現しました。 OfficeUpdateでは最新と表示されました。 よろしくお願いします。 ------------------------------------------------------------------------------------------------------- ' 設定 ' VBEのツール→参照設定で、 Microsoft Visual Basic Editor for Application Extensibility にチェックして下さい。 Option Explicit Private Sub test1() ' ボタン追加 Call vInsertButton("button1", 2, 1) Call vInsertButton("button2", 2, 2) End Sub ' ボタン追加 Private Sub vInsertButton(ByVal strButtonName As String, ByVal iRow As Integer, ByVal iCol As Integer) ' ボタン追加 Dim objButton As OLEObject With Worksheets("Sheet1") Dim clButtonRange As Range Set clButtonRange = .Range(.Cells(iRow, iCol), .Cells(iRow, iCol)) Set objButton = .OLEObjects.Add(classtype:="Forms.CommandButton.1", _ link:=False, displayasicon:=False, _ Left:=clButtonRange.Left, Top:=clButtonRange.Top, _ Width:=clButtonRange.Width, Height:=clButtonRange.Height) objButton.Object.TakeFocusOnClick = False objButton.Object.Caption = strButtonName End With 'クリックイベントコード追加 With ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule Dim iLineCounter As Long iLineCounter = .CreateEventProc("Click", objButton.Name) .InsertLines iLineCounter + 1, "MsgBox ""abc""" End With End Sub -------------------------------------------------------------------------------------------------------

  • マクロ実行中エラーが発生する

    いつも回答して頂きありがとうございます。 ws.Cells(7, c).ClearContentsの箇所で『excel2010』ではエラーが発生しませんでしたが、『excel2003』ではエラーが発生しました。(オブジェクトが・・・・みたいなコメント有。)原因は何でしょうか?御指導の程宜しくお願い致します。 Sub 特定のシート以外の最終履歴と次回予定日を算出する() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Integer c = 3 Do While ws.Cells(2, c).Value <> "" With ws.Cells(6, c) .FormulaR1C1 = "=MAX(R8C:R10000C)" If .Value = 0 Then .Value = "履歴無し" ws.Cells(7, c).ClearContents'ここでエラーが発生 Else .Value = .Value ws.Cells(7, c) = DateAdd("d", ws.Cells(5, c), DateAdd("m", ws.Cells(4, c), DateAdd("yyyy", ws.Cells(3, c), ws.Cells(6, c)))) End If End With c = c + 1 Loop End If End If Next End Sub

  • アクセスで標準モジュールの中身を書き出したい

    http://officetanaka.net/excel/vba/vbe/05.htm の Sub Sample9() Dim Code As String Code = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(7, 5) MsgBox Code End Sub のエクセルではなく アクセスバージョンはないでしょうか? http://d.hatena.ne.jp/taka_2/20090907/p2 をアクセスの標準モジュールに貼り付けてみたのですが inFileName = WScript.Arguments(0) で実行時エラー424になってしまいます。

  • VBA 実行時エラー1004 rangeメソッドは

    始めまして、VBA初心者です。 現在VBAプログラムを使って、サイトに自動ログイン出来るようにコードを作成しているのですが、『実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクト』とメッセージが出て、実行できません。 デバックをすると以下の11行目で黄色のバーが出ていました。いろいろと調べてみましたが、原因がわからずに止まってしまいました。 どなかた分かる方がいらっしゃいましたら教えて頂けますようにお願い致します。 コードは下記です。 Sub 無料スペースログイン() Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Visible = True ObjIE.Navigate "http://mnnf.jp/signup/" Do While ObjIE.ReadyState <> 4 Do While ObjIE.Busy = True Loop Loop For Each Obj In ObjIE.Document.getElementsByTagName("input") If Obj.Name = "mail" Then ObjIE.Document.getElementsByName("mail")(0).Value = Range("A1").Value Else If Obj.Name = "password" Then ObjIE.Document.getElementsByName("password")(0).Value = Range("B1").Value Else Exit For If Obj.alt = "新規無料登録" Then Obj.Click Exit For End If End If End If Next End Sub

専門家に質問してみよう