自作アドインのFunctionプロシージャの戻り値を取得する方法

このQ&Aのポイント
  • ExcelVBAのコード内で、自作アドインのFunctionプロシージャを呼び出して戻り値を取得する方法を解説します。
  • アドイン内のSubプロシージャを呼び出す方法とは異なり、Functionプロシージャの戻り値を取得するためには特別な処理が必要です。
  • 具体的な手順や注意点についても説明します。
回答を見る
  • ベストアンサー

自作アドインのFunctionプロシージャの戻り値を取得

ExcelVBAのコード内で、自作アドインのFunctionプロシージャを呼び出して戻り値を取得したいのですが、方法がわかりません。 例えば、AddinTest.xlaにPublic Function FuncTest()があり、その戻り値が"Test"だとして、他のExcelファイルのマクロ内で、Msgboxで戻り値"Test"を表示するなど。。。 アドイン内のSubプロシージャを呼び出すには、Application.Run macro:="AddinTest.xla!~"と記述すれば呼び出せることはわかったんですが、Functionプロシージャの戻り値を取得することができないのです。 よろしくご教授ください。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

RET = Application.Run("AddinTest.xla!~",引数1,引数2,・・・) MsgBox RET で可能かと思いますが?

takaandhiro
質問者

お礼

できました。 ありがとうございます。

