プロが教えるわが家の防犯対策術!

定期的に(3ヶ月に一回ほど)ファイルを閲覧しなければならないにも関わらず、閲覧するのを忘れてしまうことを防ぐため、

3ヶ月に一回ほど、エクセルファイルを開かなくてもアラーム等で警告し閲覧を促すというようなマクロを作ることは可能でしょうか。

A 回答 (4件)

マクロ(VBA)はExcelのファイルを開いてから発動するものなので不可能でしょう。



・・・というかその目的を達成するなら別にExcel VBAを使わずとも常駐するフリーウェアに色々ありそうです。具体的に使ったことは無いので
他の方の回答を期待しますが。

この回答への補足

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

補足日時:2007/06/19 11:17
    • good
    • 0

Windowsのタスク処理で3ヶ月に1回起動するようにすればいいのでは?


http://accessclub.jp/samplefile/help/help_220_1. …

さもなければOutlookの予定表の定期的なアイテムでアラームを出させるとか?
http://office.microsoft.com/ja-jp/outlook/HA0109 …
    • good
    • 0

こんにちは。



一応、サブルーチンにしてありますから、ファイル名を入れれば、一覧が出てきます。
これを、個人用マクロブック(アドイン)の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

------------------------------------------------------------

この回答への補足

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

補足日時:2007/06/19 13:16
    • good
    • 0

こんにちは。

#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を閉じてしまえば、今度は、起動するたびに、ファイルをチェックします。ちゃんとしないと、結構、うっとうしい存在になります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!