• ベストアンサー
  • すぐに回答を!

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

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数437
  • ありがとう数0

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

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

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

その他の回答 (1)

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • 実行時エラー 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)

    VBAで、VBAの標準モジュールを削除したいのですが、なかなか出来ません。たぶん、コレクションについての認識があまいからだと思います。VBComponents コレクションのobject.Remove(component)のヘルプには、VBProjects コレクションには、スタンドアロン プロジェクトを指定します。とありますが、そもそもスタンドアロンプロジェクトって何ですか?Application.VBE.VBProjects(4).VBComponents(1).とするとコレクションでなくなってしまいますが、どうやってモジュールと特定するのでしょうか?どなたか詳しい方いらっしゃいましたらご指導願います。よろしくお願いいたします。 VBIDEのライブラリーです。

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

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

  • 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 以上のように記述し指定のエクセルファイルをオープンすることはできたのですが ここからどうやって標準モジュールを参照し、その中の関数を実行するかがわかりません。

  • 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

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

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

  • 【VBA】SUBプロシージャーは標準モジュール以外に書いてもいい?

    ThisWorkbookのコードを書く場所や Sheetのイベントプロシージャーが実行されるところに Sub test() MsgBox "あああ" End Sub と書いて実行するとメッセージボックスが表示されます。 クラスモジュールとフォームのイベントプロシージャーを書くところではできませんでした。 ということはSUBプロシージャーは 標準モジュールでなくてもいいのでしょうか?

  • Friend は標準モジュールじゃ宣言できない?

    Public Sub test1() End Sub とは出来るけど Friend Sub test2() End Sub はできないのでしょうか? Friend Sub test2を標準モジュールに書こうとすると -------------------------------- コンパイルエラー オブジェクト モジュールでのみ有効です。 使用したステートメントまたは構文要素 (たとえば、Implements ステートメント、WithEvents キーワード、イベント シンクなど) は、オブジェクト モジュール以外のコードでは使用できません。 エラーの原因となったステートメントを、オブジェクト モジュール内に記述します。 -------------------------------- となってしまいます。 「オブジェクト モジュール以外のコードでは使用できません。 」=標準モジュールでは使用できないと言う事でしょうか?

  • 自作モジュールを認識しない

    Perl 5.8 自作モジュールのあるフォルダをFOLDER、モジュールの名前をMODULEとして以下のコードを実行してもモジュールが見つからない旨のメッセージが表示されます。 モジュールの拡張子は.pmを使用しています。 また、モジュールを標準の拡張モジュールのおき場所に置いた場合は適切に動作しました。 #! /usr/local/bin/perl push (@INC ,FOLDER); use MODULE;

    • ベストアンサー
    • Perl
  • VBA PERSONAL以外に記述すると・・・

    普段はPERSONAL.xlsにモジュールを追加し、そこにプログラムを書いていますが、 人に渡す必要がある場合は、渡す対象のブックにモジュールを追加して書いています。 仮にそのブックをabc.xlsといたしますと、 abcのモジュールに記述した場合と、PERSONALに記述した場合とで、 動きが違う時があり、その違いは何故生じるのかを知りたいのです。 シートをコピーしたり、他のブックから移動したりすると、 (例えば ThisWorkbook.Sheets(1).Copy after:=ThisWorkbook.Sheets(2) とか、 Workbooks("xyz.xls").Sheets(1).Copy after:=ThisWorkbook.Sheets(2) とか) その処理が終わった時点で、プログラムが終了してしまうのです。 abc.xlsの「ThisWorkbook」に記述しても、結果は変わりません。 前述の通り、PERSONALの標準モジュールに書くと最後まで処理されます。 何か根本的に間違えていると思うのですが(汗)、よろしくお願いします。