VBA根据未来日期输入值

时间:2019-01-24 23:51:44

标签: excel vba for-loop nested

不确定标题的用词是否正确,请根据需要进行编辑。

我有当前可以运行的代码,可以执行我想要的操作。但是,它不能永久维护,我正在寻找一种方法来根据将来的日期在工作表中进行字段或项目的更新。我也尝试过嵌套函数,但希望使用VBA。我认为我需要一个“ For / Next”场景,但我不确定。

基本上,我需要基于当前更新日期是过去半年还是未来半年之间的更新来更新字段。因此,如果已过2019年2月1日,则值为'this'。如果日期是2019年7月1日之后,则值为'this'。这将在未来10年内持续下去。

该工作表每月更新一次,我希望代码知道截至该日期,现在该更新其他字段或项目了。以下是部分代码的内容。如您所见,我只是将其复制下来。看起来很乱,我敢肯定有一种更干净的方法可以做到这一点。我的直觉说一个for / next场景,但是如果没有帮助,我没有技巧。

谢谢。

If Now() > #2/1/2019# Then
    Sheets("Mock up Content Page 1").Select
    ActiveSheet.Shapes.Range(Array("TextBox 33")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi1 2019 vs Last Year"
    ActiveSheet.Shapes.Range(Array("TextBox 54")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi1 2019 vs Last Year" & Chr(13) & ""
    ActiveSheet.Shapes.Range(Array("TextBox 77")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi1 2019 vs Last Year" & Chr(13) & ""
    End If

    If Now() > #7/1/2019# Then
    Sheets("Mock up Content Page 1").Select
    ActiveSheet.Shapes.Range(Array("TextBox 33")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi2 2019 vs Last Year"
    ActiveSheet.Shapes.Range(Array("TextBox 54")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi2 2019 vs Last Year" & Chr(13) & ""
    ActiveSheet.Shapes.Range(Array("TextBox 77")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi2 2019 vs Last Year" & Chr(13) & ""
    End If

    If Now() > #2/1/2020# Then
    Sheets("Analysis").Select
    ActiveSheet.Shapes.Range(Array("TextBox 33")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi1 2020 vs Last Year"
    ActiveSheet.Shapes.Range(Array("TextBox 54")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi1 2020 vs Last Year" & Chr(13) & ""
    ActiveSheet.Shapes.Range(Array("TextBox 77")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = _
        "Semi1 2020 vs Last Year" & Chr(13) & ""
    End If

1 个答案:

答案 0 :(得分:0)

像这样的事情似乎可以解决问题:

Dim semiType as Integer
semiType = iif(Month(now())>6,2,1)

Dim msg as String
msg = "Semi" & semiType & " " Year(now()) &  " vs Last Year"

With Sheets("Mock up Content Page 1")
    .Shapes.Range(Array("TextBox 33")).ShapeRange(1).TextFrame2.TextRange.Characters.text = msg    
    .Shapes.Range(Array("TextBox 54")).ShapeRange(1).TextFrame2.TextRange.Characters.text = msg & Chr(13)
    .Shapes.Range(Array("TextBox 77")).ShapeRange(1).TextFrame2.TextRange.Characters.text = msg & Chr(13)
End With