
TODO管理でoutlookでメールを送るVBAなんですが、2016では問題ないのに2013ではコンパイルエラー 「コンパイルエラー :ユーザ定義型は定義されていません」が表示されます。
2016で作成したのが問題かと思い2013で作り直してみましたが結果は同じです。何が問題でしょうか?
VBAは
シート1が
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRange As Range
Set myRange = Sheet1.ListObjects(1).ListColumns("ステータス").DataBodyRange
Dim r As Range
For Each r In Target
If Not Intersect(myRange, r) Is Nothing And r.Value = "完了" Then
Call ToDo完了メール送信(r.row)
End If
Next r
End Sub
標準モジュールは
Public Enum e
no = 1
記入日
タスク
期限
ステータス
End Enum
Sub ToDo完了メール送信(ByVal row As Long)
'各要素の作成
With Sheet1
Dim myNo As Long: myNo = .Cells(row, e.no).Value
Dim myTask As String: myTask = .Cells(row, e.タスク).Value
End With
Const MY_TO As String = "aaaaaa@yahoo.com"
Const RECIPIENT As String = "株式会社ABC"
Dim mySubject As String
mySubject = mySubject & "タスク完了メール: [" & myNo & "] " & myTask
Dim myBody As String: myBody = ""
myBody = myBody & RECIPIENT & "<br>"
myBody = myBody & "以下のタスクが完了しました<br>"
myBody = myBody & "[" & myNo & "] " & myTask
'メールの送信
Dim olApp As Outlook.Application: Set olApp = New Outlook.Application
Dim myMail As MailItem: Set myMail = olApp.CreateItem(olMailItem)
With myMail
.To = MY_TO
.Subject = mySubject
.Display
.HTMLBody = myBody & .HTMLBody
.Send
End With
End Sub
以上です!
わかる方よろしくお願いします。初心者なのでできればわかりやすくお願いします。
No.2ベストアンサー
- 回答日時:
これで、初心者のコードだからと言われたら、私など回答者の立つ瀬がありません。
ご自身が作られたコードではありませんね。要するに、そのエラーは、バージョンには関係がなく、
Dim olApp As Outlook.Application: Set olApp = New Outlook.Application
こういう書き方は、分かっている人が書くコードです。
参照設定の Microsoft Outlook が、おそらく登録されていないだけのことだと思います。
ツール-->参照設定
後は、Microsoft Outlook 15.0 Object Library
にチェックを入れてあるのか確認してください。以下は、Office 2016ですが、2013に読み替えてください。だめだったら、その旨を補足にでもしてください。

ありがとうございました。自分でもいろいろとテキストを購入しながら解決策を探しておりましたが、一つの原因としてMicrosoft Outlook 16.0 Object Library が2013には無いのでMicrosoft Outlook 15.0 Object Library に2013で変更する必要がありました。
あと単純なテキストミスがありました。
Sub ToDo完了メール送信(ByVal row As Long)
'各要素の作成
With Sheet1
Dim myNo As Long: myNo = .Cells(row, e.no).Value
Dim myTask As String: myTask = .Cells(row, e.タスク).Value
を
Sub ToDo完了メール送信(ByVal row As String)
'各要素の作成
With Sheet1
Dim myNo As String: myNo = .Cells(row, e.no).Value
Dim myTask As String: myTask = .Cells(row, e.タスク).Value
に変更してないということが分かりました。
ほんと最近VBAを始めたばかりなので、基本がわからず色々勉強しています。VBAは奥が深いですね。
またわからないことがありましたら、ここで質問させていただきますのでよろしくお願いいたします。
No.3
- 回答日時:
>解決策が見つけられない状態です。
気になる部分がいくつかあるのですが、ひどく凝った内容だと思います。
ご質問の文面の中で不明な部分があります。
お使いのOutlook のバージョンはどちらでしょうか。まさか、Office 2016と2013 は混在していている場合でも、Outlook はひとつしかありません。2つのアプリが存在できません。
ひとつ試してみたいのは、
Dim olApp
の後、As を入れ、O と入れたら、"Outlook...." とインテリセンスが働きますでしょうか。
それがだめでしたら、
Dim olApp As Object: Set olApp = CreateObject("Outlook.Application")
と書き換えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
EXCEL VBAマクロ中断でデバッグ...
-
VBAのコードがエラーになっ...
-
『実行時エラー 5 プロシージャ...
-
VBAのエラー発生場所をメッセー...
-
SQL文をVBAで流すと「型...
-
VBAでのエラー
-
Outlook.ApplicationをCreateOb...
-
INSERT INTOステートメント構文...
-
OLEDB.NETで接続できない
-
エラーでつまってます・・・お...
-
インプットボックスのキャンセ...
-
C#のSystem.Windows.Media.Colo...
-
【Excel VBA】マクロをボタンに...
-
トランスポートレベルのエラー
-
ExcelVBA Range クラスの Page...
-
マクロについて教えてください...
-
Accessで定型フォーマットのExc...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
実行時エラー -'-2147417848
-
ExcelVBA Range クラスの Page...
-
マクロについて教えてください...
-
VBAでのエラー
-
【Excel VBA】マクロをボタンに...
-
実行時エラー48発生時のDLL特定...
-
EXCEL VBAマクロ中断でデバッグ...
-
なぜエラーになるのでしょうか...
-
実行時エラー3001「引数が間違...
-
OLEDB.NETで接続できない
-
INSERT INTOステートメント構文...
-
VBAのエラー発生場所をメッセー...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
ADODB.Streamを使用してUTF-8を...
-
カーソルオープンでエラー(ORA...
-
Invalid procedure call or arg...
おすすめ情報
早速ご回答ありがとうございます。ご指摘の通り自身で作成したVBAではありません。参照設定については15.0に変更してやってみましたが同じ状況です。
コンパイルエラーが出ると
デバックで「Sub ToDo満了メール送信(ByVal row As Long)」が黄色く反転し
「Dim olApp As Outlook.Application: Set olApp = New Outlook.Application」が青く反転します。
いろいろネットで検索してもなかなか解決策が見つけられない状態です。
何か解決策ありませんか?