SSブログ

ExcelのリストでOutlookから一斉メールを送信 [VBA/VBS]



 Excelのリストで管理している宛先にメールを一斉に送信できれば
便利なのでここを参考にして作成してみた。
 Basp21でもExcel VBAで操作してメール送信できるが、Basp21の
インストール、SMTP等のメールサーバ情報の設定が必要となるため
簡単にはに使えない。
 そこでWindowsユーザーなら大多数の方が使用しているOutlookを使い、
VBAでOutlokを操作してメールを送信してみた。


使用方法
実際のサンプル(mail_outlook.xlsm)はこちらからダウンロードしてください。

mail_list sheet
  • 送信欄に”〇”があるメールアドレスにメールを送信。”〇”以外は送信しない。
mail_list.png
mail_template sheet
  • 件名:「Test Mail」部分を変更
  • 本文:「テストメールです。」部分を変更
        TO: {0}様 → TO:”メール配信先リストの氏名”に自動変更
        FROM: {1} → FROM:"送信者名"に自動変更
  • 送信者名:「そうしんしゃ」部分を変更
mail_template.png サンプルはこちら ”

ハイパーリング禁止(preventDefault: イベントのデフォルト動作禁止) [Webシステム]


 JavaScriptのブラウザの操作に「イベントのデフォルト動作禁止」する
"preventDefault"なるメソッドを使ってみた時の備忘録。

操作内容
 表示されているハイパーリンクの移動禁止・元に戻す操作

デフォルト動作の禁止サンプル


GoogleへのLink



コード
//------ JavaScript部  -----------
//イベント禁止
function stopLink(){
  document.getElementById('lnk').addEventListener('click', evHandler, false);
  document.getElementById('stopDsp').innerHTML = "Linkが禁止されました!"
}
//イベント許可
function startLink(){
  document.getElementById('lnk').removeEventListener('click', evHandler, false);
  document.getElementById('stopDsp').innerHTML = "Linkが許可されました!"
}
//イベント動作の操作
function evHandler(e){
  e.preventDefault();
}
//-------- HTML部  ---------------
GoogleへのLink





WebページのTitle操作 [Webシステム]


 WebページのTitle(ブラウザのタブに表示される文字)がJavaScriptで簡単に操作できる
ことが分かったので備忘録として記載。


実際の動作サンプル

Titleの変更


   
コード説明
//------ JavaScript部  -----------
var p_title;
//titleを変更
function chngTitle(){
  p_title = document.title;  //元のtitleを退避
  document.title = 'Titel変更しました。';
}
//titleを元に戻す
function retTitle(){
  document.title = p_title;
}

//-------- HTML部  ----------
<input id="chg" type="button" value="Title変更" onclick="chngTitle();">     
<input id="ret" type="button" value="Title復元" onclick="retTitle();"> 



Excelから複数Word文書をPDF出力 [VBA/VBS]


 Excelから複数のWord文書をまとめてPDF化したい場合があり作成してみた。
簡単に作成できると思ったが、WordのDocument.ExportAsFixedFormatメッソドの引数ExportFormat:=wdExportFormatPDFでwdExportFormatPDFが未定義となり少し悩んでしまった。後で考えれば何のことは無いが、ExcelからWordのメッソドを呼び出すので、Word Object Libraryの参照設定を行うか、直接の値17で指定する必要があったのです。

機能
  • Excelを開くとUserFormに「PDF化実行」ボタンが表示される。
  • ボタンを押すとファイル選択ダイアログ(複数可)が表示される。
  • 選択されたWordのPDFファイルがExcelと同じフォルダーに作成される。

サンプル
実際のサンプルはここ

コード
  arryFileName = Application.GetOpenFilename(FileFilter:="Micosoft Word,*.docx?", MultiSelect:=True)
  If IsArray(arryFileName) Then
    For i = LBound(arryFileName) To UBound(arryFileName)
      inputFileName = arryFileName(i)
      outFileName = Replace(inputFileName, ".docx", "") & ".pdf"
  
      Set wd = CreateObject("Word.application")
      wd.Visible = False                    ここ
      wd.Documents.Open FileName:=inputFileName                ↓
      wd.ActiveDocument.ExportAsFixedFormat ExportFormat:=wdExportFormatPDF, OutputFileName:=outFileName 
      
      wd.Quit
    Next
  End If

WebStorageを使って入力Formデータの一次保管 [Webシステム]


 Web上でフォームデータを入力して入力項目が多い場合、途中で作業を中断したくなる場合がある。ブラウザを止めたり、電源を落とすと折角入力したデータが無くなり悔しい思いをする。こんなときのため入力データの「一次保管」できるWebページサンプルを作成してみた。
    機能
  • 入力データを自分のPCに保管(WebStorage)
  • このページを開くと一次保管データの有無をチェック
  • データがある場合「ロード」ボタンを表示し入力フォームにロード可能にする
  • データ不要の場合「クリアー」ボタンで削除

