首页 > 解决方案 > For 循环函数不起作用,但会给出相同的结果,而不会出现任何消​​息传递错误

问题描述

一旦应用了 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

我希望宏起作用。如果你可以请帮忙。

标签: excelexcel-2010

解决方案


不确定,你想要完成什么。如果想在另一个子中调用“小”子,可以使用命令调用来完成:

Call NameOfSmallSub()

这样,您可以连续调用任意数量的宏。

一些提示可以让您的代码运行:

每个 long 变量在初始化时(您的 Dim 命令)都保存值 0。因此,当您在初始化后立即将 StartDate 分配给 x 时,您可以只写“x = 0”。由于您在这之后为 x 设置了另一个值,而在两者之间没有使用 x,因此根本不需要此分配。

此外,当您从数字中减去 0 时,这对其没有影响。所以不要写“Month(Date) - 0”,这将是完全相同的“Month(Date)”。我不确定,您对日期为“0”的 DateSerial 返回的期望是什么。我建议您调试您的代码行并观察所有变量以查看实际发生的情况。

您的循环将永远运行,因为您每次都会减少循环变量 x。你的循环永远不会像那样结束。但是无论如何你需要你的循环做什么?

看来,您不熟悉 vba 脚本。即使没有 vba 脚本,您可能也可以在 excel 中实现您想要的?我会提出一个新问题并描述我想要拥有的东西,并寻求一种实现这一目标的好方法。

希望这会有帮助。


推荐阅读