• 締切済み

エクセルのマクロについて

定期的に(3ヶ月に一回ほど)ファイルを閲覧しなければならないにも関わらず、閲覧するのを忘れてしまうことを防ぐため、 3ヶ月に一回ほど、エクセルファイルを開かなくてもアラーム等で警告し閲覧を促すというようなマクロを作ることは可能でしょうか。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。#3です。 最初に、#3のコードは、2年以上、実際に使っているコードを抜き出したものです。私の場合は、3日という期限で、3日経つと、バックアップをするというシステムです。ちゃんと、2年以上の間、問題なく動き続けているものです。 さて、私も、#3だけでは済まないとは思っていました。 いくつか手直しするべきものがあります。 まず、ファイルのリストなどありますか? イメージとしては、90日、閲覧または更新しない限りは、メッセージボックスが出てくるものです。以下の設定は、「更新」という設定にしてあります。 個人用マクロブックなら、簡単などなたでも、取り付けることは可能です。 個人用マクロブックは、メニューのツール-マクロ-新しいマクロの記録 で、保存先を、「個人用マクロブック」としてしてやると、自動的にファイルが出来上がります。 Alt + F11 で、VBEditor 画面を出してあげると、 プロジェクトという窓の中に、VBAProject(PERSONAL.XLS)というのがありますが、そこが開いていないなら、「+」を押して、開いて、"ThisWorkbook"という場所をダブルクリックして、エディタ用の画面を開いて貼り付けます。(なお、記録マクロ自体は、Module1 というところに入っていて、余計ですから、全てマウス選択で削除してしまってください。) ファイルのリストは、いくつありますか? もちろん、複数ですよね。 ファイル名の入れ方は、myPath というのは、Excelのオプションで登録されたパスのことです。 Array( の後に、  myPath & "test1.xls", _  ← 「, _」  "C:\Documents and Settings\[ユーザー名]\My Documents\excel02.xls" つなげて入れる場合は、一行の終わりに、「, _」(コンマ+半角スペース+アンダーバー)と入れて、次の行に書き込むと見やすくなりますが、単に、「,」だけで、以下のように横につなげていっても可能です。  myPath & "test1.xls","C:\Documents and Settings\[ユーザー名]\My Documents\excel02.xls" '------------------------------------------------------------------ 'ThisWorkbook モジュール Private Sub Workbook_Open() 'ファイルと本日の日差を取るマクロ  Dim Fnames As Variant 'ファイル名(配列用)  Dim buf As String  Dim f As Variant 'ファイル名    Dim Dif As Variant '日差  Dim myPath As String  '規定なデフォルトパス  myPath = Application.DefaultFilePath & "\"   '**ここに、ファイル名を入れます。ただし、「, 」で区切ります。  Fnames = Array(myPath & "test1.xls", _         "C:\Documents and Settings\[ユーザー名]\My Documents\" & "excel02.xls")    For Each f In Fnames   Dif = FileDateCheck(f) 'オプション可   '90日より以上(× >=90)   If Val(Dif) > 90 Then     buf = buf & vbCrLf & vbCrLf & f & vbCrLf & " 経過: " & Dif & "日"   ElseIf Dif = "missing" Then     buf = buf & vbCrLf & vbCrLf & f & vbCrLf & " 所在不明: "   End If  Next  If InStr(buf, ":") > 0 Then   MsgBox Mid$(buf, 4)  End If End Sub Function FileDateCheck(Fname1 As Variant, Optional blnView As Boolean = False) '引数:Fname1 ファイル名, blnView デフォルト False [False 更新, True 閲覧] Dim objFile As Object Dim Fdate As Date   If Dir(Fname1) = "" Then    FileDateCheck = "missing"    Exit Function   End If     With CreateObject("Scripting.FilesystemObject")   Set objFile = .GetFile(Fname1)   Fdate = objFile.DateLastModified '更新日   If blnView Then    Fdate = objFile.DateLastAccessed '閲覧日   End If   FileDateCheck = DateDiff("d", Fdate, Date)   End With    Set objFile = Nothing End Function これを貼り付けたら、その画面の状態で、「Ctrl + S」 で、保存して、一旦、Excelを閉じてしまえば、今度は、起動するたびに、ファイルをチェックします。ちゃんとしないと、結構、うっとうしい存在になります。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 一応、サブルーチンにしてありますから、ファイル名を入れれば、一覧が出てきます。 これを、個人用マクロブック(アドイン)のThisWorkbook モジュールに、プロシージャ名の名前を変えて、入れておけばよいと思います。更新(オプション:閲覧)しない限りは、永遠に出てきます。 ''Private Sub Workbook_Open() 閲覧のみ FileDateCheck(Fname1, True) 'オプション ------------------------------------------------------------ Sub CheckFileViewDate() 'ファイルと本日の日差を取るマクロ  Dim Fname1 As String 'ファイル名  Dim Dif As Integer '日差  Fname1 = Application.DefaultFilePath & "\" & "test061.xls"  Dif = FileDateCheck(Fname1) 'オプション可  If Dif >= 90 Then   MsgBox Fname1 & vbCrLf & " 経過: " & Dif & "日"  End If End Sub Function FileDateCheck(Fname1 As String, Optional blnView As Boolean = False) '引数:Fname1 ファイル名, blnView デフォルト False [False 更新, True 閲覧] Dim objFile As Object Dim Fdate As Date   If Dir(Fname1) = "" Then FileDateCheck = "": Exit Function     With CreateObject("Scripting.FilesystemObject")   Set objFile = .GetFile(Fname1)   Fdate = objFile.DateLastModified '更新日   If blnView Then    Fdate = objFile.DateLastAccessed '閲覧日   End If   FileDateCheck = DateDiff("d", Fdate, Date)   End With    Set objFile = Nothing End Function ------------------------------------------------------------

daa-junji
質問者

補足

ご返信ありがとうございます。 ただ、申し訳ございませんが不勉強のため上記の回答のみでは、どうやって利用するべきなのか理解できません。 よろしければ、初心者に分かるレベルでどのように使うべきか教えていただけますか?

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

Windowsのタスク処理で3ヶ月に1回起動するようにすればいいのでは? http://accessclub.jp/samplefile/help/help_220_1.htm さもなければOutlookの予定表の定期的なアイテムでアラームを出させるとか? http://office.microsoft.com/ja-jp/outlook/HA010982721041.aspx

回答No.1

マクロ(VBA)はExcelのファイルを開いてから発動するものなので不可能でしょう。 ・・・というかその目的を達成するなら別にExcel VBAを使わずとも常駐するフリーウェアに色々ありそうです。具体的に使ったことは無いので 他の方の回答を期待しますが。

daa-junji
質問者

補足

今回のケースの場合、テンプレートを自分が作成するものの、実際に利用するのは各担当者ということになります。よって、エクセルファイルだけで解決する方が好ましいのですが・・・

関連するQ&A

専門家に質問してみよう