【问题标题】:How can I set up a continuation of my Do...While... Loop (VBA)?如何设置我的 Do...While... Loop (VBA) 的延续?
【发布时间】:2014-04-16 17:45:54
【问题描述】:

现在,我只是显示一个消息框,其中将显示一个文件名(这里的示例是 PrettyPonies)、一个连字符和一个从 001,002,003 开始​​的后缀......等等。为后缀推荐的方法效果很好,直到它达到“010”,此时它显示“0010”,因为它的设置方式。为了解决这个问题,我想创建 2 组 Do...While 循环,如下所示:

Sub IntegerTestforSuffixFinder()

Dim i As Double
Dim NameStr As String
Dim LengthMeasure As Integer

NameStr = "PrettyPonies"
LengthMeasure = Len(NameStr)

    Do While i < 9
    i = i + 1
        If vbOK Then
   '3-character string created by using the Right() function
   MsgBox Right(NameStr + "-" + "00" & i, LengthMeasure + 4)
        Else: End
        End If

    Do While i > 10 And i < 99
    i = i + 1
        If vbOK Then
    MsgBox Right(NameStr + "-" + "0" & i, LengthMeasure + 4)
        Else: End
        End If

Loop
Loop

End Sub

但是,我知道我在循环之间遗漏了一些东西,以使其继续到第二组。我试过把它变成一个完全不同的子,并尝试说继续或然后无济于事。程序在到达 009 后才退出子程序。

如何组合我的循环以使其最多计数为 99?

【问题讨论】:

  • Do While i &gt; 10 And i &lt; 99 更改为Do While i &gt;= 10 And i &lt; 99。顺便说一句,为什么不使用单循环Do While i &lt; 99 并使用MsgBox NameStr &amp; "-" &amp; Right("00" &amp; i, 3)
  • 不走运,同样的结果:(
  • 在上面看到我更新的评论
  • 嗯,因为我不知道这会奏效!我对 VBA 还是很陌生。效果很好,非常感谢!

标签: string vba loops concatenation


【解决方案1】:

将此代码与单循环一起使用:

Sub IntegerTestforSuffixFinder()

    Dim i As Double
    Dim NameStr As String
    Dim LengthMeasure As Integer

    NameStr = "PrettyPonies"
    LengthMeasure = Len(NameStr)

    Do While i < 99
        i = i + 1
        If vbOK Then
            '3-character string created by using the Right() function
            MsgBox NameStr & "-" & Right("00" & i, 3)
        Else: Exit Sub
        End If
    Loop
End Sub

顺便说一句,不要使用Else: End,而是使用Else: Exit Sub

还有一件事,因为vbOK 等于1,你的Else 部分永远不会计算。在你的真实代码中,你可以使用这样的东西:

If MsgBox("Any Question", vbOKCancel) = vbOK Then

【讨论】:

    【解决方案2】:

    您跳过 10 是因为您对 i 何时大于 10 的测试。此外,您永远不会从 9 递增到 10。要修复当前的实现,请尝试以下操作:

    Sub IntegerTestforSuffixFinder()
    
    Dim i As Double
    Dim NameStr As String
    Dim LengthMeasure As Integer
    
    NameStr = "PrettyPonies"
    LengthMeasure = Len(NameStr)
    
        Do While i < 9
        i = i + 1
            If vbOK Then
       '3-character string created by using the Right() function
       MsgBox Right(NameStr + "-" + "00" & i, LengthMeasure + 4)
            Else: End
            End If
        Loop
    
    i = i + 1
        Do While i >= 10 And i < 99
            If vbOK Then
               MsgBox Right(NameStr + "-" + "0" & i, LengthMeasure + 4)
            Else: End
            End If
            i = i + 1
        Loop
    
    End Sub
    

    为了简化你的实现,试试这个:

    Sub MyCounter()
        Dim i As Double
        Dim NameStr As String
        Dim LengthMeasure As Integer
        Dim leadingZero As String
    
        NameStr = "PrettyPonies"
        LengthMeasure = Len(NameStr)
    
        For i = 1 To 99 Step 1
            If i > 9 Then leadingZero = "0" Else leadingZero = "00"
    
            MsgBox Right(NameStr + "-" + leadingZero & i, LengthMeasure + 4)
        Next i
    End Sub
    

    【讨论】:

      【解决方案3】:

      尝试以下方法:`

      Do While i < 100
          i = i + 1
          Debug.Print "XXX" & "-" & Format(i, "000")
      
      Loop
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-26
        • 2016-07-21
        • 1970-01-01
        • 2011-12-16
        • 2014-01-11
        • 2012-08-10
        • 1970-01-01
        相关资源
        最近更新 更多