基本上,我想开发一个办公室excel插件。安装此插件后,创建的所有excel文件只能由excel安装了此插件的用户打开。所以我在这里有两个问题:
答案 0 :(得分:3)
美丽的问题:)
是的,它可以在VBA Excel加载项中实现。事实上,几年前我确实实现了类似的功能。这是以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 :请勿在{{1}}中选择太大的数字。它只会延迟以后打开文件。
2)要获取临时目录,请使用此代码
Application.WorksheetFunction.RandBetween(1, 10)
3)在temp目录中创建文件后,重命名该文件并为其指定一个Excel无法识别的扩展名,例如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个字母开始您的SO句柄MyFile.ice
)
您可以使用此代码重命名文件
iceagle
这样普通用户就不知道打开这个文件需要哪个应用程序。
要打开此文件,您可以在Name TempPath & "MyFile.xls" As "C:\MyFile.Ice"
*.ice
Application.GetOpenFilenam
4)要打开文件,请使用此代码
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
希望这能让你开始:)