Я хочу отображать активное время в label8, но у меня возникают проблемы с вызовом DisplayCurrentTime() в пользовательской форме инициализации.

Я новичок в изучении , и я просматриваю Stackoverflow для ответов

Private Sub UserForm_Initialize()

    Book2.UserForm1.DisplayCurrentTime
End Sub 

У меня есть это, чтобы попытаться назвать это

Sub DisplayCurrentTime()
    Dim nextSecond As Date

  nextSecond = DateAdd("s", 1, Now())

  Label8.Caption = Time()

  Application.OnTime _
    Procedure:="DisplayCurrentTime", _
    EarliestTime:=nextSecond, _
    LatestTime:=nextSecond
End Sub

И у меня есть эти строки для работы в label8

0
dystopia94 1 Май 2019 в 14:37

3 ответа

Лучший ответ

Поместите DisplayCurrentTime внутри модуля UserForm. Тогда вы можете вызвать саб следующим образом

Private Sub UserForm_Initialize()
    Book2.UserForm1.DisplayCurrentTime
End Sub 

Private Sub DisplayCurrentTime()
    Dim nextSecond As Date

    nextSecond = DateAdd("s", 1, Now())

    Label8.Caption = Time()

    Application.OnTime _
      Procedure:="UserForm1.DisplayCurrentTime", _
      EarliestTime:=nextSecond, _
      LatestTime:=nextSecond + 1
End Sub

В качестве альтернативы, вы можете поместить DisplayCurrentTime в другой модуль. Однако вы заполняете элементы управления в UF, поэтому вам придется указать UF. Процедура ниже подходит для любой пользовательской формы.

Private Sub UserForm_Initialize()
    DisplayCurrentTime Me, "Label8"
End Sub 

Саб ниже в другом модуле

Sub DisplayCurrentTime(UF As UserForm, Cntrl_Name As String)
    Dim nextSecond As Date

    nextSecond = DateAdd("s", 1, Now())

    UF.Controls.Item(Cntrl_Name).Caption = Time()

    'If the control you want to paste the date to is Label8 for every UF, use the commented out code instead..
    '..and remove ", Cntrl_Name As String" from this sub, and...
    '..remove the specified control in the UserForm_Initialize sub

    'UF.Controls.Item("Label8").Caption = Time()

     'Module1 is true in my case, edit to suit your project
     Application.OnTime _
      Procedure:="Module1.DisplayCurrentTime", _
      EarliestTime:=nextSecond, _
      LatestTime:=nextSecond + 1
End Sub
0
Tim Stack 1 Май 2019 в 13:58

Измените процедуру DisplayCurrentTime() на < сильный > Public

Public Sub DisplayCurrentTime()
  'your code here...
End Sub

Это устанавливает «уровень модуля» как доступный извне.

Обратите внимание, что Public Property и Sub/Function будут доступны всем снаружи во всех модулях и во всех приложениях, если Option Private Module не действует

0
Rawrplus 1 Май 2019 в 11:44