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

Posted

技术标签:

【中文标题】使用excel VBA仅引用一个数字来自动填充日期【英文标题】:Autofill date by referring only one number with excel VBA 【发布时间】:2019-03-06 21:59:52 【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

在名为 March 的工作表中输入该公式只会返回一个错误。 @dwirony 工作簿是否已保存?如果不是,这肯定会返回错误。 查看Worksheet_Change 事件。如果您知道将有日期的列,则该页面上的相交是一个有用的概念。 @dwirony 它在法国月份对我来说 100% 有效(尝试使用“Mars”而不是“March”)。我不知道它是否与语言有关,但我相信它是有效的。 【参考方案1】:

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

【讨论】:

感谢您的工作!不幸的是,我似乎无法做任何事情。它返回“编译错误:检测到不明确的名称:Worksheet_Change”。我将深入研究并尝试使其发挥作用:)。主要功能应该在一个模块中,并且工作表上的工作表更改部分日期正确? 是的。听起来你有另一个工作表更改实例,你不应该这样做。

以上是关于使用excel VBA仅引用一个数字来自动填充日期的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel VBA 中对一系列单元格使用自动填充

如何自动填充公式 VBA

Excel VBA:自动填充动态范围错误

自动填充 Application.Countifs.Formula VBA Excel

在EXCEL中插入日历控件后,如何添加到单元格上(带下拉箭头),点击后出现日历,选择一个日期自动填充并隐

自动填充中断一条记录 [Excel-VBA]