
チェックが入った情報を置換?して標準モジュールに受け渡したいです。
◼️やりたいこと
ユーザーフォームに設定したチェックボックスのチェックが入ってる人をアドレスに置換して標準モジュールのメール作成コードのtoに入れたい。
Initializeに何か設定しておけばいいのか、完了クリック時に何か設定するのかわからずうまくいきません。
VBAは勉強中のレベルです。どなたかご教授ください。
sub mail()
Form_adr.Show
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Set objOutlook = New Outlook.Application
Set objMail = objOutlook.CreateItem(olMailItem)
With objMail
.To = ★←ここにチェックいれた人のアドレスを入れたい
.HTMLBody = "test"
End With
Unload Form_adr
End sub
▼Form_adrの中身 ()内はオブジェクト名
□田中 □鈴木 □佐藤 [完了]
(cb1) (cb2) (cb3)
[完了]はコマンドボタンで.Me Hideだけ書いています。
No.1ベストアンサー
- 回答日時:
こんにちは
全体像が不明ですが、対象は一人だけと考えてよいのでしょうか?
(配列で渡すなどすれば、複数でも考え方は同様です。)
いずれにしろ変数の内容を受け取って、入れ込めば良いのですが・・
ご提示のコードでは、mainからFormを表示しているようですので、
共通変数を用意しておいて、
1)Form側から、共通変数に値(アドレス等)を設定してHide
2)main側で、共通変数を読み取り、指定位置に設定
というような方法が考えられます。
https://docs.microsoft.com/ja-jp/office/vba/lang …
必ずしも共通変数を利用しなくても、例えばセルの値を利用する方法などでも同様のことは可能です。
要は、両方のプロシージャからアクセス可能なところに一時的に値をセットして引き渡すという考え方です。
そんな面倒なことをしなくても、プロシージャの引数に直接引き渡す方法も考えられます。
ご提示のコードで、メール送信部分を別プロシージャ(仮に、sendMail()とします)にしておいて、Form側からこれを呼び出す方法です。
Sub sendmail(byref addr as String)
などとしておいて、Form側からは
Call sendmail(mailAddress)
として呼び出すといった感じです。
こちらの方法が最も簡単だと思いますけれど、この場合は、ご提示のコードの全体構成を変える必要がありそうです。
No.4
- 回答日時:
No1です。
>複数あった場合、★印をどう渡したらいいのでしょうか。
実際の内容がはっきりとわからないので、半分は推測になってしまいますが・・
同じ内容のメールを複数人に送るのであれば、宛先をまとめて1回の送信で済ます方法も考えられます。
その場合は、宛先を連結しておけばよかったはずと思います。
ただし、受信者に他の同時送信者がわかるので、これがNGの場合は個別に送るか、BCCで送るかになるかと。
個別に複数回送信するにしても、大雑把に2種類の方法が考えられます。
(肝心の本文をどうするのかがわかりませんけれど・・)
1)Form側からループ等で、必要回数sendmailを呼び出す。
例えば、Form側でループ等でチェックボックスをチェックして、都度送信するなら
(以下では、ひとまず配列にいれた内容を送っていますが・・)
この場合は、呼び出し回数がメールを送る回数になります。
[ Form側 ]
mailAddresses = Array("address11", "address22", "address33")
For i = LBound(mailAddresses) To UBound(mailAddresses)
Call sendmail(CStr(mailAddresses(i)))
Next i
[ sendmail ]
Sub sendmail(ByRef mailAddress As String)
MsgBox mailAddress
End Sub
のような構成になっていれば、アドレスが順にMsgBoxで表示されます。
MsgBoxで表示する代わりに、メールを送信する処理にすれば良いでしょう。
2)Form側から配列などでまとめて渡し、sendmail側で個別に処理する。
(個々にメールを送信することを想定しています)
こちらの場合は、呼び出しは1回のみになります。
[ Form側 ]
mailAddresses = Array("address11", "address22", "address33")
Call sendmail(mailAddresses)
[ sendmail ]
Sub sendmail(ByRef mailAddresses As Variant)
For i = LBound(mailAddresses) To UBound(mailAddresses)
MsgBox mailAddresses(i)
Next i
End Sub
こちらも同様に、MsgBox(=メール送信の代わり)で順に表示されます。
上記のように処理する場合は、1通だけ送信する場合でも配列引数で渡す必要があります。
(数が可変の引数という概念等(=paramarrays)もありますが、混乱するだけと思いますので省略)
No.2
- 回答日時:
こんにちは。
Form_adr.Show
で表示されたForm_ adr が閉じる、または非表示されると、呼び出し元プロシージャ、ここでは次行の
Dim objOutlook As Outlook.Application
にフローが戻ります。
ご質問分では Form_ adr を Me.Hideで非表示としていますよね。
オンメモリのままです。つまり、
Form_ adr.Checkbox1.Value
などプロパティーなどにアクセス可能ということです。
必要なデータを受け取ったら Unload して下さい。
Unload Firm_adr
その他のデータ受け渡し方法としては
1. グローバルレベル変数を使う
2. 外部1時ファイルを使う
3. セルを使う
4. 関数に引数を持たせる
など。私なら4.の方法を使います。
#1ご回答で最後に紹介された方法です。
複数の宛先を引数で渡す可能性があるなら、引数をVariant型にして、値または配列のどちらが渡されたのかは受け手側でIsArray関数を使って条件分岐します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBAで、ユーザーフォームの値を、モジュールで使用したい。
Visual Basic(VBA)
-
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
-
4
vba userFormのSubを標準モジュールから呼び出す方法を教えてください
Visual Basic(VBA)
-
5
エクセルVBA オプションボタンのチェックを外したい
Excel(エクセル)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
オブジェクト型の変数にフォームを入れたい
Visual Basic(VBA)
-
8
EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
モードレスダイアログを閉じた...
-
商品詳細テンプレートを元に、...
-
cshの文字列置換
-
01_02や02_11などの文字列から0...
-
ダブルコーテーション 、"を二...
-
正規表現でURLを抽出したいと思...
-
各項目がダブルクォーテーショ...
-
VBA(Excel)でファイル内の文字...
-
秀丸マクロで、あらかじめ選択...
-
秀丸の正規表現用DLLをDelphiか...
-
DREAMWEAVERでの画像の入れ替え
-
MATLAB 全て置換
-
C言語でテキストファイルの内容...
-
Mid関数を使って置換
-
ハングルを日本語に置換
-
正規表現で式展開を教えてくだ...
-
PowerShellでテキストの空白行...
-
対称群はなぜそう呼ばれるので...
-
文字化けmail
-
プログラムの間違っている箇所...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 置換文字がみつからない時
-
正規表現で、特定の文字列を含...
-
各項目がダブルクォーテーショ...
-
csvデータ ダブルクォーテ...
-
スペースで区切られた氏名から...
-
C言語でテキストファイルの内容...
-
○文字目に文字挿入
-
秀丸エディタで、「-」や「ー」...
-
csvデータのダブルクォーテーシ...
-
Excel VBA リストに一致したデ...
-
テキストボックスの文字列を置...
-
EXCELマクロを用いてグラフの系...
-
ハングルを日本語に置換
-
3回以上の改行を2回にする正...
-
C#で空白行を削除する方法
-
word VBA 改ページの繰り返しに...
-
フォントの色を保持したままセ...
-
xmlファイル内の文字列置換
-
正規表現 特定の文字列を含む行...
-
EXCEL VBA でCTRL+Fのダイア...
おすすめ情報
ご回答ありがとうございます。
複数宛先を選ぶ可能性もあるので別のプロシージャに分けたいと思います。(1件の可能性もあります)
複数あった場合、★印をどう渡したらいいのでしょうか。
イメージはできるのですが、どこで引数にするのかもわからなくなってしまいました…
▽add[完了]ボタンの中身
Private Sub OKbutton_Click()
Me.Hide
Call sendmail(★)
End Sub
▽メール作成コード
Sub sendmail(★)
〜割愛
.To =★
〜割愛
End sub