質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

599閲覧

VBAで、ボタンによって、取得するパス名を変更したい。

oftn

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/05/10 12:29

標記の通りなのですが、
ボタンによって、取得するパス名を変更するようなマクロを作りたいです。

取得した特定のパス名のフォルダに格納されたファイルがある場合、
先生とクラス名を取得して、クラス代表者別にメールを一括作成するマクロを作りました。
同様のフォルダ構成の添付ファイルがあるため、
ボタンを作成して、
ボタン名の変数をFileStorePathに渡して、
取得するパス名が異なるようにしたいです。

main()内の、FileStorePathの、fNameが今回ボタンの押下によって変更したい部分です。

ボタンを作成するときに、ボタンごとにfNameに、入れたいフォルダ名を宣言しましたが、
ボタンが動きません。

修正に、お力を貸していただけないでしょうか。

マクロを動かすエクセル
ボタン
添付ファイルの格納フォルダ構成

VBA

1Enum Col '1以降の数値を省略した場合は+1される 2 宛先 = 1 3 複写 4 クラス名 5 クラス代表者氏名 6 添付キーワード 7 先生氏名 8End Enum 9 10Sub main() 11 'Dim Col As Cols 12 Dim r As Long 13 'Outlookオブジェクトの作成 14 Dim OutlookObj As Outlook.Application 15 Set OutlookObj = New Outlook.Application 16 17 For r = 2 To Cells(1, 1).End(xlDown).Row 18 19 'メールアイテムオブジェクト作成 20 Dim mailItemObj As Outlook.MailItem 21 Set mailItemObj = OutlookObj.CreateItem(olMailItem) 22 23 '添付ファイルオブジェクトの生成 24 Dim attachObj As Outlook.Attachments 25 Set attachObj = mailItemObj.Attachments 26 27 Dim cName As String, sName As String, tName As String 28 cName = Cells(r, Col.クラス名).Value 29 tName = Cells(r, Col.先生氏名).Value 30 31 Dim FileStorePath As String 32 FileStorePath = "C:\Outlookテスト\" & tName & "先生\" & cName & fName 33 34 '★添付ファイルが存在する場合のみ、メールアイテムを作成する 35 If FileAttach(attachObj, FileStorePath) = True Then 36 37 'メール本文作成 38 Dim mailBody As String 39 mailBody = CreateMailBody(r) 40 41 'メールアイテム作成 42 With mailItemObj 43 .To = Cells(r, Col.宛先).Value 44 .CC = Cells(r, Col.複写).Value 45 .Subject = Cells(1, "I").Value '件名 46 .Body = mailBody '本文 47 End With 48 49 mailItemObj.Display '下書きを表示 50 51 '次のメールアイテムを作成するためいったん破棄 52 Set mailItemObj = Nothing 53 54 End If 55 56 Next r 57 58End Sub 59

↓このようなマクロを、ボタンごとに作り、main()を呼び出すようにしています。

VBA

1Sub 1日時点_Click() 2 Dim fName As String 3 fName = "1日時点" 4 Module1.main 5End Sub 6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ボタンが動きません。

済みません。誤記かもしれませんが、

Sub 1日時点_Click()

先頭に数字は使えなかったと思います。
シートへボタンを追加して、そのままダブルクリックすればVBA側にコードが追加されます。
この中に、msgbox 999でも入れて動作確認したらどうでしょうか。

投稿2020/05/13 07:26

tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Module1.mainを呼ぶときにfNameを引数で渡せばいいと思います。

VBA

1Sub 1日時点_Click() 2 Dim fName As String 3 fName = "1日時点" 4 Module1.main(fname) 5End Sub

VBA

1Sub main(fname as string)

投稿2020/05/10 12:47

ryuno_vanilla

総合スコア119

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oftn

2020/05/10 14:13

main()に引数fNamewを渡しましたが、動きません。 ボタンは、VBAの解説サイトを参考に、 outlookテスト.xlsm!'main "日程調整"' のように作りましたが、それが誤りなのでしょうか。
ryuno_vanilla

2020/05/11 12:53 編集

スマホから失礼します。 cName & fName→cName & "¥" & fNameです。
ryuno_vanilla

2020/05/11 06:04

ボタンへのマクロの割り当てはボタンを右クリックしてマクロの登録を選び、1日時点_Clickを選んでください
oftn

2020/05/21 07:55

解決できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問