[[20241008083407]] 『エクセルのダイアログ処理』(まっつん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エクセルのダイアログ処理』(まっつん)

エクセルブックをA・Bの2つ用意します。
Bのシートにボタンを配置し、ボタンを押すとBのマクロが走るようにして、
AからBのマクロを実行させます。
この時Bのマクロでファイル指定のダイアログが表示されるのですが
Aからこのダイアログにファイルを指定することはできますか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 1.Bのマクロを引数を受け取れるようにする。
 2. Aから実行する際、その引数に指定のファイルパスを渡す。
 3.Bのマクロで、引数が渡された場合、ダイアログは開かず、指定のパスでその先へ

 こんな感じです。
(tkit) 2024/10/08(火) 09:05:12

 1.そもそも、ダイアログは任意に選択するためにあるので、
   最初から指定してあるのであれば、ダイアログを開く必要は無い。

 2.ボタンとは何者なのか?フォームコントロール、ActiveXコントロール、
   図形や画像でもボタンになり得る。
   ActiveXコントロールか、そうでないかで違いが出ます。

 3.引数にOptionalキーワードを付ければ、既定値を設定することができ、
   その値で、引数が渡されたかどうか判定可能です。

 4.引数を持ったプロシージャ(マクロ)は、フォームコントロールのマクロ登録に
   表示されないので、新たなプロシージャで内包する必要があります。

(tkit) 2024/10/08(火) 09:26:32


 ご指摘いただいた通りかと思います。

 こんな感じでしょうか。
 フォームコントロールのボタンの場合です。
 <<BookA>>
 Sub ボタン1_Click()
     Application.Run "'D:\MyDocuments\202410\2024_1008_01 bookB.xlsm'!test", "testfilepath"
 End Sub

 <<BookB>>
 Sub test(s As String)
     Dim f
     If s = "" Then
         f = Application.GetOpenFilename
         MsgBox f
     Else
         MsgBox s
     End If

 End Sub
 Sub ボタン1_Click(Optional s As String)
     test ""
 End Sub

 ちなみに、Application.Runについてのメモです。
 【メモ】
 1. ブック名に半角スペースが含まれている場合は、ブックのパスを ' と 'で囲む必要がある。
 2.  相手ブックが開いていない場合も自動で開いて実行する
   (むろんカレントフォルダ内に相手ブックが保存されていることが前提。
     そうでなければ、フルパス指定、かつ'と'でパスを囲む必要がある)
 3.  標準モジュールにあるプロシージャはModule名を省略できるが、  
     同名のプロシージャが複数ある場合もありうるので、Module名を指定するのがよい
 4. SheetモジュールやThisWorkbookモジュールの場合は省略できない。    
 5. プロシージャが private属性でも問題ない
 6. 引数を渡すことができる。
    例:  Application.Run "相手ブック.xlsm!Module1.ボタン1_Click",引数1,・・・

(xyz) 2024/10/08(火) 11:34:54


 ちょっとおかしかったですね。修正しました。
(xyz) 2024/10/08(火) 18:31:22

ありがとうございます。
引数を使って処理してみたいと思います。
(まっつん) 2024/10/09(水) 15:46:51

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.