VBAコードの取得方法と実行時エラー2001について

このQ&Aのポイント
  • Excel VBAコードを取得する方法について説明しています。具体的には、ThisWorkbook.VBProject.VBComponentsを使用してコードを取得する手順を説明しています。
  • 実行時エラー2001が発生する原因について説明しています。具体的には、'VBProject'メソッドを使用する際に発生するエラーについて解説しています。
  • Code = ThisWorkbook.VBProject.VBComponents('Module1').CodeModule.Lines(7, 5)の行で発生する実行時エラー2001について質問しています。正しいコードの取得方法や問題の解決策を教えてください。
回答を見る
  • ベストアンサー

実行時エラー 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.~ の行で発生します。 何が間違ってますか?

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

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

こんにちは。 > 何が間違ってますか? コードの問題ではなくて、実行環境の問題です。 VBIDEのオブジェクトへのアクセスについて Excelでは、セキュリティを重く見て、 初期設定ではアクセスできないように設定されています。 設定変更手順 (例えば、Excel2010の例で) [ファイル]タブ ┗[オプション]┅『Excelのオプション』  ┗[セキュリティ センター]   ┗[セキュリティ センターの設定]┅『セキュリティ センター』    ┗[マクロの設定]     ┗「開発者向けのマクロ設定」      ┗ (チェックボックス チェック) VBA プロジェクト オブジェクト モデルへのアクセスを信頼する        ↑チェックする      ┅[OK]  ┅[OK] 以下のページでも説明はあるようです。 『2回目からはマクロの警告しません』 http://officetanaka.net/excel/excel2010/008.htm 設定変更直後は、最初の実行の際に、 「信頼」をとうような形で1回だけエラー(警告)ダイアログがでるようです。 最近の私は使い始めからVBEの各種設定を移植してしまうので、 ご指摘のようなエラーを経験したのはExcel2000の頃でした。 勿論、Excelのバージョンによって設定の手順は変わります。 『VBEを操作するための準備』 http://officetanaka.net/excel/vba/vbe/01.htm

MBKCDDLSIQF
質問者

お礼

どうもありがとうございました。

関連するQ&A

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

    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になってしまいます。

  • 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

  • 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

  • Excelのマクロが実行されない

    Excelを立ち上げ、VBEでThisWorkbookに以下のマクロを記述します。 Dim WithEvents a As Workbook, WithEvents b As Workbook, WithEvents c As Workbook, WithEvents d As Workbook Private Sub Workbook_Open() Stop End Sub ファイルを保存してから起動し、マクロを有効にすると Stop で停止します。 ここで一旦 Stop を削除してから再度 Stop を挿入してから保存します。 再びこのファイルを起動し、マクロを有効にしても Stop で停止しません。 今回は簡単のため Stop にしていますが、実際には起動時の処理が実行されないため困っています。 OSはWindows7,Excelは2007です。

  • ミリ秒を○時間○分○秒にしたい

    http://www.excellenceweb.net/vba/api/what_windows_api.html のページを参考にPC起動時間を取得したいのですが サンプルは単位がミリ秒になっています。 -------------------------------------------------- Declare Function GetTickCount Lib "kernel32.dll" () As Long Sub TEST1() Dim Tickcount As Long 'GetTickCount関数から、起動からの時間が返される Tickcount = GetTickCount() MsgBox "PC起動から " & Tickcount & " ミリ秒経過しています" End Sub -------------------------------------------------- ○時間○分○秒にしたいのですが どうすればいいでしょうか? Formatを使うと思うのですが どういうコードを書けばいいのかわかりません。 ご教授よろしくお願いします。

  • VBA 「何時間何分何秒」にするにはどうすればいい

    Declare Function GetTickCount Lib "KERNEL32" () As Long Sub Sample() Debug.Print GetTickCount & "ミリ秒" End Sub これで取得される値を 「何時間何分何秒」にするにはどうすればいいでしょうか? Format(GetTickCount, "hh:mm:ss") にするとなぜかオーバーフローしてしまいました。

  • Excel VBAでオブジェクト名を変更する方法

    Excelでシートを新規追加するマクロを作っています。この時、下記のようなコードでシート名を変更するのですが、同時にオブジェクト名も変更する事は可能でしょうか? Sheets.Add ActiveSheet.Name = "テスト" なぜオブジェクト名も変更したいのかと言いますと、動的にイベントプロシージャを作成する際、下記のようなコードを記述してるのですが、シート名とオブジェクト名が一致してないとエラーが出てしまうんです。 Dim cdMoj as CodeModule Dim Ln as Long Set cdMoj = ThisWorkBook.VBProject.VBComponents(ActiveSheet.Name).CodeModule Ln = cdMoj.CreateEventProc("Click", "Command1") cdMoj.InsertLines Ln + 1, "MsgBox ""VBAで追加したマクロです。""" なにか良い方法がありましたらご教授下さい。どうぞ宜しくお願いします。

  • オーバーフローしちゃった・・・

    http://www.excellenceweb.net/vba/api/what_windows_api.html をさんこうに、PC起動からの時間を取得しつつ、○○時間○○分という形で返したいのですが Option Explicit Declare Function GetTickCount Lib "kernel32.dll" () As Long Sub TEST1() Dim Tickcount As Long Tickcount = GetTickCount() Tickcount = Format(Tickcount, "hh:mm") Debug.Print "PC起動から " & Tickcount & " ミリ秒経過しています" End Sub これを実行すると、オーバーフローしました。になってしまいます。 どこがおかしいのでしょうか?

  • Excel 2007 VBAで実行時エラー

    Excel 2007のVBAで、EUCコードの変換を試す下記コードの(6)行に「実行時エラー '424' オブジェクトが必要です」となります。 修正方法を教えて頂きたくよろしくお願い致します。 (1) Sub Test() (2) Dim str As String (3) Dim bytesData(1) As Byte (4) bytesData(0) = &HC0 (5) bytesData(1) = &HA4 (6) str = System.Text.Encoding.GetEncoding(51932).GetString(bytesData) (7) MsgBox str (8) End Sub

  • 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 -------------------------------------------------------------------------------------------------------

専門家に質問してみよう