【问题标题】:VBA Enter Value Based on Future DatesVBA 根据未来日期输入值
【发布时间】:2019-06-18 19:21:29
【问题描述】:

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

我有当前可以工作的代码,可以做我想做的事。但是,它不能永久维护,我正在寻找一种方法来根据未来日期在工作表中更新字段或项目。我也尝试过嵌套函数,但更喜欢 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

【问题讨论】:

  • 您认为您当前的 excel 文件在未来 10 年内不会发生任何变化?在这么大的时间范围内,这似乎是不必要的。
  • 也许对你和我来说,但这是我被要求提供的。可以移交并解释这些变化的东西。他们不希望它成为他们需要担心更新的东西。
  • 您可以转换日期并使用Select Case。您可以使用动态年份或类似的东西创建一个循环。您还可以为文本框创建变量以缩短代码。另外,不需要.Select 任何东西

标签: excel vba for-loop nested


【解决方案1】:

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

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

【讨论】:

  • 感谢 Scott,我会试一试,让您知道!
猜你喜欢
  • 2023-02-16
  • 2020-05-10
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多