密码作为功能和ontime无法正常工作

时间:2017-11-28 13:55:06

标签: excel vba excel-vba

我将尝试尽可能明确地处理我的问题。

我有一个工作簿,其中所有工作表都受密码保护,并且在运行表单时会运行大量代码。

现在这个工作簿在3个不同的部门上运行,每个部门都有一个拥有自己密码的部门负责人。我尝试这样做的最简单方法是首先在模块中设置:

Public pass As String

我还有一个关于start事件的工作簿来定义这个变量:

pass = ThisWorkbook.Worksheets("Pass").Range("A1").Value
ThisWorkbook.Worksheets("Pass").Visible = xlSheetVeryHidden

因此,您可以看到我将密码存储在工作表“Pass”的A1中

这样部门主管可以随时通过我创建的表单更改密码。这使他们的密码保密。

现在所有的工作簿都很好,除非它进入我创建的超级用户模式,显示部门负责一些隐藏的工作表,并允许他们每月进行审计。

他们通过具有以下代码的表单访问此超级用户模式:

Private Sub cmdAdd_Click()
   Dim min As Long 
   Dim sVal As String
   Dim ws As Worksheet
   Dim wb As Worksheet
   Dim ktime As Date
   Dim wn As Worksheet
   Dim wc As Worksheet
   Set ws = Worksheets("Formularios")
   Set wb = Worksheets("LookupList")
   Set wn = Worksheets("Coordenador")
   Set wc = Worksheets("Time")



If Trim(Me.txtPass.Value) = "" Then
 Me.txtPass.SetFocus
 MsgBox "Por favor inserir Password"
 Exit Sub
End If

If Trim(Me.txtMinuto.Value) = "" Then
  Me.txtMinuto.SetFocus
  MsgBox "Por favor inserir Tempo"
  Exit Sub
 End If

min = CInt(txtMinuto)
sVal = txtPass.Value

If sVal = pass Then
  For Each Worksheet In ThisWorkbook.Worksheets
    Worksheet.Unprotect Password:=sVal
    Worksheet.Visible = xlSheetVisible
  Next

  ktime = Now + TimeSerial(0, min, 0)
  ThisWorkbook.Sheets("Pass").Visible = xlSheetVeryHidden
  ThisWorkbook.Sheets("Coordenador").Range("O" & Range("Coordenador!O1048000").End(xlUp).Row + 1).Value = ktime
  Application.OnTime ktime, "CloseC"
  ThisWorkbook.Sheets("Coordenador").Range("P11") = ktime
  ws.Protect Password:=pass
  wb.Protect Password:=pass
  wn.Protect Password:=pass
  wb.Visible = xlSheetHidden
  Calc
  wc.Unprotect Password:=pass
  wc.Range("I1").Value = "c"
  wc.Protect Password:=pass
  Audit
  Unload Me
  Else: MsgBox "There is a problem - check your password, capslock, etc."
End If
End Sub

正如您所看到的,表格会询问他们成为超级用户的分钟数。并且它在结束时运行“CloseC”宏,这是将所有内容与密码重新组合在一起并结束超级用户的宏。

这是我的问题:如果一个部门负责人运行该表格两次或更多次,理论上它应该只是将新时间添加到excel的“Ontime”功能,该功能在他上次引入时运行宏“CloseC”,然而这并没有发生,而且excel正在创建一个新的“Ontime”实例,并且仍然是第一次运行CloseC。 当发生这种情况时,代码会发生奇怪的事情,它不再允许您运行超级用户表单,而是会出现密码错误的错误。我可以通过关闭并打开工作簿来绕过最后一个错误。

感谢您提供任何改进我的代码的帮助或方法。

1 个答案:

答案 0 :(得分:0)

根据@Rory评论,我将此添加到代码中:

If wn.Range("O2") <> "" Then
        For Tsweep = 2 To Range("Coordenador!O1048000").End(xlUp).Row
        Application.OnTime EarliestTime:=Range("Coordenador!O" & Tsweep).Value, Procedure:="CloseC", Schedule:=False
        Next Tsweep
        wn.Range("O:O").ClearContents
    End If

似乎工作正常。 谢谢你的帮助。