
ExcelのVBAなんですがエクセルに専用と書いていても"無かった"と表示されてしまします
なぜでしょうか?
Sub 最終sample()
Const olMailItem = 0
Dim file As String
Dim pr As Workbook
Dim sl As Worksheet
Dim sh As Shape
Dim tb As Table
Dim r As Integer
Dim c As Integer
Dim s As String
Dim f1 As Boolean
Dim f2 As Boolean
Dim ol As Object
Dim mail As Object
Dim f As Object
Dim dic As Object
Dim k As Variant
Dim n As Variant
Dim mailTo As String
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "xlsx", "*.xlsx?"
.InitialFileName = "C:\"
.AllowMultiSelect = False
If Not .Show Then Exit Sub
file = .SelectedItems(1)
End With
Do
Set pr = Workbooks.Open(file)
For Each sl In pr.Worksheets
f1 = False
f2 = False
For Each sh In sl.Shapes
If sh.HasTable Then
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
'宛先
If InStr(s, "専用") Then
f1 = True
mailTo = "aquarius0319"
End If
If InStr(s, "フレッツ") Then
f1 = True
mailTo = "b230420"
End If
If InStr(s, "INS") Then
f1 = True
mailTo = "b230420"
End If
If f1 Then Exit Do
Next
Next
End If
Next
Next
MsgBox "無かった"
Loop Until True
pr.Close
If Not (f1) Then Exit Sub
'
MsgBox "見つけた"
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
No.2ベストアンサー
- 回答日時:
>2つキーワードがあった時は2か所のアドレスを作るのでしょうか?
#1 k(2, 2) = "b230420"ミスがあったので 下記に書き替えたサンプルを出します。
配列作成以下対象ブックを開いて閉じるところのサンプルです。
ちなみにOUTLOOKメールアドレスをつなげるのは、 半角スペース+セミコロンだったかと記憶していますが、違うかもです。
k(0, 0) = "専用": k(1, 0) = "フレッツ": k(2, 0) = "INS"
k(0, 1) = "aquarius0319": k(1, 1) = "b230420": k(2, 1) = "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
If mailTo <> "" Then
mailTo = mailTo & " ;" & k(i, 1)
Else
mailTo = k(i, 1)
f1 = True
End If
End If
Next
End If
Next
Bk.Close
ちなみに改修しやすくするアドバイスとして
名簿データシートを作成して その列にIDやキーワード、メルアドなどを
表にします。行方向はIDに対して関連項目になります。
VBAで配列を作る時や多くのキーワードを探す場合など表の範囲を指定すれば値を取得できます。
各項目が変更になる場合などそのシートを変更すれば、VBAコードを書き直す必要が減りますね。
シートは、通常表示できないようにVBAで非表示にすれば良いです。
No.1
- 回答日時:
こんにちは
コードを見るとシェイプが出てきておりますが、Excelはセルの値で良いのでしょうか?
IFで"専用"などを探しているようですが、
キーワードが2つあった場合は、どのような優先順位をお考えですか?
2つキーワードがあった時は2か所のアドレスを作るのでしょうか?
https://oshiete.goo.ne.jp/qa/12646659.htmlへのレスもないですが、
サンプルを示せを示せば、ご自身で改修出来ますか?
変な条件設定なので書き直しますね。
秋田がある事と"専用""フレッツ""INS"いづれかがある事でメールを作成します。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
[VB.net] ボタン(Flat)のEnable...
-
【VBA】 結合セルに複数画像と...
-
vba textboxへの入力について教...
-
VB.net 文字列から日付型へ変更...
-
Excel VBA 選択範囲の罫線色の...
-
【ExcelVBA】値を変更しながら...
-
VBAで特定の文字が入った行をコ...
-
【マクロ】並び替えの範囲が、...
-
【VBA】値を変更しながら連続で...
-
vbs ブック共有を解除
-
VBA ユーザーフォーム ボタンク...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
Vba セルの4辺について罫線が有...
-
ダブルクリックで貼り付けた画...
-
Excelのマクロについて教えてく...
-
VBAでユーザーフォームを指定回...
-
VBAでセルの書式を変えずに文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
さくらサーバーにて、phpからメ...
-
phpでのメール転送(添付ファイ...
-
PHPからメールを送る@さくらイ...
-
mailやmb_send_mail関数で、本...
-
PHPMailerのコードエラーが解決...
-
サーバーによってはmb_send_mai...
-
mb_send_mail関数が利用出来ない
-
PHPでメールを送信するには
-
ワードプレス 予約システム
-
excel VBAでメールを送る方法に...
-
メール送信プログラム
-
PHPからロリポップ!のメールサ...
-
php 完了画面の送信メールのコ...
-
ローカル環境でのメール送信
-
PHPで、複数のアドレスにメール...
-
mb_send_mail() 第 4、5 引数の...
-
excel VBAでメールを送る方法に...
-
POP Before SMTPでメールを送信...
-
複数行の文字列をメールのヘッ...
-
VBA 添付ファイルをつけてメー...
おすすめ情報
コードを見るとシェイプが出てきておりますが、Excelはセルの値で良いのでしょうか?
回答 そうです
IFで"専用"などを探しているようですが、
キーワードが2つあった場合は、どのような優先順位をお考えですか?
2つキーワードがあった時は2か所のアドレスを作るのでしょうか?
回答 2つのキーワードがあったら2箇所におくります
すいません
自分では変えれなそうです‥