【问题标题】:How do I get VBA to recognize "001" for my loop?如何让 VBA 为我的循环识别“001”?
【发布时间】:2014-04-15 13:49:52
【问题描述】:

我正在制作一个基本循环如下:

Sub IntegerTestforSuffixFinder()

Dim i As Double

i = 1
MsgBox (i)

    Do While i < 100
i = i + 1
    If vbOK Then
MsgBox (i)
    Else: End
    End If

    Loop

End Sub

这很好用......但我真的需要它来解决我要解决的实际问题是识别 i = 001。在这种情况下,零是重要的占位符,但它不断纠正我i = 1。有没有办法阻止这种情况?

非常感谢!

【问题讨论】:

  • 按照规定的格式将 integer 转换为 string整数没有前导零。
  • 数字就是数字;前导零完全没有意义。
  • 我不使用 VBA,但它看起来像 - Excel,无论如何 - 提供了一个 Format可能可以使用类似 Format(CStr(i), "000")
  • 哦,我太傻了。好的,现在它可以显示“001”,然后继续到 2、3、4、5。有没有办法设置它来像整数而不是字符串一样添加它......?我知道它将它识别为字符而不是整数,这就是为什么它不会进行数学运算,但可以用另一种方式完成吗?
  • @meer2kat i 变量应该总是代表一个整数,因此它总是“像整数一样相加”;只是strOfI = ToStringWithSpecificFormat(i) 应该是一个字符串。然后MsgBox(strOfI)MsgBox(ToStringWithSpecificFormat(i)) - 也许没有为both 消息框添加转换?

标签: string vba loops integer


【解决方案1】:

你不会的。而你不能。但是您可以在循环中使用原始 Integer,并创建一个可以显示的字符串。试试这个,看看你能不能从中得到你需要的东西:

Sub IntegerTestforSuffixFinder()

Dim i As Double

i = 1
MsgBox (i)

    Do While i < 100
    i = i + 1
    If vbOK Then
       'Original integer
       MsgBox (i)
       '3-character string created by using the Right() function
       MsgBox Right("000" & i, 3)
    Else: End
    End If

    Loop

End Sub

顺便说一句,在您最初的示例中,您意识到您是在 2 开始您的 MsgBox 吗?您设置 i = 1,然后在显示第一个 MsgBox 之前将其加 1。我想您可能希望将 i = i + 1 行移到 Loop 之前。

【讨论】:

  • 完美运行!我刚刚删除了“MsgBox (i)”并且 i = 1。非常感谢!效果很好!
【解决方案2】:

试试这个: 格式单元格 - 自定义。查找带有“0”的类型。键入三个“0”,如下所示:

值保持为整数。

【讨论】:

  • @meer2kat 哦,好的,你从 Johnny 那里找到了解决方案
猜你喜欢
  • 2017-06-30
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
相关资源
最近更新 更多