通过使用excel VBA仅引用一个数字来自动填充日期

时间:2019-03-06 21:59:52

标签: excel vba

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

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

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

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

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

我一直在寻找一种简单的方法来执行此操作,但据我所知(直到您提出您的观点:))。据我所知,数据验证功能无济于事。另外,插入数字的单元格本身(而不是其他单元格)自动填充也很重要。

这至少有可能吗?我敢打赌有人告诉我要研究事件功能,但是我对VBA知之甚少。

1 个答案:

答案 0 :(得分:0)

这可能需要修改以满足您的需求,但是也许可以使用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事件添加到多个工作表中。