*.jpgファイルの撮影日時を読み出す方法にチャレンジ中です。
この過程で、色々とお尋ねし、いろいろと手取り足取りお教え頂き、感謝しております。
標準モジュールに、写真撮影日時読出ユーザー定義関数(myFunction)を置いて使える様になりました。
今回、便利なシステム関数の様に、他のBookから参照する手法にチャレンジ中です。
今までに頂いたアドバイスやWEB検索で得たヒントを元に、次のCodeを検証中です。
'' ------- 検証中のCode 環境:Excel2013/32ビット ----
'' C:\Users\myPC\Documents\Book1.xlsm
Sub myMain()
Dim ret As String
ret=Application.Run("Book2!myFunc")
MsgBox ret
End Sub
'' ----------------
'' C:\Users\myPC\Documents\Book2.xlsm
Public Function myFunc()
myFunc="ここはBook2です。参照成功 おめでとう!"
End Sub
'' ------
Q1:同じカレントFolderなら、上記CodeでOKのはずですが?
Book1と2を、C:に置くと、エラー
Book1と2を、C:\Usersに置くと、エラー
Book1と2を、C:\Users\myPCに置くと、エラー
Book1と2を、C:\Users\myPC\Documentsに置くと、正常にRun!!
このエラーはなぜ発生するのでしょうか??
Q2:テストRun終了後、Book2とBook1をClose するCode??
上記myMainに、
Workbooks(Book2.xlsm).Close
Workbooks(Book1.xlsm).Close
とCodeを追記しましたが、うまく機能しません??
No.2ベストアンサー
- 回答日時:
こんばんは。
>標準モジュールに、写真撮影日時読出ユーザー定義関数(myFunction)を置いて使える様になりました。
>今回、便利なシステム関数の様に、他のBookから参照する手法にチャレンジ中です。
(組み込み関数と同じようにするというご質問でしょうか。)
>ret=Application.Run("Book2!myFunc")
Book1 からの呼び出しで、"Book2!myFunc" で呼び出せることが驚きです。
"Book2.xlsm!myFunc" のはずです。ただし、ユーザー定義関数なら、引数が必要なはずですが。
「他のBookから参照する手法」という主旨からすれば、グローバル関数化(アドイン化)にするというのが、一般的だと思います。(グローバル関数化とは、どのブックでも、すぐに使えるようになるユーザー定義関数)
一般のブックからの呼び出しは、フルパスで書き、呼び出しコードを使います。
そして、他のブックのモジュールで常に使うなら、アドイン化した後に参照設定をします。
アドインで、
C:\Users\[Your ID]\AppData\Roaming\Microsoft\AddIns\
側に入れておけば、改変も自由にできます。C:\Program Files 側にいれると、改変には、管理者モードでないといけなくなります。(ただし、関数はワークシート上)
そして、
>Q2:テストRun終了後、Book2とBook1をClose するCode??
これは、別件ですね。とにかく、グローバル関数化をしてみてからにしたらいかがですか?起動した自分のブックまでいきなり閉じるような内容は、現実的ではないように思います。なお、同様のマクロを書いてみましたが、ブックオブジェクト.Close False にするぐらいでしょうか?
(Falseの意味は、Saved=False です。)
開発-アドイン
WindFallerさん、こんばんは。コメント、有難う御座いました。
前回の、2017/06/27のお尋ね:
『VBAで、Functionを、クラスモジュールに置くか? 標準モジュールに置くか? 使い勝手は?』
のご回答No.2で、アドインを含めて3段階ほどのやり方のアドバイス頂いておりました。
今回は、手始めに、カレントフォルダー内で、Book1からBook2を参照する方法を検証しています。
Q2のお尋ねは、的外れとのことで、取り下げます。
Q1のエラーが出る原因は、自分で試行錯誤してきた中で得た結論は:
Excel2013/32ビットでは、Book間参照は、Defaultで、Book1とBook2は、
C:\Users\myPC\Documentsに置くことになっているようだ、でした。
なお、コメント頂いた、
>"Book2!myFunc"で、Book2のFunction myFunc()を呼び出すCodeは、
WEB検索で得たCodeで、実際にRunできています。
今回頂いた、「"Book2.xlsm!myFunc"」でもRunでき,同じ結果が得られました。
実際のユーザー定義関数では、まだテストしていませんが、ご指摘のとおり、
引数として、撮影日時を読み出す写真のフルパス記述が必要です(戻り値の指定も必要)。
WEB検索で得たCode:Book1とBook2を別のフォルダーに置き、1から2を呼び出す:もTEST済。
Book1:C:\Users\myPC\Documents
path="C:\Users\myPC\Book2.xlsm"
ret = Application.Run("'" & path & "'" & "!myFunc")
今回、重ねて頂いた、アドインなどの手法は、これからトライしてみます。
本当に、有難う御座いました。
No.1
- 回答日時:
多分ですが、
Q1:
このマクロを記述したブックは「C:\Users\myPC\Documents」フォルダーに置いてあるからではないでしょうか?
Q2:
「Workbooks(Book2.xlsm).Close」実行したとたん「Function myFunc()」は使えなくなるはずなので「Function myFunc()」を、「Book2」ではなく、このマクロを記述したブックに登録したらよいのでは?
GooUserラックさん、こんばんは;
いつもコメント頂き、有難う御座います。
Q1:
Book1とBook2を、C:\Users\myPC\Dokyumennts,に置きました。
動作確認後に、これを切り取り、
Book1とBook2を、C:\Users¥myPC、に貼り付けました。エラーが出ます?
Q2:
今回のチャレンジは、Book1からBook2のmyFuncを参照する事か目標です。
Book1に、Sub_myMainとFunction_myFuncを置いての動作は確認済です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ワイルドカード「*」を使うとうまくいかないマクロの添削をお願いします 3 2022/03/26 09:39
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) 【マクロ】フォルダを3つ、POモニター上に、決まった並べ方をしたい 4 2022/08/31 11:05
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Android VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。 2 2022/07/27 09:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
【Excel VBA】マクロでExcel自...
-
【Excel】マクロの保存先について
-
excelで直前に参照していたブッ...
-
エクセルのvbaにて thisworkboo...
-
エクセルで未保存に対するメッ...
-
エクセルVBAで作成した別ブック...
-
エクセル;相対パスを絶対パスへ...
-
EXCELのボタンによるマクロの登...
-
マクロの保存先、開いてるすべ...
-
エクセルデータを別のエクセル...
-
複数のExcelファイルの印刷設定...
-
ExcelVBAで困っています。
-
名前の変わるブックをアクティ...
-
EXcelのマクロで相対パスでファ...
-
[フィルターオプションの設定]...
-
EXCELマクロで、開いてはいるが...
-
EXCELブックが勝手に開いて困っ...
-
エクセルVBA 個人用マクロブッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
マクロの保存先、開いてるすべ...
-
【Excel VBA】マクロでExcel自...
-
【Excel】マクロの保存先について
-
複数のExcelファイルの印刷設定...
-
エクセル;相対パスを絶対パスへ...
-
excelで直前に参照していたブッ...
-
EXcelのマクロで相対パスでファ...
-
エクセルVBAで作成した別ブック...
-
エクセルで未保存に対するメッ...
-
EXCELブックが勝手に開いて困っ...
-
EXCELのボタンによるマクロの登...
-
エクセルのvbaにて thisworkboo...
-
EXCELマクロで、開いてはいるが...
-
名前の変わるブックをアクティ...
-
[フィルターオプションの設定]...
-
エクセルVBA 個人用マクロブッ...
-
ファイル名変更後も、マクロを...
-
個人用マクロブックが消えました
おすすめ情報
使い方は、エクスプローラで、Book1をクリックし開き、VBAを立ち上げ、
Book1のSub_myMain()を実行します。
こうして参照したBook2のmyFuncのコメントを確認後、
Book2とBook1を閉じ、エクスプローラに戻りたいのですが?
デスクトップ画面には、myMainが残ったり、myFuncが残ったり、
不規則な結果で、????です。