2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

« 2011年9月 | トップページ | 2011年11月 »

2011年10月30日 (日)

◆Outlook VBA(メール誤送信防止のためのチェックあれこれ その3)

メール誤送信防止チェックの最終回です。今回は標準モジュールとフォームです。

(1)Outlookを起動したら、
(2)Alt+F11を押下してMicrosoft Basic Editorを表示します。
(3)どこでも良いですがProject1(VbaProject.OTM)上で右クリックし、メニュー「挿入」→「標準モジュール」を選択し、以下の標準モジュールの内容をコピペします。
(4)(3)と同様に右クリックし、メニュー「挿入」→「ユーザフォーム」を選択。追加されたフォームを下記の画像の通りに作成します。右クリックし、「コードの表示」を選択し、以下のユーザフォームの内容をコピペします。

'------------------------------
' 標準モジュール
'------------------------------
Public gTitle As String
Public gAddress
Public gTempFile
Public SendFlg As Boolean

Sub m_SendCheck(Optional ByVal dummy As String)
    U1.Show
End Sub

User_form

'------------------------------
' ユーザフォーム
'------------------------------
Private Sub CommandButton1_Click()
    SendFlg = False
    Unload U1
End Sub

Private Sub CommandButton2_Click()
    SendFlg = True
    Unload U1
End Sub

Private Sub UserForm_Initialize()
    '件名
    If gTitle <> "" Then
        U1.TextBox1.Text = gTitle
    Else
        U1.TextBox1.Text = "**** 件名なし ****"
    End If
   
    '宛先
    U1.Label3.Caption = U1.Label3.Caption & " 件数:" & gAddress.Count
    Dim lcnt As Integer
    lcnt = 0
    For Each oAddress In gAddress
        lcnt = lcnt + 1
        U1.ListBox1.AddItem Format(lcnt, "00") & "." & oAddress.Name & " 【" & oAddress.Address & "】"
    Next
   
    '添付ファイル
    U1.Label4.Caption = U1.Label4.Caption & " 件数:" & gTempFile.Count
    lcnt = 0
    If gTempFile.Count > 0 Then
        For Each oTempFile In gTempFile
            lcnt = lcnt + 1
            U1.ListBox2.AddItem Format(lcnt, "00") & "." & oTempFile.FileName
        Next
    Else
        U1.ListBox2.AddItem "**** 添付ファイルなし ****"
       
    End If
   
    Set oAddress = Nothing
    Set oTempFile = Nothing
   
End Sub

それでは解説です。
まず標準モジュールのPublic変数は前回解説したThisOutlookSessionモジュール内で設定した内容を
ユーザフォームに渡すものです。またSendFlgは送信か否かを受け取るフラグ変数です。
処理の内容は単にユーザフォームを表示(show)するだけです。
なぜThisOutlookSessionでやらないのかというと、このPublic変数がThisOutlookSession内で定義出来無かった
ので、変数定義だけではつまらないのでm_SendCheckを書いたという理由です。

次に、ユーザフォームです。
まずフォームの作成について何点か補足します。
件名を表示するTextBoxのBorderStyleプロパティでは1を定義しています。
そして、EnabledプロパティにはFalseを定義しています。この設定は処理とは関係有りません、私の趣味です。
■宛先と■添付ファイルのLabelですが、ロジックで件数情報を付加していますので横長に定義しましょう。
キャンセルボタンのCancelプロパティ、Defaultプロパティは共にTrueを設定しています。
今回の誤送信防止チェックのコンセプトはEnterキーで間違って送信しないように、意識的にデフォルトボタンは「いいえ」か「キャンセル」にしています。
次にロジックですが、UserForm_Initializeでフォームを初期表示した際の処理と、送信ボタン、キャンセルボタンが押下された時の処理があるだけです。
宛先のメールアドレスはアドレスと表示名を両方表示できるようにしています。
件名と添付ファイルが存在しない場合は、文言で無いことが一目で分かるようにしています。
あとは大したことはしていませんので解説は不要でしょう。

以上でプログラムの説明が終わりました。
この機能を利用すればある程度チェックが働きますので誤送信防止に寄与するでしょう。私自身も重宝しています。よかったら利用してみてください。
<関連記事>
その1
その2

最後に、以下のサイトを参考にさせて頂きました。ありがとうございました。
http://d.hatena.ne.jp/fyts/20070813/outlook

2011年10月29日 (土)

◆Outlook VBA(メール誤送信防止のためのチェックあれこれ その2)

前回からの続きです。メール誤送信を防ぐために作成した4つの機能について、プログラムを説明していきます。今回はThisOutlookSessionです。

(1)Outlookを起動したら、
(2)Alt+F11を押下してMicrosoft Basic Editorを表示します。
(3)ThisOutlookSessionモジュールに以下の内容をコピペします。

