【问题标题】:VBA Excel - How to Automatically Fill a date in multi-columns if i filled column AVBA Excel - 如果我填写了 A 列,如何自动在多列中填写日期
【发布时间】:2015-10-15 09:12:50
【问题描述】:

这是我第一次编写代码,我尝试编写有助于填充列 BCD 的代码> 当我自己填充列 A 时会自动发生这种情况。

这是我现在正在处理的那张纸的图片 Worksheet Explaining what i Want

The final result must be like this Picture

我尝试用谷歌搜索代码,我找到了一个代码,但它根本不起作用

这是第一个代码

    Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range, B As Range, Inte As Range, r As Range
Set A = Range("A:A")
Set Inte = Intersect(A, Target)
If Inte Is Nothing Then Exit Sub
Application.EnableEvents = False
    For Each r In Inte
        r.Offset(0, 1).Value = Date
    Next r
Application.EnableEvents = True
End Sub

我也尝试编写另一个代码,这可能有助于我根据上面的代码结果填充列 BC 但仍然无法正常工作。

这是我写的代码

Private Sub Worksheet_Change1(ByVal Target As Range)
Dim i As Integer
For i = 6 To 1000
If Cells(i, "A").Value <> "" And Cells(i, "B").Value <> "" Then

   Cells(i, "C").Value = Date
   Cells(i, "C").NumberFormat = "mmm"
   Cells(i, "D").Value = Date
   Cells(i, "D").NumberFormat = "yyyy"

End If

Next

Range("C:C").EntireColumn.AutoFit
Range("D:D").EntireColumn.AutoFit

End Sub

有人可以帮忙吗?

【问题讨论】:

  • 在未先关闭事件处理的情况下,切勿将来自 Worksheet_Change 事件宏的值放入工作表。在离开潜艇之前重新开启事件处理。
  • 对不起,我不明白

标签: vba excel date multiple-columns


【解决方案1】:

Worksheet_Change 事件宏在工作表上的一个或多个单元格更改值时触发。如果您在 Worksheet_Change 过程中将值写入工作表(就像您使用日期一样)而没有先关闭事件处理,则会触发另一个 Worksheet_Change 并且该过程会尝试在其自身之上运行。在将值写入工作表之前,始终使用 Application.EnableEvents = False 关闭事件处理。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:B")) Is Nothing Then
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        Dim rw As Long, rng As Range
        For Each rng In Intersect(Target, Range("A:B"))
            If Application.CountA(Cells(rng.Row, "A").Resize(1, 2)) = 2 Then
                Cells(rng.Row, "C").Resize(1, 2).Value = Date
                Cells(rng.Row, "C").NumberFormat = "mmmm"
                Cells(rng.Row, "D").NumberFormat = "yyyy"
            End If
        Next rng
        Range("C:C").EntireColumn.AutoFit
        Range("D:D").EntireColumn.AutoFit
    End If

bm_Safe_Exit:
    If CBool(Val(Err.Number)) Then _
        Debug.Print Err.Number & ": " & Err.Description
    Application.EnableEvents = True

End Sub

请记住在退出 Worksheet_Change 过程之前使用 Application.EnableEvents = True 重新打开事件,否则将来的值更改将不会再次触发 Worksheet_Change 过程。

顺便说一句,October 的正确数字格式是 mmmm,而不是 mmm。前者给出完整的月份名称;后者只有三个字母的缩写(例如Oct)。

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多