実際のサンプル

Web Storage Sample(入力データ一次保管)


名前(漢字)
なまえ(かな)
住所
TEL

一次保管データ
なし

コード説明
//JavaScript部

//ページロード時のデータ有無チェック
window.onload = function(){
  checkStorage();
}
//データsave
function saveStorage(){
  var data = new Object();
  data['name'] = document.getElementById("name").value;
  data['kname'] = document.getElementById("kname").value;
  data['zyusyo'] = document.getElementById("zyusyo").value;
  data['tel'] = document.getElementById("tel").value;
  var jdata = JSON.stringify(data);
  var key = "WebStorageSample";  //データ識別のためページのtitleをkeyに
  localStorage.setItem(key, jdata);
  checkStorage();
}
//データ再ロード
function loadStorage(){
  var data = new Object();
  for(var i=0; i < localStorage.length; i++) {
    var key = localStorage.key(i);
    if(key == "WebStorageSample") {
      var value = localStorage.getItem(key);
      data = JSON.parse(value);
      document.getElementById("name").value = data['name'];
      document.getElementById("kname").value = data['kname'];
      document.getElementById("zyusyo").value = data['zyusyo'];
      document.getElementById("tel").value = data['tel'];
      break;
    }
  }
  checkStorage();
}
//データ消去
function clearStorage() {
  localStorage.clear();
  checkStorage();
}

//データの有無チェック
function checkStorage(){
  var target = document.getElementById('msg');
  if(localStorage.length > 0){
    for(var i=0; i < localStorage.length; i++) {
      var key = localStorage.key(i);
      if(key == "WebStorageSample") {
        target.innerHTML = 'データが残っていますがロードしますか。<br><input type="button" value="ロード" onclick="loadStorage();">  <input type="button" value="クリア" onclick="clearStorage();">';
        break;
      }
    }
  } else {
    target.innerHTML = "なし";
  }
}

//HTML部
  <h1>Web Storage Sample(入力データ一次保管)</h1><br>
  <span>名前(漢字)</span>:<input type="text" id="name"><br>
  <span>なまえ(かな)</span>:<input type="text" id="kname"><br>
  <span>住所</span>:<input type="text" id="zyusyo"><br>
  <span>TEL</span>:<input type="text" id="tel"><br>
  <input type="button" value="一次保管" onclick="saveStorage();">
  <fieldset>
    <legend>一次保管データ</legend>
    <div id="msg">なし</div>
  </fieldset>





Web Storageを使ってローカル環境にデータを保存 [Webシステム]


HTML5 の機能にWeb Storageなるものがあるとのことで使ってみた。 Web Storageには2種類あるが今回はlocalStogareを使用した。
名称機能
sessionStragesession単位でデータを管理。Windowを閉じるタイミングで消える。
localStorage永続的にデータを保存
機能
  • 「ダウンロード」ボタンでサーバ上のデータをローカル環境に保存
  • 「表示」ボタンでローカル環境に保存されているデータを表示
  • 「初期化」ボタンでデータを消去
実際のサンプルはこちら

コード
// javascript部

//保存関数
function saveStorage(id){
  var data = document.getElementById(id).value;
  var time = new Date().getTime();
  localStorage.setItem(time, data);
  loadStorage('msg');
}
//呼び出し関数
function loadStorage(){
  var result = '<table class="mytable">';
  result += '<tr><th>Key</th><th>Value</th></tr>';
  for(var i=0; i < localStorage.length; i++) {
    var key = localStorage.key(i);
    var value = localStorage.getItem(key);
    var date = new Date();
    result += '<tr><td>' + key + '</td><td>' + value + '</td></tr>';  }
  result += '<table>';
  var target = document.getElementById('msg');
  target.innerHTML = result;
}
//サーバーからデータダウンロード(Ajax)
function downLoad(){
  var xhr = new XMLHttpRequest();
  xhr.open('GET','./sample.txt',true);
  xhr.responseType = 'text';
  xhr.send();
  xhr.onload = function(e){
    if(this.status == 200){
      var result = this.response;
      document.getElementById("memo").value = result;
      //save web storage
      var date = new Date();
      var key = datestr = date.getFullYear() + "/" + (date.getMonth()+1) + "/" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
      localStorage.setItem(key, result);
    }
  };
  loadStorage();
}
//HTML部
  <h1>Web Storage Sample</h1>
  <input type="button" value="Download" onclick="downLoad();">
  <input type="hidden" id="memo">
  <input type="button" value="表示" onclick="loadStorage();">
  <input type="button" value="初期化" onclick="clearStorage('msg');">
  <p id="msg"></p>

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。