再度修正しました
VBAで専用かつINSの時にメールをsyunsukeに送りたいのですがこれだとaquarius0319にしか行きません なぜでしょうか?
VBA
1Sub 最終sample() 2Const olMailItem = 0 3Dim file As String 4Dim pr As Presentation 5Dim sl As Slide 6Dim sh As Shape 7Dim tb As Table 8Dim r As Integer 9Dim c As Integer 10Dim s As String 11Dim t As String 12 13Dim f1 As Boolean 14Dim f2 As Boolean 15Dim ol As Object 16Dim mail As Object 17Dim f As Object 18Dim dic As Object 19Dim k As Variant 20Dim n As Variant 21Dim mailTo As String 22 23With Application.FileDialog(msoFileDialogOpen) 24.Filters.Clear 25.Filters.Add "ppt", "*.ppt?" 26.InitialFileName = "C:\" 27.AllowMultiSelect = False 28If Not .Show Then Exit Sub 29file = .SelectedItems(1) 30End With 31 32Do 33Set pr = Presentations.Open(file) 34For Each sl In pr.Slides 35f1 = False 36f2 = False 37For Each sh In sl.Shapes 38If sh.HasTable Then 39Set tb = sh.Table 40For r = 1 To tb.Rows.Count 41For c = 1 To tb.Rows(r).Cells.Count 42s = tb.Rows(r).Cells(c).Shape.TextFrame2.TextRange.Text 43t = tb.Rows(r).Cells(c).Shape.TextFrame2.TextRange.Text 44'宛先 45If InStr(s, "専用") > 0 And InStr(t, "INS") > 0 Then 46f1 = True 47mailTo = "syunsuke" 48End If 49If InStr(s, "フレッツ") Then 50f1 = True 51mailTo = "b230420" 52End If 53If InStr(s, "INS") Then 54f1 = True 55mailTo = "b230420" 56End If 57If InStr(s, "専用") Then 58f1 = True 59mailTo = "aquarius0319" 60End If 61 62If InStr(s, "秋田") And r < tb.Rows.Count Then 63If IsNumeric(tb.Rows(r + 1).Cells(c).Shape.TextFrame2.TextRange.Text) Then f2 = True 64End If 65If f1 And f2 Then Exit Do 66Next 67Next 68End If 69Next 70Next 71MsgBox "無かった" 72Loop Until True 73pr.Close 74 75If Not (f1 And f2) Then Exit Sub 76' 77MsgBox "見つけた" 78 79Set ol = CreateObject("Outlook.Application") 80Set mail = ol.CreateItem(olMailItem) 81mail.Display 82 83mail.To = mailTo '宛先 84mail.Subject = "件名" 85mail.Body = "本文" 86 87'添付ファイル 88mail.Attachments.Add file 89 90'添付ファイル 91With Application.FileDialog(msoFileDialogOpen) 92.Filters.Clear 93.Filters.Add "添付ファイル", "*.*" 94.InitialFileName = "C:\" 95.AllowMultiSelect = True 96If .Show Then 97Dim o As Integer 98For o = 1 To .SelectedItems.Count 99mail.Attachments.Add .SelectedItems(o) 100Next 101End If 102End With 103 104'メール送信 105mail.Send '送信 106 107ol.Quit 108 109End Sub
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
(主に回答者向けの情報です)
VBA のコードを見やすく整形してくれるサイトがあるようです。構文の色付けもされるので多少読みやすくなります。
https://www.automateexcel.com/vba-code-indenter/
ありがとうございます
修正させていただきました
残念ながら質問文のコード整形が解消していないようです。ソースコードの前後を「```」で囲む必要があります。
<コードブロックの記入例>
```VBA
ソースコード
```
cx20様
ありがとうございます
修正させていただきました
修正ありがとうございます。インデントが付いていた状態でコード記載して頂けるとより見やすくなるかと思います。
素朴な疑問だけど、
ループを作り、パワーポイント内の表・テーブルのtb.Rows(r).Cells(c)でテキストを取り出し
VBAで
専用かつINSの時に
メールをsyunsukeに送りたい
仕様だと思いますが、
Set tb = sh.Table
For r = 1 To tb.Rows.Count
For c = 1 To tb.Rows(r).Cells.Count
s = tb.Rows(r).Cells(c).Shape.TextFrame2.TextRange.Text
t = tb.Rows(r).Cells(c).Shape.TextFrame2.TextRange.Text
'宛先
If InStr(s, "専用") > 0 And InStr(t, "INS") > 0 Then
↑変数sとtが同じ場所を(同じ値なのでは?)
s = tb.Rows(r).Cells(c).Shape.TextFrame2.TextRange.Text
t = tb.Rows(r).Cells(c).Shape.TextFrame2.TextRange.Text
で
専用かつINSの時って?
あっ、"INSxxxx専用"とか"xx専用xxINS"のデータをチェックしている場合もあるか。
sとtに変数を分けているので、別の場所(隣や下のセルなど)を参照したいのかと、深読みしてみた。
なんて、やりたいこと・仕様を勝手に想像すると、痛い目見るので、
※実データは無理だとおもいますが、
例題の表があると(テストの表があると)
ズバリの回答が得られやすいかも。。
※※過去質問に書いてあったらすみません。
長々、コメント書いたけど、
一言、
表の値・条件を書いてください
^^^^^^^^^^^^^^^^^^^^^^^^
と言えばヨカッタかも。
回答4件
あなたの回答
tips
プレビュー