人に聞けない痔の悩み、これでスッキリ >>

ワークシートのセルにユーザー定義関数を挿入して使う場合のopenメソッドの挙動についてご教授下さい。

VBE標準モジュールに以下のような関数を定義し、セルから関数を実行したのですが、関数内で行なっているworkbooks.openメソッドが動作していない様なのです。

Function aaaa()

open前の処理

Set wb = workbooks.open(wbname)

open後の処理

End function

debug.printなど、マクロやVBEからの実行ならば問題なく動作するのですが、セルからの実行をステップで監視してみると、workbooks.openがスキップされたように実行されず、変数にworkbookが格納されずにエラーとなってセルにエラー戻り値が入る状況です。

これについて

1.こうやれば回避できる!
2.仕様だから諦めろ

のいずれかをご教授頂きたいです。
2.の場合の他の方法についてはまた自分で検討します

よろしくお願いいたします。

質問者からの補足コメント

  • 皆さまご回答をいただきましてありがとうございます。いくつか補足いたします。
    1.セルから実行とは
    Sumなどの他のワークシート関数と同様に、セルに関数名と引数を入力して実行する、という意味です。
    2.openはフルパス指定してます。
    3.関数の目的
    祝祭日一覧のブックを別途作っており、業務上入力を要する営業日を算出するためにそのブックを参照しています。複数のブックでそういった祝祭日の参照が発生する可能性はあるので、関数として実装しようとしたのですが…という経緯です。
    元はマクロとしての実行しか考慮していませんでしたが、ユーザー側からも他の関数と同じような使い方が出来れば便利だなあと考えたのです。が…と言った経緯でございました。

      補足日時:2019/05/28 12:24

A 回答 (4件)

こんにちは



詳細を確認してはいませんが、「ユーザ定義関数」から処理ができる内容には制限があったはずです。
たしか、他のセルの書式を変えたり、値を変更するようなことはできなかった記憶が・・・

workbooks.openのような「単純なセル値計算の関数」からかけ離れた処理は、多分、上記同様にスキップされることが十分想像されます。

どうしても「他のブックを開く」ような処理を実現したければ、Changeイベントなどでタイミングを捉えて(別の方法でも良いですが)通常のプロシージャとして処理するようにできれば可能かもしれません。
    • good
    • 0
この回答へのお礼

Thank you

ユーザー定義関数の仕様上の問題なのかなぁ、とは思っていましたが、やはりそうなのですね。
ご回答ありがとうございました。

お礼日時:2019/05/30 11:50

ではまず最初にOPENイベントなどでその値を参照しておいてはいかがでしょう


祝日が定義されている一覧をOPEN時に読込み、隠しシートなどにコピーしておけばワザワザ別シートを毎回参照しなくても済むのではと考えますが
    • good
    • 0
この回答へのお礼

Thank you

ご回答ありがとうございました。

お礼日時:2019/05/30 11:45

こんばんは!



あくまで個人的な見解ですが・・・

「ユーザー定義関数」というように「関数」となっていますよね。
あくまでワークシート関数と同じ使い方が大前提だと思います。
おそらくデフォルトのワークシート関数で「workbooks.open」のような機能はないのでは?

通常のワークシート関数でやたらに長くなる場合など、ユーザー定義関数を作っておけば
わずか1行の数式で処理が出来たりします。

当方は「ユーザー定義関数」とはそのような認識でいます。
というコトで、「2.」の方に一票!m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2019/05/30 11:47

もう少し情報が欲しいのですが、セルから関数を実行というのはどういう関数でしょうか


また恐らくwbnameにはファイルのフルパスが設定されているものと思いますが間違いないですか
    • good
    • 0

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

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


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

人気Q&Aランキング