Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用循环将数据放入多个不同的文本框中_Loops_Excel_Vba - Fatal编程技术网

Loops 使用循环将数据放入多个不同的文本框中

Loops 使用循环将数据放入多个不同的文本框中,loops,excel,vba,Loops,Excel,Vba,我在Excel 2010中工作,开发一个用户表单,用于将数据输入到电子表格中(我们不相信每个最终用户都能在打开的电子表格中正确输入数据) 目前,每个文本框的名称为txtDataVal1到N,每个新框的编号都会增加,以下代码用于将数据从文本框移动到电子表格: 'intRowSelect is given a value elsewhere, by the user's list box selection Cells(intRowSelect, 2).Value = txtDataVal1.Val

我在Excel 2010中工作,开发一个用户表单,用于将数据输入到电子表格中(我们不相信每个最终用户都能在打开的电子表格中正确输入数据)

目前,每个文本框的名称为txtDataVal1到N,每个新框的编号都会增加,以下代码用于将数据从文本框移动到电子表格:

'intRowSelect is given a value elsewhere, by the user's list box selection
Cells(intRowSelect, 2).Value = txtDataVal1.Value
Cells(intRowSelect, 3).Value = txtDataVal2.Value
....
Cells(intRowSelect, 20).Value = txtDataVal20.value
我的问题是:有没有一种方法可以编写一个简单的循环来增加txtDataVal末尾的数值,这样我就没有100多行以上的庞大代码了

例如(我知道这是一个非功能性的例子,考虑它是伪代码):

Dim i作为整数
Dim INTCOLUMN选择为整数
intColumnSelect=1
i=1
在我选择的时候做
intColumnSelect=intColumnSelect+1
单元格(intRowSelect,intColumnSelect).Value=“txtDataVal”+i.Value
i=i+1
环

在while循环中,您可以引用文本框作为表单控件集合的一部分来完成此操作。假设您的表单名为FORM1:

Do While i < intColumnSelect
  intColumnSelect = intColumnSelect + 1
  Cells(intRowSelect, intColumnSelect).Value = FORM1.Controls("txtDataVal" & i).Value
  i = i + 1
Loop
Do While i
我现在面临一个意外错误。使用上面的代码,我得到“运行时错误'13':类型不匹配”。它似乎对“txtDataVal”或+i有问题,知道吗?是我的错。我用了
+
而不是
&
。一个将东西添加到一起,另一个将。。。无法添加字符串:(我已经更新了答案。这就是问题!谢谢。不过我发现我的逻辑中有一个缺陷,我和intColumnSelect最终会超过表单上的文本框数量,导致错误(文本框不存在,无法写入!)为了解决这个问题,我在工作表上计算了使用过的标题列,代码仍然处理动态列数,以及动态文本框数。只为将来的编码人员指出这一点。非常感谢,J!
Do While i < intColumnSelect
  intColumnSelect = intColumnSelect + 1
  Cells(intRowSelect, intColumnSelect).Value = FORM1.Controls("txtDataVal" & i).Value
  i = i + 1
Loop