Excel (VBA) |
![]() ![]() |
(Windows 11全般 : Microsoft 365)
ユーザーフォームで選択した人のOutlook予定表に入力
投稿日時: 25/07/05 15:29:20
投稿者: miyuukate
|
---|---|
下記の項目を選択してコンボボックス1で選択した人のOutlook予定表にそれぞれ入力になるようにしたいです。
Private Sub CommandButton1_Click() Dim olApp As Outlook.Application Dim olNamespace As Outlook.Namespace Dim olFolder As Outlook.Folder Dim olConItems As Outlook.Items Dim olItem As Outlook.AppointmentItem Dim olAppointment As Outlook.AppointmentItem Dim rc As String Dim selectedName As String Dim emailAddress As String Const EMAIL_A As String = "〇〇@outlook.jp" Const EMAIL_B As String = "△△@outlook.jp" Const EMAIL_C As String = "□□@outlook.jp" On Error Resume Next Set olApp = GetObject(, "Outlook.Application") If olApp Is Nothing Then Set olApp = CreateObject("Outlook.Application") End If On Error GoTo 0 selectedName = ComboBox1.Value Set olNamespace = olApp.GetNamespace("MAPI") Set recOther = olNamespace.CreateRecipient(selectedName) Set olFolder = olNamespace.GetShareDefaultFolder(recOther, olFolderCalendar) Set olConItems = olFolder.Items Set olAppointment = olApp.CreateItem(olAppointmentItem) Select Case selectedName Case "Aさん" emailAddress = EMAIL_A Case "Bさん" emailAddress = EMAIL_B Case "Cさん" emailAddress = EMAIL_C Case Else MsgBox "選択されたアドレスがありません" Exit Sub End Select rc = MsgBox("予定表へ登録しますか?", vbYesNo + vbQuestion, "確認") If rc = vbYes Then Set olItem = olApp.CreateItem(olAppointmentItem) With olAppointment .Subject = Me.ComboBox2.Text & "の予定" .Body = Me.ComboBox2.Text .Start = Me.ComboBox3.Text & " " & Me.ComboBox4.Text .End = Me.ComboBox3.Text & " " & Me.ComboBox5.Text .Recipients.Add emailAddress .Save End With End If MsgBox "予定が登録されました" |
![]() |
投稿日時: 25/07/06 10:35:10
投稿者: Suzu
|
---|---|
引用: Outlookは使用していませんので、確かな事は言えませんが 【最強のカレンダーアプリ】Outlookカレンダーで日程共有した結果が便利すぎた! https://schecon.com/article/?p=9570 引用: 相手のメールに、予定表のデータがメールの形で届き そのメールに対し承認を行って初めて その人の予定表に追加される仕様だったはず。 VBAではなく、手動で希望の動作になる事を確認した上で、VBAを試されていますか? |
![]() |
投稿日時: 25/07/06 11:14:47
投稿者: miyuukate
|
---|---|
アドバイスありがとうございます。
|
![]() |
投稿日時: 25/07/06 15:16:32
投稿者: simple
|
---|---|
回答ではありません。
|
![]() |
投稿日時: 25/07/06 15:51:19
投稿者: miyuukate
|
---|---|
アドバイスありがとうございます。
|
![]() |
投稿日時: 25/07/06 18:08:05
投稿者: Suzu
|
---|---|
引用: VBAに問題があるのかどうかまでは見ておりませんでした。 simpleさんが紹介くださったサイトにもある様に、 他の方の予定表を触るとなると、 Exchange が必要であり Exchange 経由でないなら、Mailにて予定情報を送信し、そこで承認されて 他の方の予定表に加わる Exchange 経由なのかどうかが、質問者さんの質問文では判断できず 質問者さんが『Exchange 経由でないにも関わらず、VBAだったら、他人の予定表を編集できる』 と思い、質問されているのかも知れないと考え Exchange経由なのかどうかを確認する為に、手動ではできているのですか?と聞いた次第です。 何にしても、simpleさんの紹介くださったサイトが Outlook VBA を扱うには詳しいサイトですので そちらを参考にして頂ければよいと思います。 |
![]() |
投稿日時: 25/07/07 00:19:50
投稿者: miyuukate
|
---|---|
色々と教えていただきありがとうございます。
|
![]() |
投稿日時: 25/07/07 22:45:44
投稿者: miyuukate
|
---|---|
共有の設定については大丈夫でした。
|
![]() |
投稿日時: 25/07/08 10:00:41
投稿者: Suzu
|
---|---|
Exchange は使っていないのでテストできませんので
Sub TEST() Dim olApp As Outlook.Application Dim olNamespace As Outlook.Namespace ' Dim olFolder As Outlook.Folder ' Dim olConItems As Outlook.Items Dim olItem As Outlook.AppointmentItem Dim olAppointment As Outlook.AppointmentItem ' Dim rc As Long 'As String Dim selectedName As String Dim emailAddress As String ' Dim olRec As Outlook.Recipient Const EMAIL_A As String = "〇〇@outlook.jp" Set olApp = GetObject(, "Outlook.Application") selectedName = "Aさん" emailAddress = EMAIL_A Set olNamespace = olApp.GetNamespace("MAPI") ' Set olRec = olNamespace.CreateRecipient(selectedName) ' Set olFolder = olNamespace.GetShareDefaultFolder(olRec, olFolderCalendar) ' Set olConItems = olFolder.Items Set olAppointment = olApp.CreateItem(olAppointmentItem) ' rc = MsgBox("予定表へ登録しますか?", vbYesNo + vbQuestion, "確認") ' If rc = vbYes Then ' Set olItem = olApp.CreateItem(olAppointmentItem) With olAppointment .MeetingStatus = olMeeting .Subject = selectedName & "の予定" .Body = "内容" .Start = #7/8/2025 9:00:00 AM# .End = #7/8/2025 10:00:00 AM# .Recipients.Add emailAddress .Save End With ' End If MsgBox "予定が登録されました" End Sub さらに、上記コード中、コメントアウト部は ・Set〜 にて生成したオブジェクトについて、 生成後、使用していないモノが多くあります。 それらは使っていないのですから、生成してもしょうがない部分。 本来は必要であるのに、使われていない為、コメントアウトにしてしまっている部分があるなら その部分を使う様にしましょう。 当方テストできないので、 予定共有を行う上で、本来必要なメソッドやコレクションが何であるかすら調べていません。 (提示コードから、働いている部分はここですよ と言っているだけです) |
![]() |
投稿日時: 25/07/08 20:15:15
投稿者: miyuukate
|
---|---|
必要な動きの部分だけでまずコードを作成してみるという方法は思いつきませんでした。
|