• 締切済み

エクセルVBAでプロシージャ名を取得したい

Excel97, Windows98SEを使用しています。 たとえば  Sub 図形処理()   処理1  End Sub というプロシージャがあった場合、 「処理1」でプロシージャ名(この場合「図形処理」という文字列)を取得するにはどういう風に記述すればよろしいでしょうか? ご存知の方、よろしくお願いいたします。

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 直接記述するしかないかも知れません。 私は、エラー時にどのプロシージャでエラーが起こったかを知るために、以下のように書いています。 Sub 図形処理()   On Error Goto Err_Handle   '処理   Exit Sub Err_Handle:   MsgBox "[図形処理]でエラーが発生しました。" End Sub あと、モジュール名を併記する場合もあります。

takahiro_
質問者

お礼

早速のご回答ありがとうございます。 シート上に数十個の図があり、それぞれに名前を付けています。ユーザー設定でツールバーを作成し、そこに配置したコマンドボタンをクリックすると、マクロを使ってその図を選択するという処理をする予定です。ツールバーは完成しております。 プロシージャ名と図の名前が同じなので、プロシージャ名を取得してそれと同じ名前の図形を選択したいのです。 図形名以外は全く同じ処理なのでサブルーチンを作成しているのですが、図形名もプロシージャ名を使って取得できたらと考えているのですが、やはり直接記述するしかないでしょうか? どうぞよろしくお願いいたします。

