Функция цикла For не будет работать, но даст тот же результат без каких-либо ошибок обмена сообщениями - PullRequest
0 голосов
/ 17 мая 2019

После применения фильтра даты в столбце L J1 подсчитывает количество видимых элементов. В приведенном ниже коде я пробую цикл дат, где я могу вернуться в прошлое и посмотреть на конкретный месяц.Например, посмотрите на месяц, предшествующий тому, на который я могу смотреть, и так далее.

Я попытался создать небольшие вспомогательные макросы, которые я могу вызвать после завершения работы основного макроса, но я не могу собрать их так, чтобы маленькие макросы вызывались по порядку и выполнялись один за другим.

Option Explicit

Sub trial_trial_Table()

    Dim StartDate As Long, EndDate As Long, mois As Long, nextmonth As Long, z As Long, x As Long, i As Long

    z = StartDate
    StartDate = DateSerial(Year(Date), Month(Date) - 1, 1)
    x = EndDate
    EndDate = DateSerial(Year(Date), Month(Date) - 0, 0)

    z = 1

    For z = StartDate - 1 To StartDate

        z = z - 1

        x = 0

        For x = 0 To 12 'EndDate

            x = x - 1

            StartDate = DateSerial(Year(Date), Month(Date) - 1, 1) 'The first day of the previous month:
            EndDate = DateSerial(Year(Date), Month(Date) - 0, 0) 'The last day of the previous month:

            Sheets("Essais").Select

            ActiveSheet.Range("$A$1:$M$4822").AutoFilter Field:=12, _
                                                    Criteria1:=">=" & StartDate, _
                                                    Operator:=xlAnd, _
                                                    Criteria2:="<=" & EndDate
        Next x

    Next z

End Sub

Я бы хотел, чтобы макрос работал.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 17 мая 2019

Не уверен, что вы пытаетесь достичь.Если вы хотите вызвать «маленький» саб внутри другого сабвуфера, вы можете сделать это с помощью команды call:

Call NameOfSmallSub()

Таким образом, вы можете вызвать любое количество макросов в строке.

Несколько подсказок, чтобы ваш код заработал:

Каждая длинная переменная содержит значение 0 при инициализации (ваша команда Dim).Поэтому, когда вы назначаете StartDate для x сразу после инициализации, вы можете просто написать «x = 0».Поскольку после этого вы устанавливаете другое значение x без использования x между ними, это назначение вообще не требуется.

Кроме того, когда вы вычитаете 0 из числа, это не влияет на него.Поэтому вместо написания «Месяц (Дата) - 0» это будет точно такой же «Месяц (Дата)».Я не уверен, что вы ожидаете от возвращения DateSerial с днем ​​"0".Я бы посоветовал вам отлаживать вашу строку кода построчно и наблюдать за всеми вашими переменными, чтобы увидеть, что на самом деле происходит.

Ваш цикл будет работать вечно, так как вы уменьшаете свою циклическую переменную x каждый раз.Ваша петля никогда не может достичь своего конца таким образом.Но для чего вам нужен ваш цикл?

Кажется, вы не знакомы со сценариями vba.Вероятно, вы можете достичь в Excel, что вы хотите, даже без сценариев VBA?Я хотел бы задать новый вопрос и описать, что я хочу, и попросить хороший способ достичь этого.

Надеюсь, это немного поможет.

...