【问题标题】:While loop to input from multiple texboxWhile循环从多个文本框输入
【发布时间】:2023-03-27 09:05:01
【问题描述】:

我在 vba 用户窗体上有 20 个文本框,这些文本框应该从条形码阅读器中获取它们的值,我创建了一个 while 循环来从这些文本框中获取值并将它们输入到下一个空行,但是当我检查结果我遇到了 2 个问题

J = 0
While J < 20
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 
ws.Range("A" & LastRow).Value = Now()
ws.Range("B" & LastRow).Value = Me.Controls("TextBox" & J + 1).Value 
ws.Range("D" & LastRow).Value = Me.Controls("TextBox" & J + 2).Value 
ws.Range("I" & LastRow).Value = TextBox21.Value
J = J + 1
Wend
  1. 在 D 列中插入的数量在下一行 B 列中重复
  2. 即使文本框是空的,它仍在放置数据正如您在红色突出显示的部分中看到的那样

【问题讨论】:

  • 你正在使用 J+1 和 J+2,所以当 J 迭代时,你的新 J+1 = 旧 J+2
  • 您真正想要发生什么?看起来你在说 B = 文本框 1,D = 文本框 2,然后你迭代和 B = 文本框 2,D = 文本框 3。我假设你想要一些修饰符来增加 J 更高,例如,B = 2*J+1和 D = 2*J+2 什么的
  • 是的,我实际上是这样做的,因为我必须从一行的 2 个文本框中获取输入,并且 TextBoxes 不是按顺序排列的,而是以奇数和偶数排列的,所以它类似于 Textbox1 和 Textbox2 一行,然后是 TextBox3另一个是 TextBox4。

标签: excel vba


【解决方案1】:

将作为答案发布,因此可以将其标记为这样,尽管我在评论中列出了这一点:

J = 0
While J < 20
    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 
    ws.Range("A" & LastRow).Value = Now()
    ws.Range("B" & LastRow).Value = Me.Controls("TextBox" & J*2 + 1).Value 
    ws.Range("D" & LastRow).Value = Me.Controls("TextBox" & J*2 + 2).Value 
    ws.Range("I" & LastRow).Value = TextBox21.Value
    J = J + 1
Wend

之后可能想检查你的 J max...

第 1 行使用 J = 0,所以文本框 1,文本框 2

第 2 行使用 j = 1,因此文本框 1*2+1 (3) 和文本框 1*2+2 (4)

第 3 行使用 j =2,所以文本框 2*2+1 (5) 和文本框 2*2+2 (6)

等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2018-09-08
    • 2018-04-16
    • 1970-01-01
    • 2017-10-12
    • 2011-08-09
    • 2013-10-15
    • 2013-10-18
    相关资源
    最近更新 更多