0

保護する必要があるワークシートでマクロを使用しています。これはマクロです:

wksPartsDataEntry.Unprotect
Sheet11.Unprotect
Application.ScreenUpdating = False

Dim historyWks As Worksheet
Dim inputWks As Worksheet

Dim nextRow As Long
Dim oCol As Long

Dim myCopy As Range
Dim myTest As Range

Dim lRsp As Long

Set inputWks = wksPartsDataEntry
Set historyWks = Sheet11

'check for duplicate order ID in database
If inputWks.Range("CheckID2") = True Then
  lRsp = MsgBox("Clinic ID already in database. Update record?", vbQuestion + vbYesNo, "Duplicate ID")
  If lRsp = vbYes Then
    UpdateLogRecord
  Else
    MsgBox "Please change Clinic ID to a unique number."
  End If

Else

  'cells to copy from Input sheet - some contain formulas
  Set myCopy = inputWks.Range("OrderEntry2")

  With historyWks
      nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
  End With

  With inputWks
      Set myTest = myCopy.Offset(0, 2)

      If Application.Count(myTest) > 0 Then
          MsgBox "Please fill in all the cells!"
          Exit Sub
      End If
  End With

  With historyWks
      With .Cells(nextRow, "A")
          .Value = Now
          .NumberFormat = "mm/dd/yyyy hh:mm:ss"
      End With
      .Cells(nextRow, "B").Value = Application.UserName
      oCol = 3
      myCopy.Copy
      .Cells(nextRow, 3).PasteSpecial Paste:=xlPasteValues, Transpose:=True
      Application.CutCopyMode = False
  End With

  'clear input cells that contain constants
  With inputWks
    On Error Resume Next
       With myCopy.Cells.SpecialCells(xlCellTypeConstants)
            .ClearContents
            Application.GoTo .Cells(1) ', Scroll:=True
       End With
    On Error GoTo 0
  End With
End If

Application.ScreenUpdating = True
wksPartsDataEntry.Protect
Sheet11.Protect
End Sub

マクロは正常に動作します。ただし、パスワードを使用してシートを保護したい他のユーザーにファイルを配布します。すべてのユーザーは、異なるパスワードを使用する必要があります。そのパスワードは一意であるため、コードにパスワードを追加することはオプションではありません。保護するときに他のユーザーが独自のパスワードを追加できるようにしたいです。次のようなことができるコードは存在しますか?

Sub Macro1()
wksPartsDataEntry.Unprotect Password: (anything a user might choose as a password)
Sheet11.Unprotect: (anything a user might choose as a password)

したがって、最終的には、ユーザーがコードを変更することなく、ユーザーが自分で選択したパスワードに基づいて、私のマクロは保護を解除して再保護します。

私が十分に明確であることを願っています。答えてくれてありがとう!

4

1 に答える 1

4

はい、あります。Excel ヘルプでunprotectを検索するだけです。

wksPartsDataEntry.Unprotect(password)passwordオプションのパラメーターであるため、省略できます。

必要に応じて行うには、これを試してください:

Public Sub MyUnprotect()
  wksPartsDataEntry.Unprotect InputBox( _
                prompt:="Please type your password to unprotect:", _
                Title:="Unprotect")

End Sub

保護のためにこれを拡張することもできます。つまり、指定されたパスワードを変数として保存することによってです。

パスワード入力を非表示にするために星を付けたい場合は、InputBox の代わりに呼び出す独自の UserForm を作成する必要があります。そこで、非表示の入力を含む入力フィールドをセットアップできます。

于 2012-10-19T11:18:00.473 に答える