Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Microsoft 365)
ブックA内のマクロAからブックBのマクロBの呼び出し方
投稿日時: 23/09/06 17:00:44
投稿者: gorby

VBA初心者です。マクロ作成の基本的なことをご教示ください。
 
1.ブック内のオブジェクトを操作するマクロは同じブック内に配置するという理解で正しいでしょうか?(マクロが他のブックに属するオブジェクトを操作することは無い)
(1.の推測が正しいと仮定して)
2.ブックA内のマクロAからブックBのマクロBの呼び出し方を引数の渡し方も含め、サンプルコードで教えてください。
 
 

回答
投稿日時: 23/09/06 21:50:33
投稿者: WinArrow

ブックB内の「オブジェクト」って何を指しているのア分かりませんが、
マクロAから、ブックBのオブジェクト(図形?)には、直接アクセスするようなコードは記述できません。
 
ブックBのオブジェクト階層を使って参照します。
 

回答
投稿日時: 23/09/06 22:00:07
投稿者: simple

>ブック内のオブジェクトを操作するマクロは同じブック内に配置する
場合によりけりでしょうね。
厳密なクラスモジュールのような発想で、そうした建付けによるコードが既にあるのであれば、
それを使うこともあるでしょうね。
ただ、それがマストかと言われるとそうとも言い切れません。
ひとつのブックに書いたマクロで、他のブックを開いて、それらを操作することは
普通に行なわれていると思います。むしろこちらの方が一般的かもしれません。
 
他のブックにあるマクロを実行する方法については、例えば下記を参照してください。
「他のブックのマクロを実行(Runメソッド)」
https://excel-ubara.com/excelvba1/EXCELVBA427.html
 
# gorbyさんは以前SeleniumBasicを使ったかなり高度なコードについて質問されていましたね。
# いつからVBA初心者さんになられたのでしょうか?(w)

投稿日時: 23/09/07 06:34:33
投稿者: gorby

# gorbyさんは以前SeleniumBasicを使ったかなり高度なコードについて質問されていましたね。
# いつからVBA初心者さんになられたのでしょうか?(w)[/quote]
 
確かに以前SeleniumBasicを使ったことがありますが、ExcelVBAの流儀については初心者です。
SeleniumBasicとVBAは言語仕様が全く異なりますし、ExcelVBAの各ブックへの配置や引数の渡し方も分からず、苦労してます。

回答
投稿日時: 23/09/07 09:47:55
投稿者: simple

> 場合によりけりでしょうね。
と書きましたように、されたいことの概要でもよいので説明されれば、
なんらかの具体的な議論が可能です。
もう少し説明されたらいかがですか?

回答
投稿日時: 23/09/07 10:00:10
投稿者: WinArrow

オブジェクト
が何を指しているのか分かりませんが、
ブックの作成〜デバッグ〜メンテナンスを考えて、参照系を除き、
>ブック内のオブジェクトを操作するマクロは同じブック内に配置する
は、賢い方法を思います。
特に、メンテナンスでは、何処で、更新しているかを探すのは、
作った本人でも難儀するところです。これは、VBAに限ったことではありませんが・・・・

回答
投稿日時: 23/09/07 11:45:40
投稿者: sk

引用:
マクロが他のブックに属するオブジェクトを操作する

(標準モジュール)
--------------------------------------------------------------
Sub Test1()
 
    Dim wbkNew As Workbook
     
    '新規ブックを作成して参照する
    Set wbkNew = Workbooks.Add
     
    Dim wsTarget As Worksheet
     
    '参照中のブックの 1 つめのワークシートを参照する
    Set wsTarget = wbkNew.Worksheets(1)
     
    'そのワークシートの名前を変更する
    wsTarget.Name = "何か適当な文字列"
 
    Dim rngTarget As Range
     
    'そのワークシートの A1 セルを参照する
    Set rngTarget = wsTarget.Range("A1")
     
    'そのセルの表示形式を設定する
    rngTarget.NumberFormatLocal = "[$-ja-JP-x-gannen]ggge""年""m""月""d""日"" h""時""m""分""s""秒"""
     
    'そのセルの値に現在のシステム日時を代入する
    rngTarget.Value = Now()
     
    'そのセルを含む列の幅を自動調整する
    rngTarget.EntireColumn.AutoFit
     
    '各オブジェクトの参照を解放
    Set rngTarget = Nothing
    Set wsTarget = Nothing
    Set wbkNew = Nothing
 
End Sub
--------------------------------------------------------------
 
こういった処理を(既存のブックに対しても)出来ればよい、
ということでしょうか。

投稿日時: 23/09/07 12:01:23
投稿者: gorby

gorby さんの引用:
VBA初心者です。マクロ作成の基本的なことをご教示ください。
 
1.ブック内のオブジェクトを操作するマクロは同じブック内に配置するという理解で正しいでしょうか?(マクロが他のブックに属するオブジェクトを操作することは無い)
(1.の推測が正しいと仮定して)
2.ブックA内のマクロAからブックBのマクロBの呼び出し方を引数の渡し方も含め、サンプルコードで教えてください。
 
 

本件同僚からノウハウを入手できましたので、案件クローズとします。