【问题标题】:VBA -- Filling text boxes with line breaks via loops and ifsVBA——通过循环和ifs用换行符填充文本框
【发布时间】:2013-12-30 20:33:12
【问题描述】:

我正在尝试使用Forif 语句的嵌套填充一系列text 框(一直命名为b0b41)。我在格式化时遇到了麻烦。这是我得到的:

'Fill in Names under dates
    For x = 1 To intSize 'open loop to go through array that holds days off
        For y = 0 To 41 'open loop to cycle through the text boxes
            'check if date in array matches text box date
            If Me("id" & y) = arrVacay(x).DayOff Then
                If Me("b" & y).Value = "" Then
                    Me("b" & y) = arrVacay(x).PersonOff
                Else
                    Me("b" & y) = Me("b" & y) & vbCrLf & arrVacay(x).PersonOff
                End If
            End If
        Next y
    Next x

arrVacay 是一个包含日期和名称的变体数组。该代码基本上读取我的数组以查找名称需要去的日期。每个日期可以有多个名称。然后将该名称放入相应的框中。多个名称可以并且将进入任何给定的框。

我的问题是,当我运行程序时,我的文本在第一个名称之前显示一个换行符。有什么想法吗?

编辑:在 T McKeon 发表评论后,我将发布我目前的结果 --

以上代码产生:

 12/31/13
---> space here   
    John  
    Mary

我不希望日期和名字之间有空格。从我的附加行中删除 VbCrLf 会在一行中生成两个名称。

编辑:

使用下面的 cmets,我稍微修改了代码。我切换了我的 For 巢,看看是否有什么不同。没有

For y = 0 To 41
    For x = 1 To intSize
        If Me("id" & y) = arrVacay(x).DayOff Then
            If Me("b" & y) Is Nothing Then
                Me("b" & y) = Me("b" & y) & arrVacay(x).PersonOff
            End If
        End If
    Next x
Next 

使用此代码,我什么也没有填写。

如果我注释掉最内层的If 语句但留在最内层的行,我的名字会出现在正确的位置,但行距仍然没有。

【问题讨论】:

  • 您确定数组第一次在 arrVacay(x).DayOff 上找到匹配项时会返回 ""?
  • 好吧,它不应该在第一场比赛中返回 ""。它应该是我在 Access 中的表中的日期。基本上,如果文本框为空,我希望它把名字放在第一行。如果它不为空,我希望它获取其中的内容并移动到下一行以获取下一个名称......依此类推。我会发布我所得到的
  • 我的意思是它应该返回一个名称,而不是一个日期
  • 您确定代码不总是输入else 吗?这可以解释日期和第一个名字之间的“空格”。
  • @ssarabando -- 我现在正在测试它,这正是正在发生的事情。你知道为什么会这样吗?

标签: arrays vba loops text


【解决方案1】:

删除下面的vbCrlf:

            If Me("b" & y).Value = "" Then
                Me("b" & y) = arrVacay(x).PersonOff
            Else
                Me("b" & y) = Me("b" & y) & vbCrLf & arrVacay(x).PersonOff
            End If

【讨论】:

  • 仅从代码中删除“vbCrLf”的问题,然后名称只是背靠背放在同一行。我正在更新我的原始帖子以显示我当前的结果。
【解决方案2】:

终于找到了解决方案...我刚刚初始化了我所有的 b-box 并且它起作用了。

For z = 0 To 41
    Me("b" & z).Value = ""
Next z

For y = 0 To 41
    For x = 1 To intSize
        If Me("id" & y) = arrVacay(x).DayOff Then
            If Me("b" & y).Value = "" Then
                Me("b" & y) = Me("b" & y) & arrVacay(x).PersonOff
            Else
                Me("b" & y) = Me("b" & y) & vbCrLf & arrVacay(x).PersonOff
            End If
        End If
    Next x
Next y

谢谢你们帮我集思广益,伙计们。

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多