使用VBA根据频率计算到期日

adit123

因此,现在我有了这张Excel工作表,其中有一个最新修订日期。我已将此列命名为“ LastRevisionDate”。然后,我有一列名为“ RevisionFrequency”。所述“RevisionFrequency”包含一个下拉菜单(数据验证)由术语,AnnuallySemi-Annually,和Quarterly然后,我有一列指出“ NextRevisionDate”。

因此,我想编写一些VBA代码,该代码将从LastRevisionDateRevisionFrequency计算出NextRevisionDate

例如。在“ A”列中说我的RevisionFrequency为Semi-Annually,而最后的修订日期Mar-14在“ B”列中,那么我希望“ C”列中NextRevisionDate声明9月基本上是说,该项目每年修订两次。

因此,我想创建一个宏,其中“ C”列基于RevisionFrequencyLastRevisionDate我知道我可以使用公式来完成此操作,但是我不断添加新项目,所以我不想继续将公式复制到每个单元格中。另外对于某些项目,它们不需要修订,如果没有LastRevisionDate,我也想有一个空白单元格

到目前为止,我有以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)


Dim ws As Worksheet
 Set ws = Sheets(1)
'For this reference of the Column Named LastCalDate I am getting an error 
If Not Intersect(Target, ws.Range("LastCalDate").Value) Is Nothing Then

Dim Lastdate As Date
 Dim DueDate As Variant
 Dim Frequency As String
 Dim R As Variant
 Dim C As Variant
 Dim R1 As Variant
 Dim C1 As Variant
 Dim R2 As Variant
 Dim C2 As Variant




R = Range("LastCalDate").Row
 C = Range("LastCalDate").Column

R1 = Range("CalDueDate").Row
 C1 = Range("CalDueDate").Column

R2 = Range("CalFrequency").Row
 C2 = Range("CalFrequency").Column

Lastdate = Cells(R, C).Value 'Last Cal Date
 DueDate = Cells(R1, C1).Value 'Cal Due Date
 Frequency = Cells(R2, C2)

If Frequency = "Annually" Then

DueDate = DateAdd("mmm", 12, Lastdate)

End If

If Frequency = "Semi-Annually" Then
 DueDate = DateAdd("mmm", 6, Lastdate)
 End If

If Frequency = "Quarterly" Then
 DueDate = DateAdd("mmm", 3, Lastdate)
 End If



End Sub

到目前为止,这就是我所拥有的。我不确定我是否正确执行此操作?

使用Worksheet_Change方法是一种无需复制和粘贴公式即可创建新单元格值的好方法。我还在代码中包括检查,以确保未设置日期或频率,然后清除了该值。

Private Sub Worksheet_Change(ByVal Target As Range)

' declare and set worksheet
Dim ws As Worksheet
Set ws = Sheets(1)

' declare and set default date
Dim DefaultDueDate As Date

' declare needed variables
Dim StartDate As Date
Dim Frequency As String
Dim DueDate As Date

' make sure the change only occured on the "A" or "B" column
If Target.Column = 1 Or Target.Column = 2 Then

    StartDate = ws.Range("A" & Target.Row)
    Frequency = ws.Range("B" & Target.Row)

    ' if start date does not equal the default due date and the frequency is not blank, set due date variable
    If StartDate <> DefaultDueDate And Frequency <> "" Then

        ' add months to the provided start date
        If Frequency = "Annually" Then
            DueDate = DateAdd("m", 12, StartDate)
        ElseIf Frequency = "Semi-Annually" Then
            DueDate = DateAdd("m", 6, StartDate)
        ElseIf Frequency = "Quarterly" Then
            DueDate = DateAdd("m", 3, StartDate)
        End If

        ' Make sure frequency selection is correct and due date was set
        If DueDate <> DefaultDueDate Then
            ws.Range("C" & Target.Row) = DueDate
        End If

    Else

        ' clear Next Revision Date when Frequency or Start Date is blank
        ws.Range("C" & Target.Row) = ""

    End If

End If

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何基于Microsoft Infopath Designer中的频率计算到期日的第一天

来自分类Dev

从给定的时间段计算到期日期

来自分类Dev

使用营业时间和假日计算到期日

来自分类Dev

根据期限计算JavaScript中的最终到期日期

来自分类Dev

根据给定日期的频率获取下一个到期日

来自分类Dev

根据频率计算音符

来自分类Dev

将频率(与时间相关)转换为日期(到期日)

来自分类Dev

远期到期日

来自分类Dev

如何在T-SQL(SSMS 2017)中基于下一条记录的[EffectiveDate] -1计算到期日期?

来自分类Dev

使用Q和“ gt” Django根据到期日期过滤对象

来自分类Dev

如何自动计算/更新维护表中的到期日

来自分类Dev

Excel公式根据当前月份日期的星期和日期计算下个月的到期日

来自分类Dev

Angular的到期日期

来自分类Dev

使用带有到期日期的jQuery

来自分类Dev

使用触发器设置到期日列

来自分类Dev

合约到期日期与使用开采的区块号

来自分类Dev

使用工作日设置到期日

来自分类Dev

点击频率计算

来自分类Dev

在UTC使用到期日时JWT到期不工作

来自分类Dev

是否可以根据字段中设置的当前日期到期日期创建操作?

来自分类Dev

用户表单根据用户输入的日期显示到期日期

来自分类Dev

我想在 javascript 中计算保修到期日期

来自分类Dev

如果我知道剩余时间,如何计算 Grails 中的到期日期?

来自分类Dev

php date()和到期日期()

来自分类Dev

TinyMce4到期日期

来自分类Dev

到期日控制程序

来自分类Dev

未设置Cookie的到期日期

来自分类Dev

检查Active Directory到期日期

来自分类Dev

到期日期和页面刷新