VBA Введите значение на основе будущих дат - PullRequest
0 голосов
/ 25 января 2019

не уверен, правильно ли это сформулировано для заголовка, при необходимости отредактируйте.

У меня есть код, который в настоящее время работает, делает то, что я хочу.Тем не менее, он не подлежит постоянному обслуживанию, и я ищу способ обновить поле или элемент в листе на основе будущих дат.Я также пробовал вложенные функции, но предпочел бы VBA.Я думаю, что мне понадобится сценарий «For / Next», но я не уверен.

По сути, мне нужно обновить поля в зависимости от того, является ли текущая дата обновления прошлой или будущей.даты на основе полугода.Таким образом, если оно прошло 1 февраля 2019 года, тогда значением является «this».Если дата более поздняя, ​​чем 1 июля 2019 года, значением будет «this».Это будет продолжаться в течение следующих 10 лет.

Лист обновляется ежемесячно, и я хочу, чтобы код знал, что на эту дату пришло время обновить эти другие поля или элементы.Ниже приведено то, что я имею для части кода.Как видите, я просто скопировал это.Кажется грязным, и я уверен, что есть более чистый способ сделать это.Мой инстинкт подсказывает сценарий «для / следующего», но у меня нет навыка делать это без посторонней помощи.

Спасибо.

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 голосов
/ 25 января 2019

Кажется, что-то подобное делает свое дело:

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
...