0

编码新手——请多多包涵!

我正在尝试为在工作簿打开和工作表更改发生时开始的日期添加创建事件过程。

用户在 F3:F50 范围内手动输入“结算”日期。反过来,我希望另一个日期自动插入到 D3:D50 范围内,即早 60 天。

 Private Sub Workbook_Open()
    Sheet1.EventProc1 Sheet1.Range("D3:D50")
End Sub

^^我的理解:在指定范围内启动 sheet1 的事件过程。

Private Sub Worksheet_Activate()
    EventProc1 Me.Range("D3:D50")
End Sub

^^打开工作表时做同样的事情。

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    EventProc1 Intersect(Target, Me.Range("F3:F50"))

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

^^这是开始变得混乱的地方。我做了相交 F3:F50 认为我希望在检测到 F3:F50 中输入的新数据时发生工作表更改(这反过来会影响 D3:D50)。

Sub EventProc1(rng As Range)
    Dim cell As Range
    Dim Closeout As Date

    If rng Is Nothing Then Exit Sub

    For Each cell In rng.Cells
        Closeout = Range("F3:F50").Value
            Select Case cell
                Case Date: Cells.Value = DateAdd("d", -60, Closeout)
                Case Else: Cells.ClearContents
            End Select
    Next
End Sub

^^我对主要代码的尝试。我正在逐步调整它以尝试让它工作,直到我的调试器开始给我一个字符串“Closeout = Range("F3:F50").Value”的类型不匹配错误并且我的新手技能被难住了。

有什么建议么?我将其设置为 EventProc 的原因是因为我将在其上添加更多 EventProc。提前谢谢。

4

1 回答 1

2

我认为这应该让你更接近你需要去的地方:

  Private Sub Worksheet_Change(ByVal Target As Range)
    'Should probably provide a better check for datatype as well here
    'but your previous code had several cells assigned to the date
        If Intersect(Target, Me.Range("F3:F50")) Is Nothing Then
        Else
        Application.ScreenUpdating = False
        Application.EnableEvents = False

        EventProc1 Target

        Application.EnableEvents = True
        Application.ScreenUpdating = True

        End If
    End Sub


    Sub EventProc1(rng As Range)
        Dim cell As Range
        Dim Closeout As Date
            Closeout = CDate(rng.Value) 
        Cells(4, rng.Column).Value = DateAdd("d", -60, Closeout)

    End Sub

编辑:好的,只要你想调用这个事件。它应该滚动通过每个单元格并相应地每次更新它。:-)

Sub NewEventProc1()
    Dim rngCell as Range
    For Each rngCell in Range("F3:F50")
        If TypeName(rngCell) <> "String" Then
             Cells(4, rngCell.Column).Value = DateAdd("d", -60, rngCell.Value)
        End If
    Next
End Sub
于 2013-06-25T00:58:15.973 回答