首页 > 解决方案 > 通过使用excel VBA仅引用一个数字来自动填充日期

问题描述

如果我们可以仅通过引用一个数字来填写日期怎么办?这种类型的功能将在某些 excel 场景中提高用户友好性。

例如:在 March 表中,当我在给定的日期列中键入“7”时,我插入该值的单元格将返回“07/03/19”(或 03/07/19)。

如果可能的话,这意味着我需要在 VBA 代码中指定此工作表的月份和年份,并为每个工作表(2 月等)更改此变量。如果工作表名称是月份名称(例如“March”),甚至可以使用单一解决方案 VBA 代码来实现。下面的公式利用了它,所以我猜 VBA 可以做到。

=MONTH(DATEVALUE(MID(CELL("filename";$A$1);FIND("]";CELL("filename";$A$1))+1;255)&" 1"))

在名为“March”的工作表中输入此公式,它将返回“3”。

我一直在寻找一种简单的方法来做到这一点,但据我所知没有(直到你带上你的光芒:))。据我所知,数据验证功能无济于事。此外,插入数字的单元格会自动填充(而不是另一个单元格),这一点很重要。

这至少可能吗?我打赌是的。我被告知要查看事件函数,但我对 VBA 知之甚少。

标签: excelvba

解决方案


这可能需要修改以满足您的需求,但可能是使用Worksheet_Change事件的解决方案。

工作表更改部分:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo SafeExit:
    Application.EnableEvents = False
        If Target.Cells.Count = 1 Then ' 
            If Not Intersect(Target, Me.Columns("A")) Is Nothing Then 'change as needed
                Target.Value = DateFromDay(Me.Name, Target.Value)
            End If
        End If
SafeExit:
    Application.EnableEvents = True
End Sub

主功能

Public Function DateFromDay(monthName As String, dayNum As Integer) As Date
    On Error Resume Next
    DateFromDay = DateValue(dayNum & " " & monthName & " " & Year(Now()))
End Function

您也可以考虑将该Workbook_SheetChange事件添加到多个工作表中。


推荐阅读