アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です。入り口でつまずいています。
Workbook.addを使いたいのですが、
1)関数main1の中で動かすとうまくいきます。
2)関数main2から関数sub2を呼んでその中で動かそうとすると、関数コールの時点で、
実行時エラー91(オブジェクト変数またはwithブロック変数が設定されていません)が起きます。
2)は何故エラーになってしまうのでしょうか。以下ソースです。2)を改良して動かすにはどうしたらよいでしょうか。よろしくお願い申し上げます。

'Test

Sub main1()
Dim Wb As Workbook
Set Wb = Workbooks.Add
End Sub

Sub main2()
Dim Wb As Workbook
sub2 (Wb)
End Sub

Sub sub2(Wb As Workbook)
Set Wb = Workbooks.Add
End Sub

A 回答 (3件)

>Callの使い方についての解説をお願いします。


sub xxx
となっているのは、sub プロシージャと呼ばれますが、sub プロシージャの呼び出し方は、call xxxとするのが、本来の正しい呼び出し方です。

引数を括弧で囲む場合は、必ずcallをつける必要があります。

http://officetanaka.net/excel/vba/statement/Call …
https://learn.microsoft.com/ja-jp/office/vba/lan …
    • good
    • 0
この回答へのお礼

ありがとうございました。
Officetanakaさんの解説が秀逸でした。

お礼日時:2023/02/09 14:39

変数を共有化するみたいな?



Private Wb As Workbook 'プロシージャーの外で宣言する。

Sub main2()
sub2
MsgBox Wb.Name
End Sub

Sub sub2()
Set Wb = Workbooks.Add
End Sub
    • good
    • 0

main2の


sub (Wb)を
Call sub2(Wb)
に変えてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。
こんな簡単な解決法があったんですね。気が付きませんでした。
できましたら、Callの使い方についての解説をお願いします。

お礼日時:2023/02/02 16:54

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