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

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

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

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

Q&A

2回答

780閲覧

excel VBA メールを送る方法について

shunsuke_0319

総合スコア2

VBA

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

0グッド

0クリップ

投稿2021/11/03 07:12

ExcelのVBAなんですがエクセルに専用と書いていても"無かった"と表示されてしまします
なぜでしょうか?

VBA

1Sub 最終sample() 2Const olMailItem = 0 3Dim file As String 4Dim pr As Workbook 5Dim sl As Worksheet 6Dim sh As Shape 7Dim tb As Table 8Dim r As Integer 9Dim c As Integer 10Dim s As String 11 12Dim f1 As Boolean 13Dim f2 As Boolean 14Dim ol As Object 15Dim mail As Object 16Dim f As Object 17Dim dic As Object 18Dim k As Variant 19Dim n As Variant 20Dim mailTo As String 21 22With Application.FileDialog(msoFileDialogOpen) 23.Filters.Clear 24.Filters.Add "xlsx", "*.xlsx?" 25.InitialFileName = "C:\" 26.AllowMultiSelect = False 27If Not .Show Then Exit Sub 28file = .SelectedItems(1) 29End With 30 31Do 32Set pr = Workbooks.Open(file) 33For Each sl In pr.Worksheets 34f1 = False 35f2 = False 36For Each sh In sl.Shapes 37If sh.HasTable Then 38Set tb = sh.Table 39For r = 1 To tb.Rows.Count 40For c = 1 To tb.Rows(r).Cells.Count 41s = tb.Rows(r).Cells(c).Shape.TextFrame2.TextRange.Text 42'宛先 43If InStr(s, "専用") Then 44f1 = True 45mailTo = "aquarius0319" 46End If 47If InStr(s, "フレッツ") Then 48f1 = True 49mailTo = "b230420" 50End If 51If InStr(s, "INS") Then 52f1 = True 53mailTo = "b230420" 54End If 55If f1 Then Exit Do 56Next 57Next 58End If 59Next 60Next 61MsgBox "無かった" 62Loop Until True 63pr.Close 64 65If Not (f1) Then Exit Sub 66' 67MsgBox "見つけた" 68 69 70Set ol = CreateObject("Outlook.Application") 71Set mail = ol.CreateItem(olMailItem) 72mail.Display 73 74mail.To = mailTo '宛先 75mail.Subject = "件名" 76mail.Body = "本文" 77 78'添付ファイル 79mail.Attachments.Add file 80 81'添付ファイル 82With Application.FileDialog(msoFileDialogOpen) 83.Filters.Clear 84.Filters.Add "添付ファイル", "*.*" 85.InitialFileName = "C:\" 86.AllowMultiSelect = True 87If .Show Then 88Dim o As Integer 89For o = 1 To .SelectedItems.Count 90mail.Attachments.Add .SelectedItems(o) 91Next 92End If 93End With 94 95'メール送信 96mail.Send '送信 97 98ol.Quit 99 100End Sub

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

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

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

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

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

cx20

2021/11/03 07:23

以前にも書きましたが、デバッグ実行して処理が呼ばれているか確認してみて下さい。 VBAの場合、F8キーでステップ実行(1行ずつ実行)が行えます。
guest

回答2

0

恐らく PowerPoint を扱う VBA のコードを Excel の VBA に移植しようとされているのだと思いますが、PowerPoint と Excel で表の扱いが異なるのでそのあたりを理解する必要があります。

以下は PowerPoint と Excel で、それぞれ表の中から「専用」の文字を取得する方法になります。

■ PowerPoint の場合

VBA

1Slides(2).Shapes(1).Table.Rows(2).Cells(1).Shape.TextFrame2.TextRange.Text

イメージ説明

■ Excel の場合

VBA

1Sheets(2).Cells(2,1)

イメージ説明

投稿2021/11/03 08:09

編集2021/11/03 08:27
cx20

総合スコア4633

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

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

0

Sub sample()
Const olMailItem = 0
Dim file As String
Dim Bk As Workbook
Dim SH As Worksheet
Dim i As Long
Dim f1 As Boolean
Dim ol As Object
Dim mail As Object
Dim mailTo As String
Dim k(0 To 2, 0 To 2)
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "xls", ".xls?"
.InitialFileName = "C:"
.AllowMultiSelect = False
If Not .Show Then Exit Sub
file = .SelectedItems(1)
End With
k(0, 0) = "専用": k(1, 0) = "フレッツ": k(2, 0) = "INS"
k(0, 1) = "aquarius0319": k(1, 1) = "b230420": k(2, 2) = "b230420"
Set Bk = Workbooks.Open(file)
f1 = False
For Each SH In Bk.Worksheets
If Not SH.UsedRange.Find(What:="秋田", LookAt:=xlPart) Is Nothing Then
For i = 0 To UBound(k, 1)
If Not SH.UsedRange.Find(What:=k(i, 0), LookAt:=xlPart) Is Nothing Then
mailTo = k(i, 1)
f1 = True
GoTo HitKey
End If
Next
End If
Next
HitKey:
Bk.Close
If f1 = False Then
MsgBox "無かった"
Exit Sub
Else
MsgBox "見つけた"
End If
Set ol = CreateObject("Outlook.Application")
Set mail = ol.CreateItem(olMailItem)
mail.Display
mail.To = mailTo '宛先
mail.Subject = "件名"
mail.Body = "本文"
'添付ファイル
mail.Attachments.Add file
'添付ファイル
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "添付ファイル", "
.*"
.InitialFileName = "C:"
.AllowMultiSelect = True
If .Show Then
Dim o As Integer
For o = 1 To .SelectedItems.Count
mail.Attachments.Add .SelectedItems(o)
Next
End If
End With
'メール送信
mail.Send '送信
ol.Quit
End Sub

投稿2021/11/03 08:03

shunsuke_0319

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問