Требуется гораздо более аккуратное решение - PullRequest
0 голосов
/ 11 апреля 2020

'Это извлечение из программы Excel VBA для извлечения флагов «число дня» и «-1,0, + 1» из таблицы, называемой «Календарь событий». Столбец 1 - Событие «х», Столбец 2 дня месяца, Столбец 3 -1,0 или +1. «События НЕ описаны как Событие 1, Событие 2 и c. но имеют различные (фиксированные) описания. «Активная ячейка» - это столбец даты (1-й) на странице моей книги, «Событие x» - столбец описания (3-й) на той же странице. «Календарь событий - это таблица из 3 столбцов в моей книге». Строка 580 проверяет, является ли «новая» дата выходным или праздничным днем, и корректируется соответствующим образом, некоторые путем добавления дней, другие путем вычитания дней. «Флаг» установлен на одну из выбранных цифр (-1,0 или +1). «Флаг» устанавливается параметром «Флаг =», который также определяется календарем событий таблицы. Столбец 3. ' «Это очень« громоздко », должен быть более аккуратный путь. '

    Dim Calender_of_Events(1 To 100, 1 To 2) As Variant   'Array to hold the Dates of the Calender of Events.
    'Dim x, Dim u etc

Windows("Calender of Events.xlsm").Activate
Sheets("Page 2").Select

    'Populate Calender_of_Events

x = Range("W2").Value                                                   'No. of Lines in the Table (Page 2 - Column W (Col 23))
ActiveSheet.Cells(2, 23).Select

    For u = 1 To (x + 1)
        ActiveCell.Offset(1).Select
        Calender_of_Events(u, 1) = ActiveCell()
        Calender_of_Events(u, 2) = ActiveCell.Offset(0, -1)
    Next u


Windows("Calender of Events.xlsm").Activate
Sheets("Page 1").Select


Line260:
    If (ActiveCell.Offset(0, 2) = "Event 1") Then Else GoTo Line270                                            'Not "Event 1" then go to the next detail
        If (IsError(Application.VLookup("Event 1", Calender_of_Events, 2, False))) Then GoTo Line990
            A234 = Application.VLookup("Event 1", Calender_of_Events, 2, False)                                                           '"No Match" Else "Match"
            C210 = CDate((A234) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line270:
    If (ActiveCell.Offset(0, 2) = "Event 2") Then Else GoTo Line280                           'Not "Event 2" then go to the next detail
        If (IsError(Application.VLookup("Event 2", Calender_of_Events, 2, False))) Then GoTo Line990                           '"No Match" Else "Match"
            A244 = Application.VLookup("Event 2", Calender_of_Events, 2, False)
            C210 = CDate((A244) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line280:
    If (ActiveCell.Offset(0, 2)) = "Event 3" Then Else GoTo Line290       'Not "Event 3" then go to the next detail
        If (IsError(Application.VLookup("Event 3", Calender_of_Events, 2, False))) Then GoTo Line990       '"No Match" Else "Match"
            A253 = Application.VLookup("Event 3", Calender_of_Events, 2, False)
            C210 = CDate((A253) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line290:
    If (ActiveCell.Offset(0, 2)) = "Event 4" Then Else GoTo Line300             'Not "Event 4" then go to the next detail
        If (IsError(Application.VLookup("Event 4", Calender_of_Events, 2, False))) Then GoTo Line990   '"No Match" Else "Match"
            A259 = Application.VLookup("Event 4", Calender_of_Events, 2, False)
            C210 = CDate((A259) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line300:
    If (ActiveCell.Offset(0, 2)) = "Event 5" Then Else GoTo Line310        'Not "Event 5" then go to the next detail
        If (IsError(Application.VLookup("Event 5", Calender_of_Events, 2, False))) Then GoTo Line990   '"No Match" Else "Match"
            A265 = Application.VLookup("Event 5", Calender_of_Events, 2, False)
            C210 = CDate((A265) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line310:
    If (ActiveCell.Offset(0, 2)) = "Event 6" Then Else GoTo Line320                                   'Not "Event 6" then go to the next detail
        If (IsError(Application.VLookup("Event 6", Calender_of_Events, 2, False))) Then GoTo Line990                         '"No Match" Else "Match"
            A270 = Application.VLookup("Event 6", Calender_of_Events, 2, False)
            C210 = CDate((A270) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line320:
    If (ActiveCell.Offset(0, 2)) = "Event 7" Then Else GoTo Line330                               'Not "Event 7" then go to the next detail
        If (IsError(Application.VLookup("Event 7", Calender_of_Events, 2, False))) Then GoTo Line990                     '"No Match" Else "Match"
            A275 = Application.VLookup("Event 7", Calender_of_Events, 2, False)
            C210 = CDate((A275) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line330:
    If (ActiveCell.Offset(0, 2)) = "Event 8" Then Else GoTo Line340                                 'Not "Event 8" then go to the next detail
        If (IsError(Application.VLookup("Event 8", Calender_of_Events, 2, False))) Then GoTo Line990  '"No Match" Else "Match"
            A280 = Application.VLookup("Event 8", Calender_of_Events, 2, False)
            C210 = CDate((A280) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line340:
    If (ActiveCell.Offset(0, 2)) = "Event 9" Then Else GoTo Line350                                  'Not "Event 9" then go to the next detail
        If (IsError(Application.VLookup("Event 9", Calender_of_Events, 2, False))) Then GoTo Line990                        '"No Match" Else "Match"
            A285 = Application.VLookup("Event 9", Calender_of_Events, 2, False)
            C210 = CDate((A285) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

Line350:
    If (ActiveCell.Offset(0, 2)) = "Event 10" Then Else GoTo Line360                          'Not "Event 10" then go to the next detail
        If (IsError(Application.VLookup("Event 10", Calender_of_Events, 2, False))) Then GoTo Line990     '"No Match" Else "Match"
            A294 = Application.VLookup("Event 10", Calender_of_Events, 2, False)
            C210 = CDate((A294) & "/" & (A174) & "/" & (Input_Year))
            ActiveCell.Value = C210
            C202 = ActiveCell()
            z = 0: GoTo Line580

1 Ответ

0 голосов
/ 13 апреля 2020

Мне очень жаль, что я опубликовал это. Ответ в основном так прост, я не могу понять, почему я не мог видеть это во-первых. Может быть, это потому, что я пришел в ту эпоху, когда много использовал Макро. VBA гораздо более гибкий и мощный, и я все еще борюсь с некоторыми из доступных функций (гораздо больше, чем с макросами). Если у модераторов нет возражений, я бы хотел удалить этот «вопрос» с форума - или вы можете сделать это за меня. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...