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

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

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

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

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

1回答

1660閲覧

outlookのvba機能を使用し、メール受信時にExcelファイル(テスト.xlsm)を開きたい。

masafumi55

総合スコア12

VBA

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

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2021/05/21 04:25

編集2021/05/21 04:52

やりたかったこと

・outlookのvba機能を使用し、メール受信時に「テスト.xlsm」を開きたいです。
お忙しいところ恐縮ですが、お力添えのほどお願い致します。
(追記補足)
なぜ、outlookのvbaから、Excelを直接起動させず、わざわざコマンドプロントによるExcel起動なのかというと、
コマンドプロントを介入しなければ、エクセルのworkbook_Openメソッドが起動しなかったためです。

エラー内容

・下図のとおり指定ファイル見つかりませんとなります。

イメージ説明

エラーに対してやってみたこと

1. まずパスの記述ミスの可能性を潰しました。(Dir()による確認済。)
その結果、Dir()による指定ファイルの存在確認はきちんとできていたにも
関わらず、コマンドプロントによる起動が不可であることが分かりました。

2. また、コマンドプロントへの手入力においても、ファイルを開くことが可能でした。

【結論】
以上2点のことから、指定ファイルが実在していることは確認できました。
コマンドプロントへのコードが誤っているものと推察しておりますがそれ以上はわかりません。

コード

参考にさせていただいたサイト(ほぼ模写させていただきました。)
https://vbabeginner.net/start-command-prompt-and-execute-command/

Sub CommandPronptExec() Dim sh As New IWshRuntimeLibrary.WshShell '// WshShellクラスオブジェクト Dim ex As WshExec Dim sArCmd(2) Dim sCmd Dim i Dim file As String 'パス用 Dim folder1 As String 'パス用 Dim folder2 As String 'パス用 Dim folder3 As String 'パス用 Dim fileName As String 'パス用 Dim file_fullPath As String 'パス用 Dim folder2_R As String'コマンド用 Dim folder3_R As String'コマンド用 '//変数 folder1 = "C:\Users\10007410067\" folder2 = "OneDrive - sawatari\" folder2_R = Left(folder2, Len(folder2) - 1) folder3 = "●main\" folder3_R = Left(folder3, Len(folder3) - 1) fileName = "テスト.xlsm" file_fullPath = folder1 & folder2 & folder3 & fileName '// 実行する順にコマンドを配列に格納 file = Dir(file_fullPath) sArCmd(0) = "cd " & folder2_R sArCmd(1) = "cd " & folder3_R sArCmd(2) = "start " & file '// コマンドを[ & ]で連結 For i = 0 To UBound(sArCmd) If (i > 0) Then sCmd = sCmd & " & " End If sCmd = sCmd & sArCmd(i) Next '// コマンド実行 Set ex = sh.Exec("cmd.exe /c " & sCmd) '// コマンド失敗時 If (ex.Status = WshFailed) Then '// 処理を抜ける Exit Sub End If '// コマンド実行中は待ち Do While (ex.Status = WshRunning) DoEvents Loop End Sub

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

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

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

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

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

guest

回答1

0

自己解決

当件ですが、コマンドプロントからの操作はかないませんでしたが、以下の対応により本懐である「workbook_open関数」の処理は出来ました。

解決策としては、そもそもoutlookのvbaからエクセルを開いたとしても、「workbook_open関数」は走りました。

以上、読んでいただいた方々には大変恐縮ですが、お時間のほどいただきまして誠にありがとうございました。

投稿2021/05/21 07:06

編集2021/06/19 02:42
masafumi55

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問