【问题标题】:Reuse UserForm VBA Code for Multiple Date Pickers in Same Worksheet为同一工作表中的多个日期选择器重用 UserForm VBA 代码
【发布时间】:2015-12-16 17:47:29
【问题描述】:

我想知道如何重用 VBA 代码,我必须在同一个工作表上创建多个日历日期选择器,以便输入到不同的单元格。我曾尝试更改 .frm 文件的名称并重新导入它以简单地更改单元格引用输出,但 Excel 每次都拒绝此操作并说该名称已在使用中。我正在密切关注this example

如果您知道如何隐藏可点击图像的代码,直到带有日期的单元格被选中,则可以获得奖励积分。

这是我目前在 frmCalendar 中使用的代码:

Private Sub cmdClose_Click()
    Unload Me
End Sub

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
   On Error Resume Next
   Dim cell As Object
   For Each cell In Range("C18")
      cell.Value = DateClicked
   Next cell
   Unload Me
End Sub

Private Sub UserForm_Initialize()
   If IsDate(ActiveCell.Value) Then
      Me.MonthView1.Value = Range("C18")
   End If
End Sub

...以及我的 Module1 代码:

Sub Sample()
    frmCalendar.Show
End Sub

所以基本上,我有一个可以卸载到 C18 的日历。但是,我希望我的工作表中最多有 10 个日历按钮,它们具有不同的输出单元格,因此它们都可以有不同的日期。

这是一个日历按钮输出到 C18 的示例。它已被分配宏“样本”

那么我怎样才能将我的代码重复用于多个日历按钮? 如果有代码可以隐藏日历按钮直到单元格被选中。

【问题讨论】:

    标签: vba excel calendar


    【解决方案1】:

    您可以在表单打开时存储选定的单元格,并在关闭它时使用它。

    Dim cell As Range 'selected cell when launched
    
    Private Sub cmdClose_Click()
        Unload Me
    End Sub
    
    Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
       On Error Resume Next
       cell.Value = DateClicked
       Unload Me
    End Sub
    
    Private Sub UserForm_Initialize()
       Set cell = Selection.Cells(1)
       If IsDate(cell.Value) Then
          Me.MonthView1.Value = cell.Value
       End If
    End Sub
    

    【讨论】:

    • 我同意您关于选择单元格然后单击按钮的逻辑,但我只是假设我的用户不会按照指示进行操作,而是会立即单击单元格旁边的日历按钮.为了防止该错误,这就是为什么我想知道是否可以为多个用户窗体/宏/按钮重用相同的代码。我是 VBA 新手,我认为这是可能的,但我只是不知道这有多难。
    • 如果我这样做,我可能会 1) 使用工作表的 SelectionChange 事件在单击日期单元格后将单个按钮放置在日期单元格的右侧,或者 2) 实现某些东西在工作表的BeforeDoubleClick 事件中允许用户双击单元格以启动表单。
    • 感谢您的建议。我会研究这些选项。欣赏!
    猜你喜欢
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多