• ベストアンサー

エクセルVBAでpublic functionを使っているのですが・・・

エクセルVBAでpublic functionを使っているのですがmicrosoft excel objectsで作成してもフォームからは使えないしフォームで作成してもmicrosoft excel objectsから使えないので困っています、両方から使えるようにできませんか?お願いします。

  • satooo
  • お礼率39% (127/321)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>microsoft excel objectsで作成しても Microsoft Excel Objects というのは、VBAでは、Excel Applicationオブジェクトのことを指すように思います。それを作成するというと、WordやAccess やVBなどの外部から使うという意味に取れますが、コードがないので、意味がはっきりしません。 もし、そうでないのでしたら、標準モジュールでは、別に、Public ステートメントをつけなくても使えるはずです。Public ステートメントは、変数ではありませんので、この際、あまり役に立ちませんね。 一般性のないユーザー定義関数の場合、通常は、同じモジュールの中に、Private ステートメントをつけて使いますし、また、そのほうが安全な気もします。 もしも、単独のユーザー定義関数でしたら、つまり、別のブックのユーザー定義関数でしたら、そのProject自体を、参照設定するか、アドインにして、一旦、アドインを読んでから使用するか、 A = Application.Run("ブック名!ユーザー定義関数名") とすれば、取れるはずです。

satooo
質問者

お礼

ありがとうございます。

その他の回答 (1)

回答No.1

どこからでも参照できるFunctionを作りたいのでしたら、 標準モジュールに書く必要があります。 まず、「VBAproject」を右クリックして「挿入」→「標準モジュール」を選んでください。そうすると、標準モジュール→Module1が追加されます。ここにPublicで書くとどこからでも参照できるようになります。

satooo
質問者

お礼

どうもありがとうございます。早速試してみます。

関連するQ&A

  • Excel VBA でFunctionプロシジャがどのセルから呼び出されたか知る方法

    Excel VBA で御教授いただきたいのですが、 ExcelのセルからFunctionプロシジャを呼び出し、その戻り値を呼び出しもとのセルに返す。 この時その戻り値によって、セルの属性を変化(例えば色替えなど)を、行いたいものです。 セル属性の変更の方法はわかるのですが、Functionプロシジャがどのセルから呼ばれたかが不明のため、どのセルに対して属性変更を行ってよいかがわからず困っています。 Functionプロシジャ中で、Functionプロシジャがどのセルから呼ばれたか知る方法をご存知の方がいらっしゃいましたら御教授御願いします。 OS:Windows2000 Excel:2000 です。

  • VBAをExcel2010/2013で利用

    下記URLのサンプルファイルに含まれるVBAで作成されたユーザー定義関数について、 Excel2003(Windows7)の環境で利用することが出来ました。 http://www.relief.jp/itnote/archives/003799.php しかしながら、Excel2010およびExcel2013(ともにWindows7)で開くと、結果が #VALUE! と変わってしまい、正しく表示されませんでした。 VBAの参照設定でも同じものにチェックを入れている状態ですが、うまくいきません。 (ただし、Microsoft Excel XX.X Object LibraryやMicrosoft Office XX.X Object Library などバージョンの差異はあり) Excel2010またはExcel2013において、このユーザー定義関数を 正しく利用できる方法が分かりましたらご教示いただけますと助かります。

  • AccessからExcelへエクスポートするVBA

    いつもお世話になっております。 AccessのクエリからデータをExcelにエクスポートします。 形式はMicrosoft Excel97-2003です。 フォーム"F_全データ"にボタンを付けて、クリックするとファイル名を自分で付けて保存する。というVBAを作成したいです。 1つ目のVBAは DoCmd.OutputTo acForm, "F6_全データ", "MicrosoftExcelBiff8(*.xls)", "", False, "", 0 これだと、ファイルの種類が、Microsoft Excel5-7になってしまい困ります。 この形式になってしまうと、Excelデータを開くと、文字数が多いところが保存されていません。これだと困ります。 2つ目が DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "F_全データ", "○○○.xls" こちらですと、ファイルの種類は97-2003になりまして、問題はないのですが、ファイル名は自分で指定したいのです。 ご指導よろしくお願いします。

  • エクセルVBAで未使用のSUBやFunction

    エクセルVBA内で未使用のSUBやFunctionを洗い出したい。 例えばSUB_Aを読んでいる箇所についてソース内を検索すれば 解りますが、subやfunctionの量が多いので、 何か簡単に調べる方法はありますか?

  • EXCEL VBA 保護したシートを読込みしたい

    お世話になります。 EXCEL VBAで「データ」というシートあります。ここの100件ほどのデータが入っており、もう1つの「集計」というシートにフォームを作成してそのフォームからVBAを使って集計するのですが、この「データ」シートはユーザーにいじられたくないので保護もしくは非表示にしたいと思っています。 しかし「データ」シートを保護してしまうとVBAで「データ」シート読み込む際にエラーになってしまいます。 何かよい方法はありますでしょうか? 環境 WindowsXP SP3 Excel2003

  • エクセル2007

    すいません。どなたかお教え下さい。 今までのエクセルでVBAで作ったもので、使えないものがあります。もともとの関数ではなく、Functionプロシージャ(でしたでしょうか?)で自分で作った関数が使えないようなのです。 新しいエクセルの参照設定はMicrosoft Excel 12.0 Object Libraryで、今までのはMicrosoft Excel 9.0 Object Library でした。(Microsoft Office 12.0 Object Libraryも同様に9.0でした) これが原因じゃないかと思っているのですが、もしそうだとすると、これの解決方法を教えて欲しいです。 これが原因じゃないとしたら、原因として考えられることを教えて欲しいです。 漠然とした質問で申し訳ないです。

  • Excel VBA の受験にあたって

    Excel VBAの試験を受けたいと思っています。 そこで1つお聞きしたいのですが、 現在、私のExcelはXP(2002)です。 やはり、Excel VBAの2002を受験すべきでしょうか。 今後なくなってしまうかもしれない資格なら トータル的なExcel VBAを受験したいのですが、 環境が整っていないのに受験するのは困難でしょうか。。。 また、VBAは素人なのですが ベーシックとスタンダードの両方を取得するのに 4ヶ月では難しいでしょうか。 どなたかアドバイスをよろしくお願いします。

  • microsoft excel objectsとは

    普段、VBAでプログラムを書いているのですが、 標準モジュールとフォームはよく使うのですが、 microsoft excel objectsというものは全く使用していません。 検索してみると、シートやグラフが保存されていると書かれてあるページが見つかったくらいで 使い方に関しては見つかりませんでした。 ここにコードを書くことによってVBAを使うことができるのでしょうか?

  • VBAエキスパートExcelベーシック

    Microsoft Office SpecialistのExcel Expert以外を取得しました。 Excel Expertの機能の勉強はしたことがあります。 Excel Expertを飛ばして、VBAエキスパートExcelベーシックをやっても大丈夫でしょうか? わかる方がいましたら、教えて下さい。

  • VBAでFunctionの使い方

    エクセルのVBAでFunctionの使い方がいまいちよくわかりません。 Function msg() Dim h As Integer h = Hour(Time) Select Case h Case Is < 12: msg = "おはようございます。" Case Is < 17: msg = "こんにちは。" Case Else: msg = "こんばんは。" End Select End Function Sub 挨拶() MsgBox msg End Sub とやってみたら一応正しく動くようですが、これであっているのでしょうか? 他の例などを見るとFunction msg()の()内にも何か入れなければならないようなのですが、わかりません。

専門家に質問してみよう