美しい質問:)
はい、VBAExcelアドインで実現できます。実際、私は数年前に似たようなものを実装しました。これが4つのステップで説明されているロジックです。
アドインを使用してファイルを作成する場合は、次の手順に従ってください
1)ファイルTemp directory
を言うように保存しTemp.xls
、パスワードで保護します。固定パスワードまたは動的パスワードのいずれかを保持することを選択できます。動的パスワードを作成するには、このコードを参照してください。
Function GenerateRandPassword() As String
Dim strEnvPass As String, strPass As String
Dim n As Integer
strEnvPass = "@#$%^"
n = Application.WorksheetFunction.RandBetween(1, 10)
For i = 1 To 5
strPass = strPass & n
Next i
strPass = strEnvPass & strPass & strEnvPass
GenerateRandPassword = strPass
End Function
それをテストするには、単にこのように呼びます
Sub Sample()
Debug.Print GenerateRandPassword
End Sub
パスワードはこの形式になります
@#$%^11111@#$%^
@#$%^22222@#$%^
@#$%^33333@#$%^
.
.
.
@#$%^1010101010@#$%^
アドインを使用してファイルを開こうとしている場合は、1から10をループし@#$%^
、サフィックスとプレフィックスとしてパスワードを作成してから、ファイルを開こうとします。そうすれば、Excelファイルにランダムなパスワードが割り当てられます。これらの種類のファイルを開く方法については、4番目のポイントを参照してください。
IMP:で大きすぎる数値を選択しないでくださいApplication.WorksheetFunction.RandBetween(1, 10)
。後でファイルを開くのが遅れるだけです。
2)一時ディレクトリを取得するには、このコードを使用します
Private Declare Function GetTempPath _
Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Private Const MAX_PATH As Long = 260
Function TempPath() As String
TempPath = String$(MAX_PATH, Chr$(0))
GetTempPath MAX_PATH, TempPath
TempPath = Replace(TempPath, Chr$(0), "")
End Function
Sub TmpPath()
'This will give the Temp Path
MsgBox TempPath
End Sub
3)ファイルがtempディレクトリに作成されたら、ファイルの名前を変更し、たとえばExcelが認識しない拡張子を付けますMyFile.ice
(SOハンドルから最初の3文字を取得しますiceagle
)
このコードを使用して、ファイルの名前を変更できます
Name TempPath & "MyFile.xls" As "C:\MyFile.Ice"
このように、通常のユーザーは、このファイルを開くためにどのアプリケーションが必要かわかりません。
このファイルを開くには、次のようにフィルターを設定できます*.ice
。Application.GetOpenFilenam
Sub Sample()
fileToOpen = Application.GetOpenFilename("ICE Files (*.ice), *.ice")
If fileToOpen <> False Then
Application.DisplayAlerts = False
Workbooks.Open (fileToOpen)
Application.DisplayAlerts = True
End If
End Sub
4)ファイルを開くには、このコードを使用します
Sub OpenFile()
Dim wb As Workbook
Dim strPass As String
For i = 1 To 10
On Error Resume Next
strPass = "@#$%^" & i & i & i & i & i & "@#$%^"
Set wb = Workbooks.Open("C:\MyFile.ice", , , , strPass)
If Err.Number = 0 Then Exit For
Err.Clear
Next
On Error GoTo 0
End Sub
これで始められることを願っています:)