No.1ベストアンサー
- 回答日時:
アイデアはいくつか持っています。
2018/1/1 ピッタリと行くかは別ですが、以下の場合は、2017年の12/29が最後の日とみなされて、開いて、閉めれば、パスワードを掛けられてしまう、という方法です。
正月すぎまでファイルを開かなければ、場合によっては、1月1日以降にパスワードが掛けられてしまうかもしれません。
1月1日に自動的に切り替えるには、外部プログラムとタイマーの登録が必要です。
'//ThisWorkbook モジュール
Option Explicit
Const mPSW As String ="abc" 'パスワード
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const XLMacro As Long = 52
Application.DisplayAlerts = False
''12月29日7時55分以降は、プロテクトを掛けて保存します。
If Now > DateSerial(2017, 12, 29) + TimeSerial(0, 7, 55) Then
ThisWorkbook.SaveAs ThisWorkbook.Name, XLMacro, mPSW, mPSW
End If
Application.DisplayAlerts = True
End Sub
//
スタンドアロンで、もっと凝った作りをさせることも可能ですが、要求に応じたものを作って差し上げるというわけにはいかないことはご承知ください。あくまでも、ヒントを与えているだけだと思ってください。
なお、OneDrive for Business(Office 365 Premium) に、期限付きファイルというものがあります。
もうひとつは、Microsoft では、ARM(Azure Right Management)
https://products.office.com/ja-jp/business/micro …
という方法もあります。
お礼が遅くなり申し訳ございません、お早い回答ありがとうございます。参考にさせていただいてプログラムを作っていきます。ありがとうございました。
No.3
- 回答日時:
少し、本格的なものを作ってみました。
ご質問者さんがコメントを残していませんし、それを書いても、たぶん、評価は受けないとは思います。VBSですが、暗号化が可能です。Batchとは違うものです。Batchは、1回キリです。
もうこれは、マクロではなく、日時が来たら実行に移すマクロ・ウィルスと同等です。
MsgBox の所がコメントブロックになっているのは、実際は人知れず行うことになるからです。
この有効期限は、標準は3日ですから、仕事始めが、1月4日として6日までに実行されます。コントロールパネルの「タスクのスケジュール」に設定されていますから、用が済んだら、削除したほうがよいでしょう。拡張子は、xls, xlsx, xlsm の3つになっています。それ以外のものは、何もしないようになっています。(MsgBox でコメントを出しません)
必要なら、コードの中のシングルコーテーションを外してください。
'MsgBox "unknow Extention " & Ext
なるべくわかっている人にお使い願いたいです。
#1で書いたARMが標準的です。
'-----------------------
'//XlLock.Vbs
Dim objFS
Dim objFile
Const PSW ="xxx"
Const mPATH ="C:\Temp\"
Const oFNAME ="Test1m.xlsm"
Const fDFLT =51
Const fNML =-4143
Const fMCR= 52
Dim BaseName
Dim Ext, xt
Dim flg
'On Error Resume Next
Set objFS = CreateObject("Scripting.Filesystemobject")
If objFS.FileExists(mPATH &oFNAME)=False Then
' MsgBox "Not found " & oname & vbCrLf & "Please Check again!"
WScript.Quit
End If
BaseName= objFS.GetBaseName(mPATH & oFNAME)
Ext = objFS.GetExtensionName(mPATH & oFNAME)
If LCase(Ext) = "xls" Then
xt =fNML
ElseIf LCase(Ext) = "xlsx" Then
xt = fDFLT
ElseIf LCase(Ext) = "xlsm" Then
xt = fMCR
Else
'MsgBox "unknow Extention " & Ext
Wscript.Quit
End If
Dim xlApp
Dim wb
Set xlApp =CreateObject("Excel.Application")
''xlApp.visible =True
On Error Resume Next
Set wb=xlApp.Workbooks.Open(mPATH & oFNAME,0,0,,"","")
On Error Goto 0
If IsObject(wb) Then
wb.Protect PSW
WScript.Sleep 1000
xlApp.DisplayAlerts= False
wb.SaveAs mPATH & oFNAME,xt,PSW,PSW
xlApp.DisplayAlerts= True
wb.Close False
Call ErrEndProc(False)
Else
Call ErrEndProc(True)
End If
Set xlApp = Nothing
WScript.Quit
Function ErrEndProc(flg)
Set wb = Nothing
xlApp.Quit
Set xlApp = Nothing
If flg Then
'WScript.Echo "実行は失敗しました " & Err.Description
Else
'WScript.Echo "成功しました。"
End If
WScript.Quit
End Function
'--------------------------切り取り線-------
rem xlLock.vbs と一緒にしておいておくとよい。
rem 場所は適当に書き換えてください。
rem'----xlLock.bat---------------------
@echo off
schtasks /create /tn ChngeLock /sd 2018/01/04 /st 00:00:05 /tr "C:\Users\[YourID]\Documents\xlLock.vbs" /sc once
echo on
本格的なプログラムを書いていただきありがとうございます。今後勉強してこのような高度なプログラムが使えるようになっていきたいと思います。ありがとうございました。
No.2
- 回答日時:
Workbook_Openイベントプロシジャに仕込んでみました。
このマクロは、翌年以降かつPW未設定の場合にPWを設定して保存します。その後、再オープンすることにより、PWの入力が要求されるようになります。
Workbook_Openイベントプロシジャで自分自身を再オープンすることができるのか疑問だったのですが、とりあえず動作したので良しとしました。
Private Sub Workbook_Open()
Dim yyyy As Integer
With ThisWorkbook
yyyy = Split(.Name, "年", 2)(0)
If yyyy < Year(Now) And .HasPassword = False Then
.Password = "abc"
.Save
Workbooks.Open .FullName
End If
End With
End Sub
【注意点】とりあえず、ブック名から年を特定していますが、例えば「201x年」みたいな想定外の名前だと異常終了します。この辺はご自分でご検討ください。
お早い遅くなり申し訳ございません。お早いご回答ありがとうございます。シンプルで分かりやすいプログラムをご教示いただきましたので参考にさせていただきます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) エクセルのマクロ設定 1 2023/04/05 19:37
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- その他(Microsoft Office) エクセルのマクロについて教えてください。 5 2023/01/21 09:39
- Excel(エクセル) マクロの保存先、開いてるすべてのブックの意味 エクセルを開き、表示→マクロ→マクロの表示と順番に開く 3 2022/06/25 17:52
- Excel(エクセル) エクセルについて 8 2023/02/11 07:36
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- Excel(エクセル) 記録マクロのみでできますか? 7 2022/08/07 20:38
- その他(Microsoft Office) エクセル、ワードをこれからも使うしかないのですか? 3 2023/06/02 07:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コピーしたファイルのマクロを...
-
Excelからnotesメールを自動で...
-
昨日まで動いていたエクセルの...
-
VBAを一度起動するとずっと出て...
-
VBA マクロ実行時エラー’1004Ra...
-
エクセルファイルを自身のファ...
-
エクセル2013vbaで、見えない名...
-
エクセルマクロを有効にしない...
-
マクロでマクロを削除する
-
EXCEL マクロ クリップボードク...
-
AccessからExcelマ...
-
【マクロ】その時、その時で変...
-
Excelでこの式の意味をおしえて...
-
エクセルマクロが海外PCで開けない
-
外部データを取り込むマクロ
-
エクセルのマクロで使用期限
-
エクセルのマクロについて教え...
-
毎日業績データをCSVでダウンロ...
-
ビックリマークの意味
-
Word用のマクロが急に働かなく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル終了時の保存確認メッ...
-
VBAを一度起動するとずっと出て...
-
コピーしたファイルのマクロを...
-
別のパソコンでエクセルのマク...
-
VBA マクロ実行時エラー’1004Ra...
-
EXCEL マクロ クリップボードク...
-
昨日まで動いていたエクセルの...
-
Excelマクロ ファイル名が変わ...
-
excelファイルに使われているVB...
-
アクセスでファイルを開いたと...
-
エクセルマクロ実行中に別ファ...
-
エクセルマクロにてパワーポイ...
-
エクセル2013vbaで、見えない名...
-
マクロを消すマクロは不可能?
-
excelが別プロセスで起動してし...
-
エクセルファイルを自身のファ...
-
excelでpersonal.xlsを常に開く...
-
Excelが勝手にシート移動してし...
-
Excel2010 PERSONAL.xlsbの挙動...
-
【マクロ】エラーが発生⇒実行時...
おすすめ情報