関連するQ&A

  • ExcelVBAで他のファイル(project)のプロシージャから配列の戻り値を取得したい

    自作アドインに、byref型で配列を引数にしたプロシージャを作り、別のファイルのプロシージャからそのアドインを呼び出して、アドインのプロシージャで配列に処理をして、その結果を呼び出し元のファイルのプロシージャで使用したいのですが、処理できないようです。 例えば、 アドイン側 myAddin.xla sub test(byref strAry() as string) strAry(0)="a":strary(1)="b" end sub 呼び出し元 sub execute() dim myAry() as string redim myAry(1) application.run macro:="myAddin.xla!test",arg1:=myAry() msgbox myAry(0) & "-" & myAry(1) end sub 上記のコーディングをしても、表示されるメッセージは "-" のみです。 アドインの処理はまったく反映されていません。 変数であればアドイン側をFunctionにして戻り値を取得できたのですが、配列ですとうまくいきません。 別のプロジェクトから、配列を返す方法はありませんか?

  • Functionプロシージャの便利さがわかりません

    私はVBAコードを作る時は、もっぱらsubプロシージャーを使ってしまうのですが、 http://excelvba.pc-users.net/fol5/5_4.html を参考に、 Functionプロシージャとsubプロシージャの違いを確認してみたのですが、 Functionプロシージャの便利さがわかりません。 *********************************** Sub Test() SubプロシージャとFunctionプロシージャのテスト i = 1 Call Subプロシージャ(i) i = Functionプロシージャ(i) MsgBox "Functionプロシージャ結果:" + CStr(i) End Sub Sub Subプロシージャ(ByVal i As Integer) MsgBox "Subプロシージャ結果:" + CStr(i) End Sub Function Functionプロシージャ(ByVal i As Integer) As Integer i = i + 1 Functionプロシージャ = i End Function *********************************** Functionプロシージャは、 (ByVal i As Integer) As Integer のように、、二回もデータ型(Integer)の指定をしなくてはいけないのでしょうか? リンク先の説明には、 「SubプロシージャとFunctionプロシージャの違いは Subプロシージャが引数を受け取るのみに対して Functionプロシージャは引数を受け取り、 戻り値を返すという関数としての役割を果たすことができる点です。」 と記載されてますが、 それはSubプロシージャでも出来てますよね? サンプルコードにおいてのFunctionプロシージャの便利さを教えてください。

  • Functionプロシージャーで作成する理由は

    いくつかVBAのサンプルを見てるのですが http://www.accessclub.jp/supbeg/063.html のように、戻り値を必要としない(msgboxにしちゃってる)のに、 Functionプロシージャーで作成するのはなぜでしょうか? subプロシージャーで作らない意味はありますか?

  • EXCELVBAでのFunctionプロシージャの戻り値について

    こんにちは。EXCELVBAの本を見てわからないことがあったので、教えてください。 まず、ソースコードは↓です Function P_OpenDatabase() As Integer On Error GoTo Err_Proc   Cn.ConnectionString=P_CnString()   Cn.Open Err_Proc:   If (Err.Number <> 0) Then     Call MsgBox(Err.Description)     Call MsgBox("データベースに接続できません")   End If   P_OpenDatabase = Err.Number…★ End Function で、わからないところは★の部分です 本の解説は↓です。 「プロシージャの戻り値を設定します。Errオブジェクトの「Number」プロパティにはエラーの番号が設定されているので、そのまま戻り値とします。処理が正常に行われたときには、Errオブジェクトの「Number」プロパティは「0(ゼロ)」になるので、戻り値も「0(ゼロ)」になります。」 僕が疑問に思っているのは処理が正常にされたとき(エラーがなかったとき)は、Err_Procの中の処理はされないので、戻り値には0が入らないのでは?と思ってしまうのですが。。 どうなんですかね?わかる方は教えてください。よろしくお願いします。

  • マクロ subプロシージャーは指定できない?

    accessのマクロの アクション:プロシージャの実行 は、 subプロシージャーは指定できないのでしょうか? 標準モジュールに Sub test1() MsgBox "プロシージャーの実行のテストです" End Sub Function test2() MsgBox "プロシージャーの実行のテストです" End Function と作り、 マクロのプロシージャの実行で プロシージャ名をtest2()にすると、うまく表示されますが、 test1()だと、失敗します。 subプロシージャーをマクロで呼び出す方法を教えてください。

  • Functionとsub どちらを使った方がいいで

    Functionとsub どちらを使った方がいいですか? VBA初心者です。 ------------------------ Sub test1() MsgBox "testです" End Sub Function test2() MsgBox "testです" End Function ------------------------ どちらのコードも結果は同じです。 基本的に、マクロを組む時は、Functionとsubとどちらを使った方が良いのでしょうか? ------------------------ Sub tset3() MsgBox test4 End Sub Function test4() test4 = "testです" End Function ------------------------ のように戻り値・返り値がある場合のみFunctionを使うべきなのでしょうか? ご回答よろしくお願いします。

  • SubではなくFunctionで作られる理由

    access2007を使っています。 素朴な疑問なのですがマクロを変換した時はなぜ Subプロシージャーではなく、Functionなのでしょうか? 「クエリを開く」と言うマクロを、VBAに変換したところ ******************************************************* Function マクロ1() On Error GoTo マクロ1_Err DoCmd.OpenQuery "クエリ1", acViewNormal, acEdit マクロ1_Exit: Exit Function マクロ1_Err: MsgBox Error$ Resume マクロ1_Exit End Function ******************************************************* となりました。 戻り値や返り値はないものは、FunctionプロシージャーではなくSubプロシージャーで作るものと思っていたのですが なぜ上記のコードはFunctionなのでしょうか? Functionで作る理由を教えてください。 特に意味はないのでしょうか? ちなみにFunctionをSubに書き換えて実行したら問題なくクエリが開きました。

  • 元のプロシージャーを取得するプロパティ

    Sub test1() Call test2 End Sub Sub test2() If ?? Then MsgBox "test1から実行されたマクロです。" End If End Sub 上記のコードで どこから実行されたプロシージャ化を取得する方法はありますか? 現在は、 Dim bl_test1_yes As Boolean Sub test1() bl_test1_yes = True Call test2(bl_test1_yes) End Sub Sub test2(bl_test1_yes) If bl_test1_yes = True Then MsgBox "test1から実行されたマクロです。" End If End Sub としていますが、 元のプロシージャーを取得するプロパティがあれば教えてください。

  • Functionプロシージャではなぜプロシージャ名=○○という文章が多いのか

    VBAを初めて使っています。 勉強してはいるのですが、混乱していて あまり理解できていません。 「Functionプロシージャとsubプロシージャの違いは、戻り値を返すか返さないか」という事までは知識としてわかったのですが、 ・・・サンプルプログラムをながめてみても、どう使えば良いのかまだわかりません。 大変愚問かと思われ申し訳ないのですが、Functionプロシージャの中で、 プロシージャ名=○○ というかたちがよく見られるのはなぜでしょうか。 Function abc abc="hello" というような。 多分これがわかればFunctionプロシージャの使い方が わかってくるのでは、と思っているのですが・・・。

  • 自作アドインの使い方

    エクセルで自作マクロを作りました。 内容的にはsheet1の全国の名簿を、都道府県単位でエクセルファイルに ふりわけるというものです。マクロ名は、furiwakeとしました。 これを「ふりわけ.xla」としておきました。 「ツール」→「アドイン」で有効なアドインとして「レ」を つけました。ここまではいいんです。 それでさっそく今月の「全国の名簿」を都道府県単位でエクセルファイルに振り分けたいのですが、どこを押せば、furiwakeマクロは実行されるのでしょうか?

専門家に質問してみよう