使用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仅引用一个数字来自动填充日期的主要内容,如果未能解决你的问题,请参考以下文章
自动填充 Application.Countifs.Formula VBA Excel