1

基本的には、オフィスエクセルアドインを開発したいと思います。このアドインをインストールすると、作成されたすべてのExcelファイルは、このアドインがインストールされているExcelのユーザーのみが開くことができます。だから私はここに2つの質問があります:

  1. VBAを使用して開発できますか、それともC#またはVBを使用してアプリケーションレベルのアドインとして開発する必要がありますか?
  2. どうやってするの?保存するときにExcelファイル形式を少し変更する必要があるようです。このアドインがない他のExcelは、これが壊れたファイルであると見なします。これを行うExcelAPIはありますか?そうでない場合、あなたはいくつかのより良いアイデアがありますか?
4

1 に答える 1

3

美しい質問:)

はい、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"

このように、通常のユーザーは、このファイルを開くためにどのアプリケーションが必要かわかりません。

このファイルを開くには、次のようにフィルターを設定できます*.iceApplication.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

これで始められることを願っています:)

于 2012-06-25T17:03:26.083 に答える