今だけ人気マンガ100円レンタル特集♪

プロシージャ名を取得できないかなと考えています。
・Form_Openプロシージャ内で「Form_Open」という文字を取得
・フォーム上に「新規登録」というボタンを作成、クリックした時にできる「新規登録_Click」プロシージャ内で「新規登録_Click」という文字を取得
不可能な場合、各プロシージャに「Form_Open」や「新規登録_Click」をベタ書きしようと考えていますが、非効率と考え、やりたくありません。
できればバージョンは2000以降で、ExcelでもAccessでも構いません。
可能かどうかだけでも教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>不可能な場合、各プロシージャに「Form_Open」や「新規登録_Click」をベタ書きしようと考えていますが



何がしたいのか全く解りませんが、”プロシージャ名取得”の関連情報のリンクだけ紹介しておきます。


http://oshiete1.goo.ne.jp/qa1219426.html
http://park7.wakwak.com/cgi-bin/sbox/~efc21/exqa …
http://www.officetanaka.net/excel/vba/vbe/05.htm
http://support.microsoft.com/kb/410621/ja

http://search.goo.ne.jp/web.jsp?dummy=%F3%FE%F3% …
    • good
    • 2

こんにちは。



>できればバージョンは2000以降で、ExcelでもAccessでも構いません。

最初に、もし、マクロを作成しようとするなら、アプリケーションは決めてください。内容的にみて、設計のあやふやなものは、回答しにくいです。Excelは、Excel VBAで、Access はAccess VBAのスタイルがあります。共有する部分はあっても、スタイルが違います。

ハンドル名から、VBAをjobにしているなら、素人の方だとは思いませんが、タスク(仕事)と、その作業過程の、主と従は混同しないほうがよいです。その過程の内容を限定して、可能かどうかと聞かれても、経験の多少に関わらず、ご自身でさえ見通しの立てられないものは、掲示板で聞いても、ほぼ無理と考えたほうがよいです。

今回は、Yes ともNoとも回答できません。
編集のテクニックなのか、マクロ作業中なのか、その区分けすら分かりません。

>・Form_Openプロシージャ内で「Form_Open」という文字を取得

>・フォーム上に「新規登録」というボタンを作成、クリックした時にできる「新規登録_Click」プロシージャ内で「新規登録_Click」という文字を取得

実際に、実行中のプロシージャ名を取るのは、VB.Net にはありますが、VB6系では用意されていません。少なくとも私は知りません。コードの中にあらかじめ書いておくしかありません。そんなに手間でもないと思います。

'例:
MsgBox "Run on procedure CommandButton1_Click of Form UserForm1"

しかし、このようなスタイルが成立するのは、On Error Goto ErrorHandler で、エラーが起きたときだけです。

稼働中のコントロール名を取得するなら、こうなります。
MsgBox ActiveControl.Name

こちらは、実行後にコントロールのプロパティを変更する場合に使用します。

この辺りは、どこまでできているのでしょう。

『「新規登録_Click」をベタ書き』というのは、それぞれのコードに書き入れたくないということでしょうか。何に対して非効率なのか、いまひとつ、共感が沸きません。たとえば、まさかコピー&ペーストが面倒だということでもないと思います。

どういう状況でなぜ必要なのかとか、そういう説明がありません。Error 発生の際のどこから発生しているか、それを提示する以外には、プロシージャ名を取るのはあまり意味がありません。

大事なことは、最終的に、何をしたいかなのです。
    • good
    • 0

Excelの場合


workbookに含まれるVBのコードを扱うには次のObjectを使用します

ActiveWorkbook.VBProject.VBComponents
メソッドやプロパティは自分で調べてください。

私はVBのコードをテキストに吐き出して分析するために以下のようなコードを書きました。(一部ですが)
For Each vbo In ActiveWorkbook.VBProject.VBComponents
If (vbo.Type = 1 Or vbo.Type = 2) And vbo.Name <> "VBE" Then
i = i + 1
モジュール名(i) = vbo.Name
vbo.Export filename:=tempパス & モジュール名(i) & ".bas"
End If
Next
VBAのコードを書き換えることがVBAでできるかどうかはわかりません。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qプロシージャ名の取得

教えてください。
VBで現在実行しているプロシージャ名を取得指定のですがkのようなことは可能ですか?
可能ならばどのようにすればいいか教えてください。

現在実行ファイルにて起動しているのですが、どこかで「実行エラー」が発生しています。
この実行エラーの場所の特定のために、現在起動中のプロシージャ名をログに保存しようかと考えています。
また、その他このようなエラー箇所特定方法などがありましたら教えてください。
環境:VB6.0  Win2000

Aベストアンサー

残念ながら出来ません。

私のプロジェクトでは全てのプロシージャに On Error コーディングをして、そこでログにどのプロシージャかを書いてました。

そういう方法しかないと思います。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Q【VBA-AC2000】カレントプロシージャ名を取得したい

AC2000+MSSQL2000環境でVBAを使ってアプリケーション開発しています。

エラー時にユーザー定義関数を使ってカレントフォーム名やカレントコントロール名をメールで送るようにしています。

さらに追加して、どのプロシージャでえらーが起こっているのか知りたく、、コードの中でカレントプロシージャ名を取得する方法ってないでしょうか?

Aベストアンサー

> アクセス自体は絶対にどこかにこの情報(実行中のプロシージャー名)
> を持っていると思うのですが

それは管理してますよね。しかし、詳しいわけではありませんが、恐らく
それはプロシージャのメモリ上の位置でだと思います。String 型のプロ
シージャ名で管理してるわけではないでしょう。

 # VBA は純粋なインタプリタ言語ではありません

また、.NET だと GetCurrentMethod でプロシージャ名を取得できますが、
VB6/VBA にはこれに該当するものがありません。

つまり、実行のたび変化するであろうメモリ上の位置しか取得できないと
すれば、それを人間にとって意味のある情報(文字列のプロシージャ名)
にするのは非常に困難だと考えます。

したがって、取り得る方法としては #1 に示したように、全てのプロシージャ
でエラーハンドリングを行い、その中でプロシージャ名をログ出力する
しかないかと思います。

もちろん、On Error でトラップできないエラーもありますけどね。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング