• ベストアンサー

エクセルでメール配信

例えば、あるエクセルのファイルがあって、2日経っても更新されていないと、ある一定の人にメールで知らせるという方法はありますか? 会社のネットワークで共有しているファイルがあるのですが、毎日更新するべきものなのに、担当者がルーズなため、ちっとも更新しないので、その者を管理する人にメールで知らせようと思います。 どうやったらできるのか、まったく思いつきません。 どうかアドバイスお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

winarrow07です。 とりあえずファイルの更新日時を見て判断でよければ、案をひとつ。 WSHスクリプトでやる方法です。メールは社内STMPサーバを利用を想定しています。SMTP認証が必要な場合は設定追加が必要かと思います。 1.下記コードをメモ帳にコピーする。 2.中身を環境に合わせて修正する(監視するファイル名、メールサーバの設定など) 3.修正したら保存して終了する。 4.保存後、拡張子を.txtから.vbsに変更。 5.ファイルをダブルクリックして実行し試す。 はじめはテスト用のファイルを作成してそれを監視して自分宛てにメールが来るなどして動作確認するのがいいと思います。(.vbsに拡張子を変更したあとそのファイルを編集する場合は右クリック→編集です。ダブルクリックするとスクリプト実行されますので。。) ファイル更新日時を変更できるフリーソフトなどを使い検証してみるといいかもしれません。 うまくいったら本番用の設定にしてタスク等で定期的に実行すればOKかと思います。 コード================================================== Option Explicit REM ####################################### REM 監視対象のファイル名を設定 REM ####################################### Dim strFilename strFilename = "C:\test\test.bat" REM ################################################### REM ファイルの最終更新日時が2日以内であれば何もせず終了 REM ################################################### Dim objFSO Dim objFile Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(strFilename) If DateDiff("d",Now,objFile.DateLastModified) > -2 then Set objFile = Nothing Set objFSO = Nothing WScript.Quit End If REM ####################################### REM メールの設定 REM ####################################### Dim objMessage Dim mySMTPServer Dim mySMTPPort mySMTPServer = "mail.example.jp" mySMTPPort = 587 REM ####################################### REM メールの送信 REM ####################################### Set objMessage = CreateObject("CDO.Message") objMessage.From = "xxxxx@example.jp" objMessage.To = "yyyy@example.jp" objMessage.Subject = objFile.Name & "ファイル未更新" objMessage.TextBody = objFile.Name & "ファイルの内容が更新されていません。" & vbCrLf & "更新をお願いします。" objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mySMTPServer objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = mySMTPPort objMessage.Configuration.Fields.Update objMessage.Send Set objFile = Nothing Set objFSO = Nothing Set objMessage = Nothing

acchandesu
質問者

お礼

ありがとうございます。ご提案頂いた内容は私にとって少し難しそうですが、チャレンジしてみます。

acchandesu
質問者

補足

Option Explicit から下をコピーしてやってみたのですが、以下のようなエラーが出てしまいました。 行:39 文字:98 エラー:文字が正しくありません コード:800A0408 ソース:Microsoft VBScript コンパイルエラー 原因がわかりますか?

その他の回答 (5)

回答No.6

再度winarrow07です。 自分でも「この記事からメモ帳にコピペして保存」をしてみたところ、 「このANSI テキストファイルとして保存すると失われてしまうunicode形式の・・・・」 というメッセージがでました。 まぁ、何かが起きているんでしょうが、もし同じことが起きたら下記をやってみてください。 ・上記のメッセージが表示されたら構わず「OK」を押して保存する。 ・一旦閉じて再度保存したファイルを開く ・すると下から7行目付近にhttp:で始まるURLを囲んでいる行が3行  ほどあると思いますが  そこの「("http://」が「("?http://」と「?」が入っていると思うので「?」を削除してください。  また、URLを囲い終わった「")」のところも「")?」となっているかも  しれません。これも「?」を削除してください。  「?」は全部消してください。 それで、エラーが出なくなればOKです。 別のエラーでコード80040213の場合はメールサーバに接続できない等のエラーとなります。  

acchandesu
質問者

補足

やってみました。教えていただいた通りにやってみたら、同じような感じになって、?は全部消しました。しかしまたエラーが出て、コードが80040211が出ました。わかりますか?

回答No.5

winarrow07です。恐らく文字コード当たりの影響かと思うのですが、 メモ帳で保存するときは特にエラー出ませんでしたか? 一部修正したものをもう一度掲載してみますので再度試してください。 =============================== Option Explicit REM ####################################### REM 監視対象のファイル名を設定 REM ####################################### Dim strFilename strFilename = "C:\test\test.bat" REM ################################################### REM ファイルの最終更新日時が2日以内であれば何もせず終了 REM ################################################### Dim objFSO Dim objFile Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(strFilename) If DateDiff("d",Now,objFile.DateLastModified) > -2 then Set objFile = Nothing Set objFSO = Nothing WScript.Quit End If REM ####################################### REM メールの設定 REM ####################################### Dim objMessage Dim mySMTPServer Dim mySMTPPort mySMTPServer = "mail.example.jp" mySMTPPort = 587 REM ####################################### REM メールの送信 REM ####################################### Set objMessage = CreateObject("CDO.Message") objMessage.From = "xxxxx@example.jp" objMessage.To = "yyyy@example.jp" objMessage.Subject = objFile.Name & "ファイル未更新" objMessage.TextBody = objFile.Name & "ファイルの内容が更新されていません。" & vbCrLf & "更新をお願いします。" objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mySMTPServer objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = mySMTPPort objMessage.Configuration.Fields.Update objMessage.Send Set objFile = Nothing Set objFSO = Nothing Set objMessage = Nothing

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

その放置ファイルを開きもしないのに時間の経過と共に、更新してないと言う事実を掴み、メイルを送信するのは、高等(根源的・基礎的レベルでスキルのある人の)技術でしょう(特に前者)。VBA程度では判らない。 ーー (1)ブックを開くと開いた機会にプログラムが走る、というのはVBAの普通の知識で出来る (2)放置しているという事実の自動判定は、更新日時と今日を比べるなど考えられる。しかしTODAY関数などが使われていると、開く(いて保存する)と同時に今日が更新日時になるのではないかな。 決ったセルに更新日が入る仕組みである場合は、確実にチェック出きると思うが。 (3)放置されていると決ったとして、決った文言を決った相手にメイルするのは、OEやOUTLOOKを使うなどがありえる。OUTLOOKにはVBAも在る。しかし解説書など体系的情報はない(市販されていない)。OEの場合も含めて、自動送信のコード例はWEBには在る。調べると良い。 しかしVBAの熟練者でないと旨く進まないのではないかと思う。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1さんのご指摘の通りですが、毎日データが増えていくべきであれば、更新日にファイルサイズも併用すると、判別できるかもしれませんね。 VBSで、任意のファイルの更新日と、ファイルサイズを調べ、条件に合っていればメールを送信するスクリプトを作成し、Windowsのタスクに登録しておけば良いと思います。 「VBS メール送信」で検索すると、参考スクリプトが見つかると思います。 ファイルの更新日と、サイズ取得は、「VBS FileSystemObject」で検索してみてください。ご参考まで。

回答No.1

的確な更新されているか/いないかを判断する材料はどこかにあるのでしょうか? 例えばファイル更新日などを見て判断する方法もあると思いますが、 とりあえず開いて上書きボタン押して閉じれば見た目上は"ファイルは更新された"という扱いになります。コンピュータは更新されたと判断したけど実際は更新されてないという状況で逃げることも可能です。 人間ならば内容を見て判断できるのですが、コンピュータに判断させるには明確な基準の判断材料がなければいけません。 本気でやるなら。。

acchandesu
質問者

お礼

ファイルの更新日だけで判断するだけでも判断材料になるのかなと思います。その担当者がそのファイルを毎日開くだけでも、その担当者としては少しの進歩かなと思います。はずかしい話ですが...会社の足を引っ張っている社員で困っているところです。よって、更新日だけを見てメールを送る手段を考えたいと思います。ほんとうはもっと本気でやりたいのですが、それはその担当者のでかたを見て、次のステップとして考えたいです。

関連するQ&A

  • 共有フォルダ内のファイル使用者のチェック

    複数の人間が使うネットワーク内の共有フォルダに、エクセルファイルを置いています。 ファイルを更新する際に、最後の使用ユーザが誰だったかが分かるようにしたいのですが、どのようにすれば良いでしょうか? ちなみに、私はネットワーク管理者ではないですが、 このファイルの作成・管理担当です。

  • エクセル バックアップファイルの自動更新

    私の会社では、簡単なデータはエクセルで管理しておりまして、 そのエクセルファイルを会社の皆が共有できるように、社内の共有フォルダーに入れています。 しかし、先日誤って新入社員がそのファイルを消してしまいました。 今後は、バックアップファイルを作成し、データファイルの管理をしようと思うのですが、データは毎日変更、追加しますので、 バックアップファイルも同時に自動更新できるようにする必要があります。 バックアップファイルが常に自動更新され、たとえ元データ(ファイル)が消えてしまっても、問題なくバックアップされた状態にするには、どのようにしたら良いでしょうか? どうぞよろしくお願いいたします。

  • ネット上でのエクセルファイルの共有の仕方を教えて下さい

    ホントに、なんにもわかっていない素人の質問ですが、教えて下さい。 職場で、今まではエクセルファイルを関係者同士でメールでやりとりしてデータを共有していましたが、サーバにデータを置いて、そこから取り出して更新することで、データを共有したいから、どうにかしてくれと上司に言われました。上司は、イントラネットがどうとか言っておりましたが、私も上司も、ホームページを更新する程度のレベルで....。 どうしたら、エクセルファイルをネットワーク上で共有できるでしょうか。

  • 電話番号(電話帳)の管理について

    電話番号(電話帳)の管理について 会社で貸与している携帯番号と個人所有の携帯番号を管理しているのですが、会社の人間の出入りや担当者の変更が多々あり、エクセルで管理しているのですが「更新」「配布」に時間がかかり困っています。ネットワーク共有でサーバーにそのエクセルファイルを見に行くなどの方法はありますが、もっと簡易的にワンクリックで社内のどのPCからも携帯番号の情報が閲覧できる良い方法はありませんか?

  • エクセルでメッセージを出す方法

    教えてください。 ある一定の作業をしないとシートが閉じられない もしくは 閉じようとした時に注意メッセージが出る。 もしくは、常に閉じようとした時に注意メッセージが出るように するにはどうしたら良いのでしょうか? 会社の共有ファイルにエクセルシートを作成し皆に入力してもらう事が 多々あるのですが、更新してもらった後に 入力規制で更新・未更新と選択する項目があり最後にそこを更新済み にしてファイルを閉じると完成というパターンが多いのですが この最後の作業を忘れて未更新にしたまま終えてしまう人が 多いです。いちいち電話で聞いていかないといけないので面倒です。 やりかた教えてください。

  • Excelの仕様?

    現在、Excelにて在庫管理をしています。 しかし、業務が膨大になり1人では管理しきれない部分が出てきました。 ファイルはネットワーク上の共有参照できるフォルダに保存してあるので誰でも開くことができます。 Excelだと1人が開いているときには、他の人が開くと「読み取り専用」になります。 これを複数の人間で編集可能にするのは、仕様上できないのでしょうか? またそれを可能とするには、Excelではなく別のソフトで在庫管理をするのがベストなのでしょうか?

  • Excelの更新をメール通知

    共有ネットワークドライブ上にExcelファイルを台帳として 保管しております。 誰かが追記したときに、他の人へも更新したことをメール 連絡しているのですが、この作業を省力化したく思います。 記入してあるセルはA、B、C列だけ、連絡先も固定なんでもしかしたらマクロ化できるのかなぁと思うのですが如何でしょうか? A列:年月日、B列:件名、C列:記入者です。 最下行を読み取り A & "日に" & C & "さんが & B"を追加しました" と云う内容でメールを送れたら嬉しいです。 保存時若しくは終了時にマクロでメール送信できればいいなと思うのですが、どなたかご興味あればさわりだけでもサンプル作っていただけませんでしょうか?

  • エクセルファイルを共有したいのですが

    タイトルのとおりです。 会社でネットワークを使って、 共有したエクセルファイルを開き、 エクセルのAシートはA課の人が使い、 BシートはB課の人が使い、 最後にCシートはC課が使い集計をして Dシートに累計していくというエクセルファイルを 作りたいのですが、共有フォルダやエクセルファイルの 設定、あと、ほかのユーザーがそのエクセルファイルを 開き、入力するためには、そのエクセルファイルにアクセスしなければならないはずですが、その設定がわかりません。 ネットワーク初心者です。 よろしくお願いいたします。 OSはXPと2Kです。

  • エクセルの基本的な質問です。

    とても恥ずかしい質問をします。転職したばかりで現在パートで経理の補助をやっています。小さな会社で経理は二人です。経理担当の者が会社用のソフト以外まったくパソコンを扱えないらしくエクセルも使えません。今まで昔ながらの方法で手書き処理をしてきたらしいのです。私も表作成ぐらいしかできません。経理処理がいつも間に合わないというので、今まで手書きでやってたものをエクセルで管理しようと思いました。経理担当の者に「分からないから任せる」と言われました。フォームがたくさんになると思うのですが、似たような項目ばかりで一つずつファイルで作成したほうが良いのかシートでいくつかに分けてファイル管理したほうが困っています。すべて内容は関連していてどうやったら分かりやすくなるかと悩んでいます。

  • ウェブでエクセルデータを共有するツール

    教えて下さい。 現在ネットワーク内にファイルを保管して、エクセルを共有設定して行っているのですが、 PCによっては保管データが化けてうまく表示されなかったり、コメントの表示がおかしかったりと 今後の保管データの管理が不安です。 試しに、グーグルドキュメントにファイルをアップしてみたのですが、ウェブ上だからかエクセルより 遥かに遅く使い難いのです。 とてもウェブ上で編集や更新をする気にはなりません。 そこで皆さんにご相談ですが、グーグルドキュメントより使いやすいツールや共有しやすいツールがあれば教えて下さい。 もちろん、無料が良いのですが、内容によっては有料でも構いません。 宜しくお願いします。

専門家に質問してみよう