VBScript から VBScript を同期実行して戻り値を取得する
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
世の中には色々なプログラム言語がありますが、それぞれ得意なことが限定されたりします。
もちろん全くできない事は無いはずですが、プログラムが複雑になったり、プログラムを書く量がとても増えてしまったりと業務上の不都合が出て来る事もあります。
取っ掛かりとして VBScript から別の VBScript を実行して別の VBScript の戻り値を取得する Script を作成します。
関数
ソースコード
〜呼び出される VBScript ①〜
Sample2.vbs
msg = "これは Sample2.vbs です。"
MsgBox msg
WScript.Quit(101) ' 戻り値
ソースコード
〜呼び出される VBScript ②〜
Sample3.vbs
msg = "これは Sample3.vbs です。"
MsgBox msg
WScript.Quit(102) ' 戻り値
ソースコード
〜呼び出す VBScript 〜
Sample1.vbs
Set objWsh = WScript.CreateObject("WScript.Shell")
' Sample2.vbs を実行
ret2 = objWsh.Run("Sample2.vbs", , True)
' Sample3.vbs を実行
ret3 = objWsh.Run("Sample3.vbs", , True)
msg1 = "これは Sample1.vbs です。"
msg1 = msg1 & vbcrlf & _
"ret2 = " & ret2 & vbcrlf & _
"ret3 = " & ret3
MsgBox msg1
Set objWsh = Nothing
使い方
まず、上でソースコードを紹介した下の(1)〜(3)の VBScript を同じフォルダ内に作成します。(1)呼び出される VBScript ①
(2)呼び出される VBScript ②
(3)呼び出す VBScript
呼び出される VBScript ①(Sample2.vbs)を単体で実行すると図2 のメッセージが表示されます。
呼び出される VBScript ②(Sample3.vbs)を単体で実行すると図3 のメッセージが表示されます。
呼び出す VBScript (Sample1.vbs)を実行すると図4 〜図6 のメッセージが順に表示されます。
コメント
どんなプログラム言語であれ、外部のプログラムを実行する方法があるはずなので、 VBScript では簡単でしたが、他のプログラム言語でもやってみたい。
以上
C# でドラッグ&ドロップしたファイルのパスワード付き zip ファイルを作る
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
前の記事で、ファイルをドロップしたら zip ファイルが作成される VBScript を作成したのですが、パスワードをかけられませんでした。
私が特殊なのかもしれませんが、 zip ファイルってメールに添付する時にしか使って無いんですよね。
だから、ここまでする必要あるのかっていう意見もあるかもしれませんが、 C# でファイルをドロップしたらパスワード付きの zip ファイルが作成されるプログラムを作ります。
下準備
開発環境
Visual Studio 2017 Communityプログラム言語
C#DLL
DotNetZipプログラムが出来上がるまで
.NET Framework 4.5 以降から ZipFile クラスという zip ファイルを扱うクラスが追加されています。それで、よく調べもせず、とりあえずパスワード無しの zip ファイル作成プログラム作ったのですが、いざ、パスワードを付けようと調べたら ZipFile クラスからはパスワードを設定できる様な仕様は見つかりませんでした。
パスワードが設定出来る zip ファイルの事を調べていたら、 DotNetZip という DLL がある事が分かりました。
結局、 C# で DotNetZip を使ってプログラムを作成しました。
DotNetZip のダウンロードと使い方
まずは検索します。図1 の通りに検索しました。検索結果は図2 の通りです。1番上のWebページを開きます。
図3 の画面が表示されたら、『Tools』をクリックします。
『Tools』の中の『Ionic.Zip.dll』をクリックします。
図5 の画面右下の『Download』をクリックしてダウンロードします。
ダウンロードした『Ionic.Zip.dll』のアイコン画像です。
visual studio で参照設定を行った画面です。
ILMerge のダウンロードと使い方
図8 の『Download』ボタンをクリックします。図8 の『Download』ボタンをクリックすると、図9 のページに遷移します。
ダウンロードした ILMerge のアイコン画像です。
コマンドプロンプトを起動した画面です。
exe ファイルと dll ファイルを 1 つにまとめた exe ファイルの出力フォルダに移動します。
ILMerge.exe を指定します。
結合する exe ファイルを指定します。
結合する dll ファイルを指定します。
結合した後の exe ファイルの名前を指定します。
プラットフォームを指定します。
関数
ソースコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Ionic.Zip;
using Ionic.Zlib;
namespace DotNetZip
{
class Program
{
static void Main(string[] args)
{
// 自分のパスを取得する
string selfPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
// 日付をパスに使用できるように / を - に置換する
// 時間をパスで使用できるように : を - に置換する
DateTime dtDateTime = DateTime.Now; // 現在の日時を取得
string strDateTime = dtDateTime.ToString(); // 文字列に変換する
string[] arrDateTime = strDateTime.Split(' '); //スペースで分割し、配列に格納する
arrDateTime[0] = arrDateTime[0].Replace("/", "-"); // 日付置換
arrDateTime[1] = arrDateTime[1].Replace(":", "-"); // 時間置換
// Zip ファイルのパスの作成
string zipPath = selfPath + arrDateTime[0] + "_" + arrDateTime[1] + ".zip";
// パスワード作成
int digits_num = 23;
char[] chPass;
chPass = PasswordRandomASCII(digits_num);
string pass = string.Join("", chPass);
// パスワード出力ファイルのパス作成
string passPath = selfPath + arrDateTime[0] + "_" + arrDateTime[1] + ".pass";
// ファイルドロップ以外の実行を拒絶する
if (args.Length == 0)
{
return;
}
try
{
// Zip ファイルの作成
using (ZipFile zip = new ZipFile(Encoding.GetEncoding("shift_jis")))
{
// パスワードをかける
zip.Password = pass;
// ファイルの追加
for (int i = 0; i < args.Length; i++)
{
zip.AddFile(args[i], "");
}
// Zip ファイルを保存
zip.Save(zipPath);
}
// パスワードのファイル出力
File.WriteAllText(passPath, pass);
}
catch
{
Console.WriteLine("Zip ファイルは作成できませんでした。");
Console.ReadKey();
}
}
// パスワード作成関数
// アルファベットの A ~ z に対応するアスキーコードの 65 ~ 122
// を返す関数
static char[] PasswordRandomASCII(int digits_num)
{
// パスワード格納用配列
char[] code = new char[digits_num];
// 乱数発生関数の作成
Random rnd = new Random();
// 乱数作成
for (int i = 0; i < digits_num; i++)
{
// 乱数発生させて、アスキーコードを文字変換して代入する
// 乱数は 65 以上 123 未満
code[i] = (char)rnd.Next(65, 123);
}
// 戻り値
return code;
}
}
}
使い方
exe ファイルを好きなところに置いてファイルをドロップすれば zip ファイルが出来上がります。なお、 zip ファイルは exe ファイルと同じディレクトリに出来上がります。
コメント
まぁ、使用頻度はあまり多くはありませんが、 C# の良い練習になりました。
以上
ドラッグ&ドロップしたファイルを zip ファイルにする VBScript
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
フリーソフトで zip ファイルを作っていたのですが、ソフト開いて、ファイル選択して、実行ボタンを押す…という作業が煩わしかったので、ファイルをドロップしたら zip ファイルが作成される VBScript を作成します。
関数
ソースコード
'-------------------------------------------------------------------------------------------------------
' 引数が無かった時の処理
If WScript.Arguments.count = 0 then
WScript.Echo "引数が無いため、実行できません。" & vbNewLine & _
"ファイルをドロップしてください。"
WScript.Quit
End If
'-------------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'-------------------------------------------------------------------------------------------------------
' ドロップされた引数がファイル以外ならアラートして終了する
For each args In WScript.Arguments
'----------------------------------------------------------------------------------------------------
' ドロップされた引数がフォルダかファイルかを判定する
If objFileSys.FolderExists(args) then
'-------------------------------------------------------------------------------------------------
' is folder.
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
WScript.Echo "フォルダがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
ElseIf objFileSys.FileExists(args) then
'-------------------------------------------------------------------------------------------------
' is file.
Else
'-------------------------------------------------------------------------------------------------
' is unknown.
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
WScript.Echo "フォルダ 及び ファイル とも認識できないデータがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
End If
Next
'-------------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
'-------------------------------------------------------------------------------------------------------
' Zip ファイルを作成するパスの作成
ZipFile = SelfPath()
ZipFile = ZipFile & "\" & Date2PathFormat() & "_" & Time2PathFormat() & ".zip"
'-------------------------------------------------------------------------------------------------------
' Zip ファイルのヘッダーの作成
ZipFileInput = ZipFileHeader()
'-------------------------------------------------------------------------------------------------------
' 空の Zip ファイルの作成
Call NewZipFile(ZipFile, ZipFileInput)
'-------------------------------------------------------------------------------------------------------
' シェルオブジェクト作成
Set objWsh = WScript.CreateObject("Shell.Application")
'-------------------------------------------------------------------------------------------------------
' Zip ファイルの作成
For each args In WScript.Arguments
' Zip ファイルオブジェクトの作成
Set objFile = objWsh.NameSpace(ZipFile)
' Zip ファイルの中身のファイル数のカウント
ZipItemCnt = objFile.Items().Count
' Zip ファイルの中身を追加
objFile.CopyHere(args)
' 追加の完了を待つ
Do While ZipItemCnt = objFile.Items().Count
WScript.Sleep(250)
Loop
' Zip ファイルの中身のファイル数の更新
ZipItemCnt = ZipItemCnt + 1
Next
'-------------------------------------------------------------------------------------------------------
' シェルオブジェクトの破棄
Set objWsh = Nothing
Function SelfPath()
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
' 自分のパスの取得
SelfPath = objFileSys.getParentFolderName(WScript.ScriptFullName)
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
End Function
Function Date2PathFormat()
' 日付をパスに使用できるように / を - に置換する
Date2PathFormat = Replace(Date, "/", "-")
End Function
Function Time2PathFormat()
' 時間をパスに使用できるように : を - に置換する
Time2PathFormat = Replace(Time, ":", "-")
End Function
Function ZipFileHeader()
' zip ファイルのヘッダ情報
Header = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
' 変換コード格納変数の準備
buf = ""
' ヘッダーのコード変換
For i = LBound(Header) To UBound(Header)
buf = buf & Chr(Header(i))
Next
' 戻り値
ZipFileHeader = buf
End Function
Sub NewZipFile(FilePath, InputString)
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
' ファイルの作成
Set objFile = objFileSys.CreateTextFile(FilePath, True)
' ファイルへ出力
objFile.Write(InputString)
' ファイルを閉じる
objFile.Close
' ファイルオブジェクトの破棄
Set objFile = Nothing
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
End Sub
使い方
上のソースコードをメモ帳にコピペして、拡張子を『.vbs』にして、すべてのファイルとして保存すれば、ドロップしたファイルの zip ファイルが出来上がります。なお、 zip ファイルは VBScript と同じディレクトリに出来上がります。
以上
ドラッグ&ドロップしたファイルを印刷する VBScript に画像印刷機能を追加した
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
前に書いた記事で、ドラッグ&ドロップしたファイルを印刷する VBScript を書きました。
ですが、そのプログラムでは画像ファイルを印刷する事が出来ませんでした。
そこで、画像ファイルも印刷出来る様に改良しました。
ただ、印刷の出来上がりは微妙です。
印刷位置の水平、鉛直などの設定をしていないため、左上に寄った画像が印刷されます。
関数
ソースコード
'-------------------------------------------------------------------------------------------------------
' 引数が無かった時の処理
If WScript.Arguments.count = 0 then
WScript.Echo "引数が無いため、実行できません。" & vbNewLine & _
"ファイルをドロップしてください。"
WScript.Quit
End If
'-------------------------------------------------------------------------------------------------------
' フォルダ内ファイルリスト出力
for each args In WScript.Arguments
'----------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'----------------------------------------------------------------------------------------------------
' ドロップされた引数がフォルダかファイルかを判定する
If objFileSys.FolderExists(args) then
' is folder.
WScript.Echo "フォルダがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
ElseIf objFileSys.FileExists(args) then
' is file.
else
' is unknown.
WScript.Echo "フォルダ 及び ファイル とも認識できないデータがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
End If
'----------------------------------------------------------------------------------------------------
' ドロップされた引数がフォルダか画像かを判定する
Flag_Image = False
pos = InstrRev(args, ".")
argsExtension = Mid(args, pos)
Flag_Image = ImageDetermination(argsExtension)
' ドロップされたファイルが画像以外なら
If Flag_Image = False Then
'-------------------------------------------------------------------------------------------------
' シェルオブジェクト作成
Set objWsh = WScript.CreateObject("Shell.Application")
'-------------------------------------------------------------------------------------------------
' 引数ファイルのパスの分解
pos = InstrRev(args, "\")
Dir_Name = Left(args, pos - 1)
file_Name = Mid(args, pos + 1)
'-------------------------------------------------------------------------------------------------
' フォルダオブジェクト と ファイルオブジェクトの作成
Set objFolder = objWsh.NameSpace(Dir_Name)
Set objFile = objFolder.ParseName(file_Name)
'Msgbox objFolder.Title & vbnewline & objFile.Name
'-------------------------------------------------------------------------------------------------
' 印刷する
objFile.InvokeVerbEx("Print")
'-------------------------------------------------------------------------------------------------
' シェルオブジェクトの破棄
Set objWsh = Nothing
' ドロップされたファイルが画像なら
Else
'-------------------------------------------------------------------------------------------------
' 印刷する
Set objWsh = CreateObject("WScript.Shell")
objWsh.Run "mspaint.exe " & args & " /p"
Set objWsh = Nothing
End If
Next
Function ImageDetermination(argsExtension)
' 画像ファイルの拡張子を記憶
ImageExtension = Array(".jpg", ".jpeg", ".JPG", ".JPEG", ".jpe", ".jfif", ".pjpeg", ".pjp", _
".png", _
".gif", _
".svg", ".svgz", _
".bmp", ".dib")
' 画像判定ループ
For i = LBound(ImageExtension) To UBound(ImageExtension)
' 画像ファイルの拡張子と同一の拡張子であれば
If ImageExtension(i) = argsExtension Then
' 画像ファイルであると判断する
ImageDetermination = True
' 関数を終了する
Exit Function
' 画像ファイルの拡張子と不一致の拡張子であれば
Else
' 画像ファイル以外と判断する
ImageDetermination = False
End If
Next
End Function
使い方
上のソースコードをメモ帳にコピペして、拡張子を『.vbs』にして、すべてのファイルとして保存すれば、ドロップしたファイルを印刷するプログラムが出来ます。この VBScript は画像も一応印刷出来ます。
画像が新たに印刷出来る様になったので、下に整理しておきます。
印刷出来るファイル
テキストファイル(.txt)PDF ファイル(.pdf)
Microsoft Excel ファイル(.xls, .xlsx)
Microsoft PowerPoint ファイル(.ppt, .pptx)
Microsoft Word ファイル(.doc, .docx)
メールファイル(.msg)
バッチファイル(.bat)
VBScript ファイル(.vbs)
画像ファイル(.png, .jpg, .bmp)
印刷出来ないファイル
dat ファイル(.dat)CSV ファイル(.csv)
コメント
印刷の設定が出来る様に改良していきたい。
以上
ドラッグ&ドロップしたファイルを印刷する VBScript
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
ファイルをドロップすると通常使用するプリンタで印刷する VBScript プログラムを作成します。
印刷部数が足りなくて、急な印刷が必要だったり、ファイルを開かずに印刷出来るため、 PDF ファイルなど、あまり編集を必要としないファイルの効率的な印刷に便利です。
関数
ソースコード
'-------------------------------------------------------------------------------------------------------
' 引数が無かった時の処理
If WScript.Arguments.count = 0 then
WScript.Echo "引数が無いため、実行できません。" & vbNewLine & _
"ファイルをドロップしてください。"
WScript.Quit
End If
'-------------------------------------------------------------------------------------------------------
' フォルダ内ファイルリスト出力
for each args In WScript.Arguments
'----------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'----------------------------------------------------------------------------------------------------
' ドロップされた引数がフォルダかファイルかを判定する
If objFileSys.FolderExists(args) then
' is folder.
WScript.Echo "フォルダがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
ElseIf objFileSys.FileExists(args) then
' is file.
else
' is unknown.
WScript.Echo "フォルダ 及び ファイル とも認識できないデータがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
End If
'----------------------------------------------------------------------------------------------------
' シェルオブジェクト作成
Set objWsh = WScript.CreateObject("Shell.Application")
'----------------------------------------------------------------------------------------------------
' 引数ファイルのパスの分解
pos = InstrRev(args, "\")
Dir_Name = Left(args, pos - 1)
file_Name = Mid(args, pos + 1)
'----------------------------------------------------------------------------------------------------
' フォルダオブジェクト と ファイルオブジェクトの作成
Set objFolder = objWsh.NameSpace(Dir_Name)
Set objFile = objFolder.ParseName(file_Name)
'Msgbox objFolder.Title & vbnewline & objFile.Name
'----------------------------------------------------------------------------------------------------
' 印刷する
objFile.InvokeVerbEx("Print")
'----------------------------------------------------------------------------------------------------
' シェルオブジェクトの破棄
Set objWsh = Nothing
Next
使い方
上のソースコードをメモ帳にコピペして、拡張子を『.vbs』にして、すべてのファイルとして保存すれば、ドロップしたファイルを印刷するプログラムが出来ます。色々なファイルをドロップしてみたところ、印刷出来ないファイルもありました。
下に整理しておきます。
印刷出来るファイル
テキストファイル(.txt)PDF ファイル(.pdf)
Microsoft Excel ファイル(.xls, .xlsx)
Microsoft PowerPoint ファイル(.ppt, .pptx)
Microsoft Word ファイル(.doc, .docx)
メールファイル(.msg)
バッチファイル(.bat)
VBScript ファイル(.vbs)
印刷出来ないファイル
dat ファイル(.dat)CSV ファイル(.csv)
画像ファイル(.png, .jpg)
コメント
画像ファイルが印刷出来ると使用する機会が増えそうな気がするので、改良していきたい。
以上
VBScript でフォルダ内ファイル一覧のファイル出力
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
関数
ソースコード
'-------------------------------------------------------------------------------------------------------
' 引数が無かった時の処理
If WScript.Arguments.count = 0 then
WScript.Echo "引数が無いため、実行できません。" & vbNewLine & _
"フォルダをドロップしてください。"
WScript.Quit
end If
'-------------------------------------------------------------------------------------------------------
' ファイル入出力用の変数
ForReading = 1
ForWriting = 2
ForAppending = 3
'-------------------------------------------------------------------------------------------------------
' フォルダ内ファイルリスト出力
for each args In WScript.Arguments
'----------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'----------------------------------------------------------------------------------------------------
' ドロップされた引数がフォルダかファイルかを判定する
If objFileSys.FolderExists(args) then
' is folder.
ElseIf objFileSys.FileExists(args) then
' is file.
WScript.Echo "ファイルがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
else
' is unknown.
WScript.Echo "フォルダ 及び ファイル とも認識できないデータがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
End If
'----------------------------------------------------------------------------------------------------
' ドロップされたフォルダのオブジェクト取得
Set objFolder = objFileSys.GetFolder(args)
'----------------------------------------------------------------------------------------------------
' ファイルが見つからなかった場合、プログラムを終了する
If objFolder.Files.Count = 0 then
WScript.Echo "ファイルは見つかりませんでした。"
WScript.Quit
End If
'----------------------------------------------------------------------------------------------------
' 出力ファイルパスの作成
pos = InstrRev(args, "\")
InputFolderName = Mid(args, pos + 1)
PathOutput = Left(args, pos) & "\" & InputFolderName & "-FileList" & ".csv"
'----------------------------------------------------------------------------------------------------
' テキストファイルを開く
Set fileWriter = objFileSys.OpenTextFile(PathOutput, ForWriting, True)
'----------------------------------------------------------------------------------------------------
' 出力
for each f In objFolder.Files
fileWriter.WriteLine f.Name
next
'----------------------------------------------------------------------------------------------------
' テキストを閉じる
fileWriter.Close
'----------------------------------------------------------------------------------------------------
' ドロップされたフォルダのオブジェクトの破棄
Set objFolder = Nothing
'----------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
'----------------------------------------------------------------------------------------------------
' 作成したファイルリストを開く
Set objWsh = WScript.CreateObject("WScript.Shell")
objWsh.Run PathOutput
Set objWsh = Nothing
next
使い方
上のソースコードをメモ帳にコピペして、拡張子を『.vbs』にして、すべてのファイルとして保存すれば、ドロップしたフォルダの中のファイルを CSV のリストに出力するプログラムが出来ます。CSV のファイルリストはドロップしたフォルダと同じ場所に作成されます。
デスクトップに置いておくと意外と便利です。
コメント
この記事では CSV ファイルを作成していますが、テキストファイル、 Microsoft Word ファイル、 Microsoft Excel ファイルなどに出力するといろいろな使い道がありそうです。
以上
VBA で効率的にメール処理
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
メールの処理が苦痛です。(正確には苦痛でした。)
前の職場では1日に250通くらいのメールを受信していました。
今は1日に10通も受信しない日があるくらいで、逆にメールを確認しなさ過ぎてうっかり頼まれごとを忘れる(というか気づいていない)事も有ったり…
動作単位でボタンを作成して、わずらわしい操作を無くしていきたいと思います。
メール転送とフォルダ移動のボタン作成します。
メール処理の自動化のカタチ
メール処理の自動化を最初に考えた時は、色々考えました。
タスクになりそうなものを自動抽出…
スレッド機能から自然言語処理…
しかし、難しいばかりか、プログラム実行後の後処理として今までなかった操作の発生など、どうしても複雑化していってしまい、どれも成功とは言えませんでした。
そこで、ボタンが増えるというのを我慢して、あえてボタン1つの動作を小さい範囲の動作として、どのボタンをクリックするかは判断する方向のカスタマイズを行い、少なからず、完全自動化を目指した時よりは成功に近づいたと思っています。
一例としてメール転送とフォルダ移動のボタン作成とソースコードを載せます。
まず、図1のVBE画面からソースコードを書いていきます。
メール転送
私のメーラーは Microsoft Outlook です。メール転送は『Ctrl + F』のショートカットキーが割り当てられています。
しかし、メール転送で1番メンドウと感じている操作は E-Mail Address の入力欄をマウスでクリックする事と E-Mail Address の入力だと思っています。
ソースコード①
〜メール転送〜
このソースコードはグループメンバーに展開する必要のあるメールを見つけた時に、ボタン1つで転送することを想定したプログラムです。GrMemberという変数でE-Mail Addressを指定しています。
ここは書き換えて使ってください。
転送本文という変数でメール本文を指定しています。
だいぶ素っ気ないので、ここも書き換えて使ってください。
『.Send』のところはPCの設定上、Microsoft Outlook から警告ダイアログが表示されると思いますが、 VBA セキュリティの設定を変更すると警告無く動作するかと思います。
ですが、セキュリティ設定変更は推奨しないので、コメントアウトして、転送メールが表示された後、『Alt + S』で送信することをオススメ致します。
Public Const GrMember = "**********@****.co.jp; **********@****.co.jp; **********@****.co.jp; **********@****.co.jp"
Public Const 転送本文 = "各位" & vbNewLine & vbNewLine & "転送します。確認ください。"
Sub メール転送()
' 選択アイテム数の取得
選択アイテム数 = Application.ActiveExplorer.Selection.Count
' 選択アイテムの処理
For i = 1 To 選択アイテム数
' アイテムの取得
Set olItem = Application.ActiveExplorer.Selection.Item(i)
' アイテム種類の取得
アイテム種類 = TypeName(olItem)
' アイテム種類がメールなら
If アイテム種類 = "MailItem" Then
Set Fw = olItem.Forward
With Fw
.Display
.To = GrMember
.Body = 転送本文 & vbNewLine & .Body
.Send
End With
End If
Next i
End Sub
フォルダ移動
Microsoft Outlook でメールをフォルダ移動する時は、移動させたいメールを選択して、移動先のフォルダにドラッグ & ドロップするとメールのフォルダ移動が出来ます。私はこの操作が嫌いです。
ドラッグ距離が長く、たまに全然違うフォルダに移動させてしまうからです。
ソースコード②
〜フォルダ移動〜
このソースコード②はソースコード①で書いたプログラムで転送した後に実行することを想定しています。フォルダ移動はメンドウですが、フォルダ1つに対して1プログラムとしてます。
以下の2つを変更すれば移動させるフォルダを変更できます。
"作成日:2017-10-02" (データファイル名)
"周知事項" (データファイル内、フォルダ名)
Sub 周知事項フォルダへ移動()
' 選択アイテム数の取得
選択アイテム数 = Application.ActiveExplorer.Selection.Count
' 選択アイテムの処理
For i = 1 To 選択アイテム数
' アイテムの取得
Set olItem = Application.ActiveExplorer.Selection.Item(i)
' アイテム種類の取得
アイテム種類 = TypeName(olItem)
' アイテム種類がメールなら
If アイテム種類 = "MailItem" Then
Set 移動先フォルダ = Application.Session.Folders("作成日:2017-10-02").Folders("周知事項")
olItem.Move 移動先フォルダ
End If
Next i
End Sub
ボタンの作成
Microsoft Outlook ではツールバーをユーザーが作成出来ます。作り方を順番に説明します。
①まずは言わずと知れた Microsoft Outlook の画面です。
②メニューバーの空いているところで右クリックします。
③右クリックで開いたプルダウンメニューの『ユーザー設定』をクリックします。
④ユーザー設定ダイアログが表示されたら『新規作成』ボタンをクリックします。
⑤ツールバーの名前を入力して、『OK』ボタンをクリックします。
⑥ユーザー設定ダイアログに戻ったら、ユーザー設定ダイアログの『コマンド』タブをクリックし、ダイアログ左側にある『分類』という列の『マクロ』をクリックします。
⑦作成したマクロが表示されます。
⑧表示されているマクロをツールバーにドラッグ&ドロップします。
⑨このままだとツールバーを見失ってりするので、画面上にドッキングします。
⑩あとは⑧の作業をツールバーに登録したいプログラムの数だけ繰り返してツールバー作成完了です。
コメント
日常のメール処理を振り返って、ボタンを増やしていけば、後は反射神経勝負になります。
リズムよくボタンを押して、メールを片付けていきましょう。
以上