
個人用マクロを作る練習で、あるサイトから下記サンプル①②をいれたのですが
sub macroを実行するとコンパイルエラー「subまたはFunctionが定義されていません」
となります。 エクセル2007です。
①personal.XLSBの標準モジュール
Function CalcTax(price As Long) As Double
Dim d As Date
Dim tax As Double
' 消費税が変わる基準日
d = #10/1/2019#
If d > Date Then
tax = 1.08
Else
tax = 1.1
End If
CalcTax = price * tax
End Function
②BOOK1の標準モジュール
Sub macro() ’消費税込み計算
Debug.Print (CalcTax(100))
End Sub
当初アドインで作ったのですが同じエラーで、アドイン設定に関係ない
個人用マクロにしましたが同じエラーです。
一旦保存して終了し再度開いてもエラーになります。
①の中にsub macroを入れて実行すると正しく110と表示されます。
何が不足していますでしょうか。
No.2ベストアンサー
- 回答日時:
こんにちは
事象は少しわからないのですが、下記の参考サイトのような手順で登録されたのでしょうか?
https://hirachin.com/post-7298/
関数登録はApplication.MacroOptions メソッドを使ったのでしょうか
https://docs.microsoft.com/ja-jp/office/vba/api/ …
PERSONAL.XLSBに関してもですが、他のブックのVBAを実行する場合
https://docs.microsoft.com/ja-jp/office/vba/api/ …
Application.Run "x!xx" のように呼ぶと思いますが、引数があるとうまく行かない場合があるようです
Callについては、対象VBAProjectがPublicでないので参照されていないとダメなのだと思います
各マクロ有効ブックのVBAProjectオブジェクト名は変更しないと同じ
VBAProjectとなります
VBEのオブジェクトブラウザのツリーを見ると確認できます
これを参照可能にするためには、#1で示したようにプロパティで
オブジェクト名を変更します
例えば、Personal_VBAProject 重複しなければよいかと
で VBAを実行するブックで参照設定 Personal_VBAProject にチェック
又はVBAで参照する この場合、セキュリティ設定の変更が必要だったかと・・
On Error Resume Next
ActiveWorkbook.VBProject.References.AddFromFile Application.StartupPath & "\PERSONAL.XLSB"
Personal_VBAProject内を呼ぶ事が出来ます
アドインについては、調べれば、情報はありそうですが、だいぶ忘れてしまいましたので良い回答が出来なくすみません
ありがとうございます。
①:はい、参考サイトは、そのhttps://hirachin.com/post-7298/です。
②:関数登録も同じです。従って、ワークシート上の操作は、ユーザー関数「=CalcTax」や、リボン登録したSubモジュールも動きました。
③:質問欄の②のように普通にモジュールCallしていました。Application.Runは、以前使用したことがあるのですが失念しておりました。申し訳ありません。 Application.Runでアドインのxlamを指定して実行したらコンパイルエラーは消えました。(ファイル指定しないと”マクロ無効エラー"になる)
④しかし本来作りたかったのはパラメーター受け渡し付共通モジュールです。
Sub test11()
a = 100
Call Application.Run("'アドインテスト.xlam'!test_subA", a, b)
Debug.Print a & " " & b
End Sub
aは渡せましたが、戻り値のbがempty でした。
⑤ユーザー関数のCall Application.Run("CalcTax", 300)では戻り値の330が取得できませんでした。→ こちらはファイル指定不要でした。
⑥その後調べて CallByName関数というのを使ってみたところ
Call CallByName(Application, "Run", VbMethod, "'アドインテスト.xlam'!test_subA", a, b)でab両方取得できました。
問題点としてRANGEの受け渡しが出来ないのですが、これはやむなしとしました。ユーザー関数はおまけなので使えなくても良しとし、SubとCallByNameでほぼ対応できました。
基本的なミス(Application.Run)をご指摘頂きありがとうございました。
No.1
- 回答日時:
こんばんは
Functionで引数があるので、そのままで使用したいのでしたら、
参照設定をします
①VBEを開く
②プロジェクトブラウザのpersonal.XLSBの
VBProjectを右クリック プロパティから名前を変更して
VBProject名を任意の名前(使われている名前は不可)に変更
③使用するブック側で参照設定
任意に決めた名前にチェックを入れます。
これで呼び出されると思いますが・・・
私個人的には面倒なのでpersonal.XLSBを使用するよりアドインにした方が良いと思います。
ありがとうございます。
使用するブック側で参照設定したつもりですが、personal.XLSBに参照設定のツリー?が表示されて、参照する側のような表示になって難航し面倒そうなので、一旦全部削除してSub(A)とFunction( CalcTax)の2つを入れたアドインをあらためて作り、Aをリボンにマクロとして登録しました。新規ブックを開き
①リボンから実行するとAは動きました。
②セルで=を入れてもCalcTaxは関数候補として出てきませんが、
=calctax(100)入力すると110が表示されました。
③テストマクロでAをCallすると定義されていないエラー
上記「macro」でCalcTax(100)を呼び出そうとしても同じくエラー
Sub A() 'タイトル除きでセレクト
Selection.CurrentRegion.Select
Selection.Offset(1).Select
Selection.Resize(Selection.Rows.Count - 1).Select
End Sub
セキュリティのデジタル署名が無かったので作成してます。
③でアドインファイルのモジュール参照が出来ていないようですが、
①②が出来ているのが不思議です。
出来ないと不便というわけでは無いのですが、エラーの出るのを
出来れば解消したく、なにかヒントがあればお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【HTML、VBScript】HTAアプリケ...
-
VBA subで戻り値指定するか宣言...
-
VB6の変数宣言について
-
【VB6.0】 あるフォームから他...
-
Callで呼び出したプロシージャ...
-
excellvbaで
-
ArrayListに格納したクラス内の...
-
引き渡したループ処理で変数がn...
-
ファイルパスの変換方法
-
Visual Basic4での並べ替え
-
メニュー追加の方法
-
VBAのユーザーフォームで、テキ...
-
エクセルVBAでテキストボッ...
-
FORTRAN77でプログラミング
-
g95プログラムからg++関数を呼...
-
最大公約数を再帰で求める(pas...
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
C# RichTextBoxについて
-
スタイルシート
-
VBA テキストボックスで計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLのプロシージャ間でカー...
-
パーソナルXLSBのfuctionを呼び...
-
【VB6.0】 あるフォームから他...
-
【HTML、VBScript】HTAアプリケ...
-
プロシージャまたは関数の引数...
-
定数を構造体で・・・
-
HTML + VBScript で Sleep でき...
-
変数の宣言はすべきでしょうか...
-
分割コンパイルの方法がわかり...
-
【VBScript】変数のスコープ
-
ExcelのVBA。Staticな変数について
-
整数を二つ読み込み、それらの...
-
関数の引数
-
変数を複数のモジュール間で共...
-
access2007 copyfile困っています
-
VB6のFriendについて
-
VB.NETのグラフィック描画で困...
-
引数
-
VB初心者の私に教えてください!
-
プロシージャを呼び出したプロ...
おすすめ情報