<EXCEL/VBA> OUTLOOKのウインドを閉じる方法

このQ&Aのポイント
  • EXCEL/VBAでOUTLOOKのウインドを閉じる方法を教えてください
  • VBAで開いたウインドのみを閉じたいがうまく行かない
  • oApp.Quitでは元々立ち上げていたoutlookも終了してしまう
回答を見る
  • ベストアンサー

<EXCEL/VBA> OUTLOOKのウインドを閉じる方法

EXCEL/VBAで、OUTLOOKのウインドを閉じる方法を教えて下さい。 OUTLOOKを立ち上げた状態で、EXCEL/VBAで下記のようにOUTLOOKのフォルダーを指定してウインドを表示していますが、 VBAで開いたウインドのみ閉じたいのですが、うまく行きません。 oApp.Quitだと元々立ち上げていたoutlookも含めて終了してしまいます。宜しく、お願いします。 Sub OL_TEST() Dim oApp As Object 'OutlookのApplication オブジェクト Dim myNameSpace As Object '名前スペース Dim myFolder As Object 'フォルダー指定 Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定 myFolder.Display '表示

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

><EXCEL/VBA> ですよね。 1)VBE(Visual Basic Editor) の コードウィンドウ で [oApp] の部分を [右クリック] - [ウォッチ式の追加(A)] します。  コード の進行に応じて、何某(なにがし)か、Outlook の『ウィンドウ に関する プロパティ』に変化が生じはしないだろうか、と考えた訳です。 2)[F8] キー を押下しながら、ステップ イン デバッグ します。  「myFolder.Display '表示」の行まで来たら、ウォッチウィンドウ で [oApp] の前の「+」を クリック し、配下の プロパティ 等を一つずつ見ていきます。 3)この場合、闇雲に全部開いても、物によっては無数の星の中から探すようなことになってしまいますので、表示された「名前」を見て、(1)に書きました『ウィンドウ に関する プロパティ』に関連ありそうな「名前」だけを、「どこにあるかなぁ」と想像しながら一つずつ開いていきます。  英語の センス も必要でしょうかね。 4)ちなみに、 [oApp] の直下には [AnswerWizard]・[Applicaion]・[Assistant]・・・と15個の「名前」が並んでいますね。  ここで、幸いにも2番目の [Applicaion] を開くと、その直下に [Explorers] という「名前」があるではありませんか!  これ、臭そうです。  (^0^)/ 5)ということで、[oApp] - [Applicaion] - [Explorers] を開いてみますと...  ありました! 6)[oApp] - [Applicaion] - [Explorers] - [Count] が開いている Outlook の数と合致しています。 7)[Item 1]・[Item 2]・[Item 3]・・・  これですよ、これ! 8)これから先は、少々、経験と勘を要しますが。。。  恐らく、今、開いた Outlook が、一番最後の Item、つまり oApp.explorers.Count 番目の Item になるはずです。 9)従って、 oApp.explorers.Item(oApp.explorers.Count) で、その『ウィンドウ』を名指しにできるのではないかなと考えました。 10)ご質問には、 >oApp.Quit と書いていらっしゃいますが、 oApp.explorers.Item(oApp.explorers.Count).Quit は、見るからにおかしいですし、実際、エラー になります。 11)それなら [Close] だろうと思って、 oApp.explorers.Item(oApp.explorers.Count).Close とした次第です。 12)ですから、 >いける「みたい」です。 と書いたのでした。  (^凹^)  とまぁ、ざっと、こんな感じですが、 >自分でも色々と試してみましたが、 >このコードは自分でいくら考えても分からないでしょうね。  そうですね。  材料無しでは考えつきませんし、実際「まぐれ」みたいなものです。 >何処で勉強されたのでしょうか。 >OutlookのVBAのhelpでしょうか  キーポイント は [ステップ イン デバッグ] と [ウォッチ ウィンドウ] です。  WEB検索 しても、なかなか見付からないときは、こうやって、地道に探すしか手がありませんものね。

