自身が記述された標準モジュールを常に参照する方法

このQ&Aのポイント
  • 標準モジュール名を指定せず、自身が記述された標準モジュールを常に参照する方法
  • 標準モジュール名を変更しても動作するようにする方法
  • ThisWorkbookを使用して自身が記述されたモジュールを参照する方法
回答を見る
  • ベストアンサー

自身が記述された標準モジュールを常に参照する方法

標準モジュール名を指定せず、自身が記述された標準モジュールを常に参照する方法 例えば A = W_Book.VBProject.VBComponents("Module56").CodeModule.ProcBodyLine("Workbook_SheetSelectionChange", 0) というコードを"Module56"内に記述した場合Module56という標準モジュール名を例えばModule44と変更してしまうと動かなくなってしまうと思います。 これを、常にThisWorkbookのように、このコードが記述されたモジュールを参照するように変更はできますでしょうか?もしご存知でしたらご回答頂けますと幸いです。どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

VB6系では無理っぽいですね。 ActiveCodePane も VBE の画面でアクティブの意味のようで、 「マクロの実行」から呼び出しを変更しても変わりませんでした。 プログラムの実行中はメモリのアドレスなどで管理されていて、 文字列情報は保持されていないようです。 (情報が失われているので実行中に文字列情報まで遡る手段が無い) デバッグ目的等でエラーの発生したプロシージャを特定したり する工夫をしているような方法を紹介しているサイトもありましたが、 結局、コード上に最初から埋め込んでおくしかないようです。 (ソースコードを自動で編集して、埋め込む情報自体を自動で 作成するプログラムを作って対応していました。)

cayman_co_ltd
質問者

補足

ご回答誠に有難うございます、やはり、言語の制約で既に難しいということですね、それが分かっただけでも非常に参考になりました、アドバイス有難うございました。

その他の回答 (1)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

実行中なら Application.VBE.ActiveCodePane.CodeModule かな。

cayman_co_ltd
質問者

補足

ご回答誠に有難うございます、現在は例えばModule57にショートカットを割り当てて(いわゆる実行したいプログラムのセレクター)、そこから実行したいプログラムの番号をインプットボックスで入力すると該当する(例えばModule2)モジュールを呼び出し実行できるというような構成にしているのですが、この場合Module57でCallされたModule2内に記載した Set ThisCodeModule = Application.VBE.ActiveCodePane.CodeModule というコードだとThisCodeModuleにModule57が設定されてしまうようです。この場合にModule2を参照するような設定にはできませんでしょうか?もしご存知でありましたらご指導いただけますと幸いです。よろしくお願いいたします。

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

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

  • VBAでのマクロ削除

    複数のExcelファイルを読み込み必要なデータのみをsheet1に寄せ集め最後にExcel形式で保存するというコードを書きました。保存したExcelファイルは、次回同じVBAのコードからWorkbooks.Open Filenameで開く必要があるため、マクロを削除してから保存しないといけないことに気付きました。 ACompo = ExcelWorkbook1.VBProject.VBComponents.Item("module1") ExcelWorkbook1.VBProject.VBComponents.Remove (ACompo) 最終的にやりたいことは、3つのフォームと2つの標準モジュールを削除したい(ワークブックモジュールにもコード書いてありますのでそれも) ということになります。 よろしくお願いします。

  • 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で追加したマクロです。""" なにか良い方法がありましたらご教授下さい。どうぞ宜しくお願いします。

  • 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

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

    '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キーワードの使用方法が不正です」と出ます。 どこを直せば動くようになりますか?

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

  • ExcelVBA 標準モジュール内関数の呼出し

    VB6.0からExcelの標準モジュール内のパラメータ付関数を呼出すにはどうしたらよろしいでしょうか? Dim app As Excel.Application Dim wb As Workbook Set app = CreateObject("excel.application") Set wb = app.Workbooks.Open("TestXl.xls") Set app = Nothing 以上のように記述し指定のエクセルファイルをオープンすることはできたのですが ここからどうやって標準モジュールを参照し、その中の関数を実行するかがわかりません。

  • エクセルVBAで標準モジュールを保護したい

    エクセルのVBAマクロを使用したエクセルフィルがあります。 ユーザーは標準モジュールに記述した関数を使ってシートのマクロを変更してカストマイズできます。 ユーザーが標準モジュールを変更すると使用できなくなりますので、この標準モジュールだけをユーザーが変更できない、または見えないようにする方法をご教示いただけませんか。 よろしくお願いします。

  • excel2013 モジュールをVBAで書換えたい

    お世話になります。 現行使用しているモジュール内に記述されているファイル名をVBAで書き換えたいのです。 現状コーディング中に記述されているファイル名には、頭に年度を表わす、例えば 2014年なら下2桁の "14データ処理用" と書かれていて、年度が変わるたびに、 14を15の様にキーボードより編集しています。  しかしモジュールの中にファイル名の記述箇所が複数あり、またモジュールは複数あり その中にもその年のファイル名が記述されているために修正も一苦労しています。 そこでVBAのコードの記述を変換するためのフォームを作成し、西暦の下2桁を、前年、当年 それぞれ入力し、前年で検索して当年に置換するようにしたのですが、実行時エラー'13' で落ちてしまいます。 PCはゲストで使用しています。御存じのかたいらっしゃいましたらご教示願います。 以下VBAのコーディングです。宜しくお願いします。 Option Explicit Dim Target As Workbook, VBC, i As Long Private Sub CommandButton1_Click() Set Target = Workbooks(Sheet1) With Target.Workbooks(Sheet1).VBProject.VBComponents("Module1").CodeModule For i = 1 To .CountOfLines If .Lines(i, 1) = "" & In_Year & "データ" Then 'In_Year;前年 .ReplaceLine i, "" & Out_Year & "データ" 'Out_Year;当年 End If Next i End With Target.Save End Sub

専門家に質問してみよう