【发布时间】:2022-02-16 18:43:01
【问题描述】:
在我的一个每周文件中,我遇到了一个循环问题,该循环会提供文件名的日期部分。
文件可以在一周中的任何一天或相关后一周的前几天生成,具体取决于源数据何时准备好,但必须以它包含数据的最后日期的 yyyymmdd 格式的日期作为前缀.
执行此操作的最简单方法是通过宏开头的输入框进行设置,然后在将组件报告保存到其文件夹中时可以调用该输入框。
我的问题是用户可以将任何内容放入输入框中(我认为需要将其格式化为其他元素的字符串,因为我对 VBA 的了解不够了解如何将数字变量调用到我的保存名称中) .
我想添加一个循环,说明它是否为 8 个字符长,如果是数字则继续,否则重新输入日期。
Dim svdate As String
Sub inpt()
Do
svdate = InputBox("date")
If Len(svdate) = 8 And IsNumeric(svdate) Then
MsgBox svdate
Else
MsgBox ("the value should be a number in format yyyymmdd please try inputting the date again")
End If
Loop Until True
我一直在一个单独的子程序中测试上述代码,因此 if true 部分的 msgbox 将替换为正确输入日期后将运行的其余子程序。
我已将 svdate 变量定义为模块级别的项目,因为它在所有工作的更广泛的宏中的许多其他阶段都被调用。我只想确保用户在组合代码之前只能输入适当的日期。
就代码而言,它会要求我在框中输入日期,然后显示 2 个 msgbox 之一,但如果为 false 则不会返回到输入框阶段。
【问题讨论】:
-
问题:为什么你认为循环应该再次运行?目前它循环直到 true = true。 ...当 svdate 正常时,您需要一个为 true 的变量,否则为 false。然后你的
loop until检查必须评估这个变量。顺便说一句@ChristoferWeber:在 else 之后有一个冒号是可以的,因为它就像一行中的两个命令。 -
感谢编辑,因为它只是我的 vba 编辑器的副本转储,我自己从未添加冒号,所以不知道为什么它仍然没有循环
-
嗨,我没有放一个循环,说是 if stement true if yes end loop if not go back until to the start to make it true (kloop until代码末尾的真实行)。如果不是,我该怎么做,因为我试图确保用户收到错误消息,解释为什么输入框需要重新填充,然后再次弹出,直到输入有效值
-
就像
If后面跟着一个返回真或假的语句一样,Loop until的作用完全一样。在您的情况下,语句是true,这就像在If等效项中说If True Then,因为它将始终返回 true。正如艾克所说,真=真。虽然你基本上想要Loop Until Len(svdate) = 8 And IsNumeric(svdate)