関連するQ&A

  • VBAのプロシージャのことで

    TEST1のプロシージャ内に使用している readfileという変数の中にテストという文字列を代入し、 文字列が代入された状態で Callによって別のプロシージャを読みにいったとき TEST(変数)に入った文字列ごと持っていくには どの様に記述すればよいかどなたか教えていただけませんでしょうか・・・。。 ----------------------------------------------------------- Sub TEST () Dim readfile As String readfile = "テスト" Call TEST2 End Sub ----------------------------------------------------------- Sub TEST2() readfile ←テストという文字列をTESTプロシージャから持ってきたい End Sub ----------------------------------------------------------- 単純に書いてみたコードですが、この様なことは可能なのでしょうか? すいませんがいただけないでしょうか><;

  • VBA プロシージャの名前の取得

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

  • プロシージャー名を変数にはできない?

    シートに test1 test2 test3 として、 -------------------------------- Sub Sample() Dim myRow As Long Dim procedure As String For myRow = 1 To Cells(Rows.Count, "A").End(xlUp).Row procedure = Cells(myRow, 1) Call procedure Next myRow End Sub Sub test1() End Sub Sub test2() End Sub Sub test3() End Sub -------------------------------- こういう事ってできないのでしょうか? シートの文字を読み取ってプロシージャーを実行できれば、順番変えたり、要らないプロシージャーを消したりを、シート上で管理できるから楽なのになと思ったのですが。 これをやろうとすると、procedureというプロシージャーがないから Sub、Function、または Property が必要です。 になってしまいます。

  • Excel VBA イベントプロシージャを2つ記述する(基本です)

    基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。

  • エクセルVBA イベントプロシージャに引数を渡せま

    お世話になります。 エクセル2003/XP 使用です。 イベントプロシージャに引数を渡せまるかどうか教えていただけますでしょうか? 下記のコード中の変数mysheetnameを ユーザーフォーム、→ CommandButton1のプロシージャに 引数として渡して行きたいのですが、 実行すると、一番最初のWorkbook_SheetBeforeRightClickの時点で、 コンパイルエラー:  プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。 とエラー表示されます。 イベントプロシージャに引数を渡すことはできますでしょうか? ---------- ThisWorkBook内 ---------- Public mysheetname As String Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) mysheetname = ActiveSheet.Name UserForm1.Show (mysheetname)     '←変数mysheetnameの値をユーザーフォームに渡したい。 End Sub ---------- ユーザーフォーム ---------- Private Sub UserForm_Initialize(ByVal mysheetname As String ) 処理 End Sub Private Sub CommandButton1_Click(ByVal mysheetname As String ) 処理 End Sub ’--------- ここまで 引数について少し理解し始めたばかりの者です。 よろしくお願いします。

  • エクセルからアクセスのプロシージャーを実行させるには?

    エクセルの標準モジュールには→エクセル側のプロシージャー アクセスの標準モジュールには→アクセス側のプロシージャー と言う名前のプロシージャーが作成されています。 これをどちらもエクセル側で実行させることは出来ないでしょうか? 「アクセス側のプロシージャー」ではアクセス側の処理が実行されます。 でもできればエクセル側のコマンドボタンを一回押すだけで エクセルとアクセスの両方の処理を実行させたいです。 エクセルの標準モジュールには Sub エクセル側のプロシージャー() Call アクセス側のプロシージャー End Sub これを実行すると コンパイルエラーになります。 どうすれば一度で二つのアプリケーションのプロシージャーを実行させることが可能でしょうか? よろしくお願い致します。

  • Excel VBA について

    ExcelのVBAのコードでB列の1カ所の「zz2300」を取得したいのですが、 どういう記述をすればよろしいのでしょうか。 ※その列には同じ文字は存在しません。 test=Range("b65535").End(xlUp).Rowの定義があるのですが使えますか?

  • 列の番号ではなく文字列で取得するには

    エクセル2003 Sub test() MsgBox ActiveCell.Column End Sub で現在カーソルのあるセルの列番号「3」が取得させるのですが 「C」と言う風に列の文字列で取得するにはどうすればいいのでしょうか? よろしくお願いします。

  • VBA プロシージャで値を渡す方法

    エクセルVBAのプロシージャで値を渡す方法はどうしたらいいのでしょうか。 たとえば、下記のようなプログラムを書いたとします。 --------------------------------------------- Private Sub test_main() Dim drink As String Dim alcohol As String Call test(cola, beer) End Sub Public Sub test_module(ByVal drink As String, ByVal alcohol As String) Cells(1, 1).Value = drink Cells(2, 2).Value = alcohol End Sub --------------------------------------------- このプログラムはもちろん不完全です。試してみたら動きませんでした。 やりたいことは、メインのプロシージャ(test_main)から、test_moduleを 呼び出し、同時に「cola」と「beer」の値を渡します。呼び出された先で、 エクセルのワークシートのセルに値を入力します。 重複しますが、それぞれの値「cola」と「beer」は変数「drink」と「alcohol」に代入されます。 この変数をcell(1,1)とcell(2,2)に入力します。 ワークシート上のcell(1,1)には「cola」、cell(2,2)には「beer」 と入力されます。 変数は数値ではなく、文字列です。 ポイントは、変数「drink」と「alcohol」をどのプロシージャに宣言するのか また、変数に値「cola」と「beer」をのどプロシージャでどういうふうに代入するのか。 そして代入した変数をどうやって呼び出したいプロシージャに渡すのかです。 このようなことをするには、上記プログラムをどう書き換えたらよいのでしょうか。

  • エクセルVBAで一番左の可視シート名を取得

    エクセルVBAで一番左側にあるシート名を取得する場合、通常は Sub test01()   MsgBox Sheets(1).Name End Sub で簡単にできますが、このSheets(1)が非表示になっている場合でもその名前が取得されるため、見た目での一番左側にあるシート名ではなくなってしまいます。 もちろん、非表示になっているシートを除外して Sub test02()   Dim n As Integer   For n = 1 To Sheets.Count     If Sheets(n).Visible Then       MsgBox Sheets(n).Name       Exit For     End If   Next End Sub とすれば取得できるのはわかりますが、こんなまだるっこい方法以外に簡単に一番左の可視シート名を取得する方法はないでしょうか? (^∇^)? ご教示くださいませ。

専門家に質問してみよう