[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Outlookでの変数の宣言』(おっちょこちょい)
初めまして。
対象がOutLookですが、エクセルから動かしすマクロなのでご容赦ください。
仕事のスケジュールを組んでエクセルに書き込んでいる方のブックから
自分のOutLookのスケジューラーに落とし込むマクロをネットで調べたりして
組みましたが、
下記コードのolItemBeforeの宣言がObjectでは何を差しているのか
分かりづらくて少し気持ち悪いので、
より正確に変数を宣言したいのですが・・・
よくわからないので知っている方がいたら教えて頂ければありがたいです。
また他に「こうしたらいい」という箇所がありましたら
ご教示いただけると幸いです。
コード:
Private Sub OutLookSceduling()
' Dim olApp As New Outlook.Application Dim olNamespace As Outlook.Namespace Dim olFolder As Outlook.Folder Dim olConItems As Outlook.Items Dim olItem As Outlook.AppointmentItem Dim olItemBefore As Object '←これ
' Dim ws As Worksheet Dim r As Long, EndRow As Long Dim Time As String
' Set olNamespace = olApp.GetNamespace("MAPI") Set olFolder = olNamespace.GetDefaultFolder(olFolderCalendar) Set olConItems = olFolder.Items
'この時間の予定はこれしかないので一旦全部消す For Each olItemBefore In olConItems If TypeName(olItemBefore) = "AppointmentItem" Then Time = Format(olItemBefore, "Short Time") If Time = "07:45" Then olItemBefore.Delete End If Next olItemBefore
'新しく予定を入れなおす Set ws = MacroSheet EndRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
For r = 2 To EndRow Set olItem = olApp.CreateItem(olAppointmentItem)
With olItem .Subject = ws.Cells(r, "C").Value & vbLf & ws.Cells(r, "D").Value .Start = ws.Cells(r, "B").Value & " 7:45:00" .End = ws.Cells(r, "B").Value & " 10:00:00" .Save End With Next r
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
For Each olItemBefore In olConItems の行をステップ実行してみれば、ローカルウインドウで olItemBeforeの型を調べることができます。
私はOUTLOOKつかってないので、実行できませんが、
olConItemsの型は、Outlook.Items だから、ループ変数のolItemBeforeは Outlook.Item なのではないか? と想像しつつ、オブジェクトブラウザで調べると、Outlook.Items の Itemプロパティは、 Function Item(Index) As Object となっているので、Object型が正しい の で は ...? (´・ω・`) 2023/01/31(火) 17:08:47
(´・ω・`)さんのおっしゃる通り、戻り値はObject型でよさそうです。 >TypeName(olItemBefore) ここでTypeNameを問い合わせているので、olFolder.Itemsの中身は一定ではなさそうです。
どちらかというと > Time = Format(olItemBefore, "Short Time") この部分でエラーになるので
Dim olAppoItem As Outlook.AppointmentItem ’〜〜中略 For Each olItemBefore In olConItems If TypeName(olItemBefore) = "AppointmentItem" Then Set olAppoItem = olItemBefore Time = Format(olAppoItem.Start, "Short Time") 'If Time = "07:45" Then olItemBefore.Delete End If Next olItemBefore こんな感じに直すと、候補も出てきてわかりやすいんじゃないですかね?
> Set ws = MacroSheet ここもエラーだけど、敢えてぼかしてるでいいのかな? (稲葉) 2023/01/31(火) 17:32:01
Object型が正しいのですね。
稲葉さん提案のSet olAppoItem = olItemBeforeにしたら確かに候補出てきますね、使わせて頂きます。
Set ws = MacroSheetは当初クラスでプロシージャ分けていた時のPublic変数の名残ですね。
そこまで多くのプロシージャにならなかったので一つのモジュールに纏めてモジュール内の変数にしたのですが、
全てのwsを変更するのが面倒だったのでこの形になっています。
(おっちょこちょい) 2023/02/01(水) 12:18:25
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.