Private Sub Application_Itemsend(ByVal Item As Object, Cancel As Boolean)
    Dim lSubject As String
    Dim lBody As String
    Const cMongon As String = "添付|別添|別紙"    '本文と件名をチェックしたい文言を|で区切って指定する
    Const cCheck As String = "xlsx|xlsm"           '添付ファイルの拡張子をチェックしたい拡張子を|で区切って小文字で指定する
   
    lSubject = Item.Subject '件名
    lBody = Item.Body '本文
   
    '件名チェック
    If Trim(lSubject) = "" Then
        If vbNo = MsgBox("件名が未入力です。本当に送信しますか?", vbYesNo + vbDefaultButton2 + vbExclamation, "件名チェック") Then
            Cancel = True
            Exit Sub
        End If
    End If
   
    '添付ファイル存在チェック
    lLoop = Split(cMongon, "|")
    lTempFlg = False
    For i = 0 To UBound(lLoop)
        If lSubject & lBody Like "*" & lLoop(i) & "*" And Item.Attachments.Count = 0 Then
            lTempFlg = True
            lVal = lLoop(i)
            Exit For
        End If
    Next
    If lTempFlg = True Then
        If vbNo = MsgBox("本文または件名に「" & lVal & "」という文言が含まれています。" & vbCrLf & _
            "添付ファイルを忘れている可能性がありますが送信しますか?", vbYesNo + vbDefaultButton2 + vbExclamation, "添付ファイル存在チェック") Then
            Cancel = True
            Exit Sub
        End If
    End If
   
    '添付ファイル拡張子チェック
    If Item.Attachments.Count > 0 Then
        lLoop2 = Split(cCheck, "|")
        For i = 0 To UBound(lLoop2)
            For Each oAt In Item.Attachments
                If StrConv(oAt.FileName, vbLowerCase) Like "*" & lLoop2(i) Then
                    If vbNo = MsgBox("添付ファイルの中に送信不可の拡張子(" & lLoop2(i) & ")が含まれている可能性があります。" & vbCrLf & _
                                    "本当に送信しますか?", vbYesNo + vbDefaultButton2 + vbExclamation, "添付ファイルチェック") Then
                        Cancel = True
                        Set oAt = Nothing
                        Exit Sub
                    End If
                End If
            Next
        Next
    End If
   
   
    '宛先確認
    gTitle = Item.Subject
    Set gAddress = Item.Recipients
    Set gTempFile = Item.Attachments
   
    Call m_SendCheck
    Cancel = SendFlg
   
End Sub

解説ですが、Application_Itemsendは送信ボタンを押下したときに発生するイベントです。引数のItemは送信しようとしているメールの情報が入っているオブジェクト型の変数です。引数のCancelはプログラムの中でTrueを設定すれば送信中止、Falseを設定すれば送信をコントロールする変数です。
プログラムの中身ですが、cMongonに添付ファイルをチェックする際に使用する文言を定義しておく変数です。他に適切な文言があれば追加してみてください。cCheckには送信前にチェックしたいファイル拡張子を追加してみてください。あとは、順番に件名未入力チェック、添付ファイル忘れチェック、拡張子チェック、宛先確認ダイアログ表示となります。

宛先確認ダイアログは標準モジュールのm_SendCheckを呼び出すことになりますが、長くなりましたので次回とします。それではまた。

2011年10月26日 (水)

◆Outlook VBA(メール誤送信防止のためのチェックあれこれ その1)

久しぶりのOutlookネタです。最近訳あってThunderbirdからOutlookに戻って来ました。
久しぶりに使ってみると、Thunderbirdでは即座に送信されるのではなく、送信前のチェックによって誤送信を防止するための機能が幾つかありました。しかしOutlookでは標準装備されていないことが分かり、使い勝手が悪いのでVBAで作ってみました。
送信ボタンを押下した時に送信メールに対してチェックします。
作成した機能は以下のとおり。

(1)件名チェック
件名が未入力の場合、そのまま送信するかどうかの確認メッセージを表示して次のチェックにいきます。
いいえを押下すると送信を中止することができます。
Subject_check

(2)添付ファイル忘れチェック
本文か件名に添付といった文言が含まれている場合、ファイルが添付されているかチェックします。
添付ファイルが無い場合、そのまま送信するかどうかの確認メッセージを表示して次のチェックにいきます。
いいえを押下すると送信を中止することができます。
Temp_check

(3)添付ファイル拡張子チェック
社内やお客様はまだOffice2003を利用していることが多く、2007/2010形式のファイルを送信しないように拡張子チェックします。とりあえずExcelのxlsxとxlsmが添付されていたら、そのまま送信するか確認メッセージを表示します。
いいえを押下すると送信を中止することができます。
Xlsx_check_2

(4)宛先確認
宛先に設定されているメールアドレスを列挙して、確認を促すダイアログを表示します。
最初、単純にメッセージ表示していたのですが、アドレスが多いと表示文字の制限のために表示しきれないケースがあったので確認用のフォームを作りました。
キャンセルを押下すると送信を中止することができます。
Atesaki_check

VbaProject.OTMを公開しても良いのですが、すでに何らかのVBAを実装している方のためにソースの公開にします。ちょっと行数が多いので次回ということにします。それではまた。

2011年10月15日 (土)

◆Excel VBA(<PC資産管理>使用ソフトウェアのバージョンを管理するツール2)

自分がインストールしているソフトウェアのバージョンを把握するツールであるversion_check.xlsを修正しました。その理由は、ThunderbirdとFireFoxのダウンロードサイトが最近変わって、どこにもバージョン番号が表示されなくなったからです。解決方法としては、ダウンロードサイトのソースに含まれている要素の中にdata-version=というものがあるので、そこからバージョン番号を取得するようにしました。

ツールの右端の列に「取得要素」を増やしました。それと同時にE2000Toolsも要素を取得する機能を追加したわけです。

Version_check2_2

前回の記事はこちら
「version_check2.xls」をダウンロード
E200Toolsはこちら

« 2011年9月 | トップページ | 2011年11月 »