Excel VBA Вызов календаря через командную кнопку в форме - PullRequest
1 голос
/ 10 мая 2011

Я только что добавил в Календарь 12.0 из инструментов> Дополнительные элементы управления. Календарь работает нормально, и я выкладываю дату в нужные ячейки. Однако я хотел бы сделать календарь видимым с помощью командной кнопки, поскольку моя форма содержит несколько полей, и я не хочу создавать форму для этого календаря. Я пробовал Calendar1.show, но .show не вариант.

Так что в конечном итоге мне нужна командная кнопка, чтобы показать календарь, позволить пользователю выбрать (у меня это есть), а затем закрыть календарь. Любая помощь? Заранее благодарю !!

bdubb

Ответы [ 2 ]

1 голос
/ 10 мая 2011

В этом фрагменте CommandButton1 взят из элементов управления ActiveX, а не из элементов управления формы. Требуется нажать кнопку, чтобы отобразить календарь (который появляется рядом с кнопкой, которую вы нажали), и снова нажать кнопку, чтобы скрыть календарь.

Private Sub CommandButton1_Click()

If Not Calendar1.Visible Then
    Calendar1.LinkedCell = "A1"
    Calendar1.Top = Sheet1.CommandButton1.Top
    Calendar1.Left = Sheet1.CommandButton1.Left + Sheet1.CommandButton1.Width + 1
    Calendar1.Visible = True
Else
    Calendar1.Visible = False
End If

End Sub

Очевидно, что для разных кнопок потребуются разные связанные ячейки, но это означает, что у вас может быть один элемент управления календаря, который он отображает несколькими кнопками (если это то, что вам нужно).

К сожалению, может показаться, что вы не можете скрыть элемент управления во время срабатывания любого из его событий (например, AfterUpdate). Просто не хочет исчезать !!

0 голосов
/ 30 декабря 2014

Скрыть / закрыть элемент управления календаря все еще не работает (новый год 2015 = почти четыре года спустя), но я думаю, что нашел способ обойти скрытие элемента управления после запуска событий.

У меня есть Calendar1_AfterUpdate (),который запускается до Calendar1_Click ().Код размещается непосредственно на листе, а НЕ в модуле.

Private Sub Calendar1_AfterUpdate()
  Range("a1") = Me.Calendar1.Value
  ' Next two lines does not work within AfterUpdate
  ' When running step by step it seems to work but the control is
  ' visible when End Sub has run
  Me.Calendar1.Visible = True
  Me.Calendar1.Visible = False
End Sub

К этому я просто добавил

Private Sub Calendar1_Click()
  Me.Calendar1.Visible = True
  Me.Calendar1.Visible = False
End Sub

Обратите внимание, что элемент управления по какой-то причине необходимо сделать видимым, прежде чем скрывать.

Почему это не работает напрямую в Calendar1_AfterUpdate (), для меня загадка.

Следующая проблема - скрыть элемент управления при удалении мыши.Мышиные события кажутся невозможными в элементе управления календаря ...

...