pegasusv
質問者

お礼

再度のご回答有難うございました。 [ステップ イン デバッグ] と [ウォッチ ウィンドウ] について、理解できました。 また、とても丁寧に説明して頂き、本当に有難うございました。

その他の回答 (1)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

oApp.explorers.Item(oApp.explorers.Count).Close でいけるみたいです。

pegasusv
質問者

お礼

ご回答の通りで、出来ました。 素晴らしいです。 自分でも色々と試してみましたが、このコードは自分でいくら考えても分からないでしょうね。 何処で勉強されたのでしょうか。 OutlookのVBAのhelpでしょうか、もし良ければ教えて下さい。 ご回答有難うございました。

関連するQ&A

  • アウトルックが起動しているかどうかを取得するには?

    http://www.ken3.org/cgi-bin/group/vba_outlook.asp を参考に Sub Sample() Dim oApp As Outlook.Application Dim myNameSpace As Outlook.Namespace Dim myFolder As Outlook.Folder 'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") '作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display) Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定 myFolder.display End Sub でエクセルからアウトルックを起動しているのですが 既に起動していると2個起動してしまいます。 「既に起動しているのなら起動しない」という事はできますか? 参考URLに 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を と書いてありますが、ちょっと勘弁できませんでした笑

  • outlookが起動してるかどうかを取得したい

    Sub Outlookが起動してないなら起動する() Dim oApp 'As Outlook.Application OutlookのApplication オブジェクトを入れる Dim myNameSpace 'As Outlook.NameSpac Dim myFolder 'As Outlook.Folder If Outlookが起動してるなら Then Exit Sub 'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー myFolder.Display '(通常サイズ olNormalWindow=2 , olMaximized=0,olMinimized=1) oApp.ActiveWindow.WindowState = 0 End Sub ///////////////////////////////////////////////////////////////// のような事がしたいのですが、 If Outlookが起動してるなら Then Exit Sub をどうすればいいのか教えていただけませんか? 当方OFFICE2007を使用しています。

  • outlookの予定をexcelから読む

    Office2007を使っています。 予定作成のフロントエンドとしてoutlook、 全体の予定表の作表、印刷エンジンとしてexcel、という使い方をしたいです Dim oApp 'As Outlook.Application OutlookのApplication オブジェクトを入れる Dim myNameSpace 'As Outlook.NameSpace 名前のスペースと言われても、、 Dim myFolder 'As Outlook.Folder フォルダー指定 Dim shigoto Dim aITEM 'As Outlook.AppointmentItem '予定、アポ Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定 Set shigoto = myFolder.Folders("予定表(仕事)") shigoto.display oApp.ActiveWindow.WindowState = 2 'olNormalWindow=2 を セット For Each aITEM In shigoto.Items 'aITEMに入っている個々の予定に対する処理 Next http://www.ken3.org/cgi-bin/group/vba_outlook.asp 上記サイトのコードで、規定の予定表にある予定オブジェクトにアクセスすることはできました これを、iCloud内の予定表に対して同じことをやりたいのですが、うまくいきません。 Set shigoto = myFolder.Folders("iCloud内の予定表(仕事)") Set shigoto = myFolder.Folders("iCloud").Folders("予定表(仕事)") などとやってみたのですが、 実行時エラー'-2147221283(8004010f)": 操作は失敗しました。オブジェクトが見つかりませんでした。 というエラーで終了です。 うまくいく方法はないでしょうか? よろしくお願いします。

  • エクセル2007 VBAでアウトルック2007の予定表を作るんですが、

    エクセル2007 VBAでアウトルック2007の予定表を作るんですが、 日付まではうまくいったのに開始時刻が指定できません。 エクセルでのファイルを保存した後にそのファイルを添付したアウトルック予定表を作成します。 予定日は3ヶ月後、開始時刻は8:30amにしたいのですが、どうにも開始時刻だけが指定できません。 なにかいい方法があるでしょうか? こちらを参考に途中までは出来ています。 http://www.ken3.org/cgi-bin/group/vba_outlook.asp ただし、予定表の開始時刻が0:00となっているので、ここを8時30分にしたいのです。 (終了時間はあまり気にしません) そもそも出来ないのかな? コードは下記です。 Sub 保存() '保存コード省略 Flnm=フォルダとファイル名 'ここからアウトルックの操作 Dim oApp As Object Dim myNameSpace As Object Dim myFolder As Object Dim strMOJI As String Dim objITEM As Object 'outlook 起動 Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(9) '起動時フォルダーを指定 myFolder.Display 'アイテムの作成 Set objITEM = oApp.CreateItem(1) '予定表作成画面を指定 objITEM.Display '編集画面を表示 '予定表内容 objITEM.Subject = "見積り発行後のフォロー" '件名 objITEM.body = "見積り発行から3ヶ月経ちました" '本文 objITEM.Attachments.Add Flnm 'ファイルの添付 objITEM.Start = DateAdd("m", 3, Date) '予定日 'ここらへんがわからない        '開始時間も入れたい 'objITEM.Save                 '保存 'objITEM.Close 2                  '閉じる End Sub 開始時刻以外はすべてうまく処理出来ています。

  • VBAで二重起動を防止したいのですが、

    VBAで二重起動を防止したいのですが、 いろいろ調べましたが、わかりませんでした。 なにかいい方法はないでしょうか? EXCELで見積書を作成して、そのファイルをVBAで保存するとき、ついでに、Outlook予定表に見積り期限日予定を入れるものです。 ファイル保存コード省略 Flnm=パス 'ここからアウトルック操作 Dim oApp As Object Dim myNameSpace As Object Dim myFolder As Object Dim objITEM As Object 'outlook 起動 Set oApp = CreateObject("Outlook.Application") '既に起動してても新規起動 Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(9) '起動時フォルダーを指定 myFolder.Display 'アイテムの作成 Set objITEM = oApp.CreateItem(1) '予定表作成画面を指定 objITEM.Display '編集画面を表示 '予定表内容 objITEM.Subject = "見積り発行後のフォロー" '件名 objITEM.body = "見積り発行から3ヶ月経ちました" '本文 objITEM.Attachments.Add Flnm 'ファイルの添付 objITEM.Start = DateAdd("m", 3, Date) & " 8:30" '予定日と開始時間 objITEM.Save '保存 objITEM.Close 2 '閉じる EXCEL2007とOutlook2007を使用しています。 1.多重起動しないことと 2.起動中で最小化されたOutlookがあるならアクティブ化して予定を入れる、または 3.起動していなかったら起動させて、予定を入れる と云うことがやりたいのですが・・・

  • OutlookVBAでサブフォルダ一括作成

    Outlook(2007)のVBAを使って、 受信トレイの下にサブフォルダを一括作成する方法をご掲示下さい。 フォルダは200程度を予定しております。 Dim test As Long Set myOlApp = CreateObject("Outlook.Application") Set myNameSpace = myOlApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox) For test = 1 To 200 Set myNewFolder = myFolder.Folders.Add(test, olFolderDrafts) Next test フォルダ名を1~200ではなく、csvファイル、あるいはxlsファイル内のデータから読み取り、 それをフォルダ名として作成するようにするにはどのようにしたらよいのでしょうか? csv/xlsファイルは1列、200行あります。

  • Outlook2003 VBA マクロで迷惑フォルダ内のメールを一括削除したい

    行いたいことは、受信トレイ以下に「迷惑メール」と「迷惑メールフォルダ」というフォルダがあるのですが、これらのフォルダ内にあるメールを一括して削除するマクロを作成したいのです。 これまでは、フォルダを選択 → Ctrl+A → Delという操作を行っています。 ネット上のサンプルを参考に以下を作成しましたが、具合が良くないのです。1件づつループして削除させているので、数百件あると非常に処理が重くなるのです。 つまり、「Ctrl+A(全て選択) → Del」というようにさくっとした感じで処理がしたいのですが、その方法がわかりません。どうか、宜しくお願い致します。 Sub 複数のフォルダ内のメールを削除() 'お約束? Set myOlApp = CreateObject("Outlook.Application") Set myNameSpace = myOlApp.GetNamespace("MAPI") 'フォルダ指定 Set myFolder1 = myNameSpace.Folders("個人用フォルダ").Folders("迷惑メール") Set myFolder2 = myNameSpace.Folders("個人用フォルダ").Folders("迷惑メールフォルダ") '(1)「迷惑メール」内を削除 Dim cnt As Integer TOTAL = myFolder1.Items.Count For i = 1 To TOTAL '1番上のメールから順次削除 myFolder.Items(1).Display 'もしかして、これがいけない? myFolder.Items(1).Delete Next i '(2)「迷惑メール」内を削除 ・・・(1)と同様 End Sub 今回初めて、Outlook2003 VBAをさわってみましたので、基本がわかっていないと思います。ご指南頂ければ幸いです。

  • ダイレクトに目的のフォルダを指定する方法は?

    全てのフォルダをループするのではなく、 ダイレクトに目的のフォルダを指定する方法はありますか? アクセスからアウトルックの該当のフォルダの中身を取得したいのですが 下記コードで目的通り取得できるのですが コードが遠回りの気がします。 ダイレクトにフォルダを指定する方法があれば教えてください。 Sub test() Dim myNaSp As Namespace Dim myFolder As MAPIFolder Dim mySecFolder As MAPIFolder Dim myThrFolder As MAPIFolder Dim FolderName As String Dim myItem As MailItem Dim myindex As Long Set cn = CurrentProject.Connection Set myNaSp = GetNamespace("MAPI") For Each myFolder In myNaSp.GetDefaultFolder(olFolderInbox).Folders For myindex = 1 To myFolder.Items.Count Set myItem = myFolder.Items(myindex) If myFolder.Name = "testフォルダ" Then Debug.Print myItem.Body End If Next Next Set myNaSp = Nothing Set myFolder = Nothing End Sub

  • VBAです。OUTLOOKでウンドウを選択

    OUTLOOKでVBAでマクロを組んでいます。 自動的に新規メッセージ画面を開くように設定しています。 何枚もウィンドウが開かれているので、特定の新規メッセージ画面を最前面に表示する事はできないでしょうか? イメージではexcelのsheetをfor each でworksheetsコレクションを全部検索し、activateするイメージです。 コードは簡単に下記のようにメッセージを作成しています。 Dim oApp As New Outlook.Application Dim objmail As Object Set oApp = CreateObject("Outlook.Application") Set objmail = oApp.CreateItem(0) 'olMailItem=0 objmail.To = "宛先" objmail.Subject = "件名" objmail.Body = "本文の代入" objmail.Display '新規メッセージ画面表示 わかりにくいかもしれませんがよろしくお願いします。

  • SaveAsでバージョンを指定して保存する方法

    SaveAsでバージョンを指定して保存する方法が分かりません。 WINDOWS7 ACCESS2010のVBAから、EXCEL2000用のファイルとして保存するために、以下のようにしました ------------ Dim oApp As Object Dim oWkb As Object Dim oWks As Object Set oApp = CreateObject("Excel.Application") oApp.Visible = True oApp.DisplayAlerts = Flase '確認メッセージの非表示 Set oWkb = oApp.Workbooks.Open(filename:=CurrentProject.Path & "\" & MyFile, PassWord:="") ・ ・ ・ ↓ここで「オブジェクトがありません」と言うエラー oWkb.SaveAs CurrentProject.Path & "\" & MyFile, FileFormat:=xlExcel9795 どのようにしたら宜しいですか?

専門家に質問してみよう