ここから本文です

Excel VBA で、 自分の関数名を取得したいのですが、良い方法ありますか? 例...

ak_185さん

2007/10/315:34:45

Excel VBA で、
自分の関数名を取得したいのですが、良い方法ありますか?

例えば、
Sub Test()
Debug.Print GetMethodName()
End Sub

↓結果
Test

としたいです。

補足補足1:関数が300以上あり、1つ1つ書いていくと間違える可能性があるので、いい方法がないかと思っています。

補足2:ProcOfLine っという回答ですが、1行づつチェックするっということでしょうか?

閲覧数:
15,168
回答数:
3

違反報告

ベストアンサーに選ばれた回答

アバター

ID非公開さん

編集あり2007/10/711:49:00

単純に考えると、VBAのソースが Pコードにコンパイルされた時点で、関数名やら変数名やらの情報は失われるわけですから
「実行時」には自分自身のであろうが、なんだろうが名前を知りようもないのではないでしょうか。

関数が多くあるというのなら、いったんソースをエクスポートして、awk でも使うなり、perlなりなんなり適当な言語で、なんなら VBAで
Sub Test(foo)
hogehoge
End Sub

Sub Test(foo)
Debug.Print "Test"
hogehoge
End Sub
といった具合に書き換えて吐き出すスクリプトを書いてはいかがでしょうか。

"Excel" VBAで書くのはじゃまくさいですが、たとえばこんなかんじ

Sub WriteDebugPrint()
Dim strInFn As String
Dim strOutFn As String
Dim InFn As Long, OutFn As Long
Dim strL As String

strInFn = Application.GetOpenFilename("Basicファイル (*.BAS), *.bas", 1, "読み込むファイル", , False)
strOutFn = InputBox("書き出すファイル")

InFn = FreeFile
Open strInFn For Input As #InFn
OutFn = FreeFile
Open strOutFn For Output As #OutFn

Do While Not EOF(InFn)
Line Input #InFn, strL
Print #OutFn, strL
If strL <> "" Then
If Split(strL)(0) = "Sub" Then
Print #OutFn, "DebugPrint " & Chr(34) & Split(Split(strL)(1), "(")(0) & Chr(34)
End If
End If
Loop

Close #InFn
Close #OutFn
End Sub

エラーチェックしてません。Subプロシージャしか見てません。(Function とか・・・)
使えるように適当に修正してください。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

my_offiseさん

編集あり2007/10/418:54:17

CodeModule オブジェクトの ProcOfLine

http://support.microsoft.com/kb/410621/ja

追記です・・・・

↑ 上を見ればわかると思うんだけどな?


Sub Sanp()
Dim i As Integer, myMsg As String, Cu, CuName, CodeName()
Cu = 0
With ThisWorkbook.VBProject.VBComponents.Item("Module1").CodeModule
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・↑任意指定モジュール
'モジュールそのものも ループ想定時は? モジュールも配列に入れます
CuName = ""

For i = 1 To .CountOfLines
If CuName <> .ProcOfLine(i, 0) Then
CuName = .ProcOfLine(i, 0)
ReDim Preserve CodeName(Cu)
CodeName(Cu) = CuName
Cu = Cu + 1
End If
Next i
End With

For i = 0 To UBound(CodeName)
myMsg = myMsg & Chr(13) & CodeName(i)
Next i
MsgBox myMsg
End Sub

choc_dashさん

2007/10/315:43:41

Debug.Print ("Test")
でよいのでは?

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。